device 의 highrakey 를 관리하는 구조체. sysfs 노드로 표현됨. Kernel내부의 객체를 파일로 표현하므로써 User 에서 커널 내부의 대상을 파일 읽고/쓰기를 할 수 있게 만들어 줌.
"kobject_example"라는 이름으로 만들어진 kobject는 리눅스 파일시스템 경로 "/sys/kernel/kobject_example"에 표출 됩니다. 바로 이부분이 중요합니다. 리눅스 커널안에 있는 객체(kobject)가 파일로 표출된다는 것입니다. 이렇게 되면 커널 밖에 있는 사용자는 파일을 통해서 커널안의 객체(kobject)에 데이터를 읽고 쓸수 있게 됩니다. 커널의 특정 데이터에 접근할 수 있는 통로가 생기는 셈입니다.
(출처: https://www.kernel.bz/boardPost/118679/9)
static struct kobject *example_kobj;
static int __init example_init(void)
{
int retval;
example_kobj = kobject_create_and_add("kobject_example", kernel_kobj);
if (!example_kobj)
return -ENOMEM;
/* Create the files associated with this kobject */
retval = sysfs_create_group(example_kobj, &attr_group);
if (retval)
kobject_put(example_kobj);
return retval;
}
kobject_create_and_add()
를 통해 struct kobject *
구조체 포인터를 생성하고.sysfs_create_group()
을 호출한다.Kernel의 데이터나 객체를 User가 파일로 읽고 쓸수 있게 만들어주는 kobject 생성이 핵심이고, sysfs는 그 kobject를 특정 파일시스템에 등록하는것일 뿐. (참고로 sysfs 파일시스템은 커널2.4에서 무질서하게 나열되어있던것을 체계적으로 /sys/ 내에 분류하는 목적으로 만들어졌다고 한다.)