Linux 구동 모델 의 바 텀 데이터 구조 kobject 와 kset 분석
Linux 커 널 은 커 널 대상 을 kobject 로 표시 합 니 다.이 는 Sysfs 파일 시스템 과 밀접 한 관 계 를 가지 고 있 으 며, 커 널 에 시스템 에 등 록 된 모든 kobject 대상 은 sysfs 파일 시스템 에서 파일 디 렉 터 리 에 대응 하고 있 습 니 다.kobject 데이터 구조의 일반적인 용법 은 그의 데이터 구조 (즉 용기, 예 를 들 어 cdev 구조) 에 삽입 되 어 커 널 이 이러한 데이터 구조 대상 에 대한 관 리 를 실현 하 는 데 사용 된다.이 데이터 구조 (용기) 는 kobject 를 통 해 연결 되 어 트 리 구 조 를 형성 했다.
원본 코드 에서 다음 과 같이 정의 합 니 다.
/**/
struct kobject {
const char *name;/* , , sysfs */
struct list_head entry;/* , */
struct kobject *parent;/* , */
struct kset *kset;/* kset ,kset subsystem, kobject*/
struct kobj_type *ktype;/* sysfs , sysfs */
struct sysfs_dirent *sd;/* sysfs */
struct kref kref;/* , */
unsigned int state_initialized:1;/* */
unsigned int state_in_sysfs:1;/* sysfs */
unsigned int state_add_uevent_sent:1;
unsigned int state_remove_uevent_sent:1;
};
커 널 에 서 는 kobject 대상 을 조작 하 는 함수 들 을 정의 하 였 으 며, 주의해 야 할 것 은 드라이버 가 일반적으로 이러한 커 널 바 텀 함수 와 직접 접촉 하지 않 는 다 는 것 이다.커 널 정의 함 수 는 다음 과 같 습 니 다.
kobject_set_name(struct kobject *kobj, const char *name, ...)
__attribute__((format(printf, 2, 3)));
/* : kobject name */
kobject_init(struct kobject *kobj, struct kobj_type *ktype);
/* : kobject */
kobject_add(struct kobject *kobj,struct kobject *parent, const char *fmt, ...);
/* : kobject , :*/
/* : kobject 。 : sysfs */
kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,
struct kobject *parent, const char *fmt, ...);
/* : kobject */
kobject_del(struct kobject *kobj);
/* : sysfs kobject , kset */
kobject_create(void);
/* : kobject */
kobject_create_and_add(const char *name,struct kobject *parent);
/* : kobject , */
kobject , kobject , , sysfs , /sys 。 sysfs kobject , kobject 。
2、kset
kset kobject , kobject 。kset , kobject , :
/**/
struct kset {
struct list_head list;/* kobject */
spinlock_t list_lock;/* kset list */
struct kobject kobj;/* kset kobject */
struct kset_uevent_ops *uevent_ops;/* kset kobject , */
};
커 널 에 kset 대상 을 조작 하 는 함수 가 정의 되 어 있 습 니 다. 커 널 정의 함 수 는 다음 과 같 습 니 다.set_init(struct kset *kset);/* : kset */
kset_register(struct kset *kset);/* : kset */
kset_unregister(struct kset *kset);/* : kset */
kset_create_and_add(const char *name,/* : kset , sysfs */
struct kset_uevent_ops *u,
struct kobject *parent_kobj);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Sparse Table을 아십니까? 나는 알고 있다.Sparse Table을 지금 배웠으므로, 메모를 겸해 씁니다. 불변의 수열의 임의의 구간에 대한 최소치/최대치를, 전처리 $O(N\log N)$, 쿼리 마다 $O(1)$ 로 구하는 데이터 구조입니다. 숫자 열의 값...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.