Kernel - kobject

숲사람·2022년 3월 23일
0

Linux Kernel

목록 보기
1/10
post-thumbnail

개요

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;
}
  1. kobject_create_and_add() 를 통해 struct kobject * 구조체 포인터를 생성하고.
  2. 해당 노드를 커널 파일 시스템인 sysfs 에 연결하기 위해 sysfs_create_group() 을 호출한다.

Kernel의 데이터나 객체를 User가 파일로 읽고 쓸수 있게 만들어주는 kobject 생성이 핵심이고, sysfs는 그 kobject를 특정 파일시스템에 등록하는것일 뿐. (참고로 sysfs 파일시스템은 커널2.4에서 무질서하게 나열되어있던것을 체계적으로 /sys/ 내에 분류하는 목적으로 만들어졌다고 한다.)

추가 궁금증

  • kobject를 /sys/ 외에 다른 경로에서 보이게 만들수 있을까?

Refereces

profile
기록 & 정리 아카이브용

0개의 댓글