Linux 구동 모델 의 바 텀 데이터 구조 kobject 와 kset 분석

1、kobject
        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);

좋은 웹페이지 즐겨찾기