리눅스 sysfs 예제

우리가 sysfs 속성에 뭔가를 쓸 때마다 저장소 함수가 호출됩니다. 예제를 참조하십시오. 특성을 만들려면 다음 sysfs API가 사용됩니다. /proc 파일 시스템은 이 목적을 위해 만들어졌습니다. proc 파일 시스템을 통해 각 프로세스에는 /proc 폴더에 해당 디렉토리가 있습니다. 원래 사용자 공간에 프로세스 관련 정보를 제공하도록 설계되었습니다. /proc 파일 시스템에 디렉토리와 파일을 추가하는 것이 더 쉽습니다. 따라서 많은 커널 하위 시스템이 사용자 공간에 정보를 표시하기 위해 이 파일 시스템을 사용하기 시작했습니다. 또한 커널 모듈 내부의 설정을 제어하기 위해 사용자 공간에서 입력을 하는 데 사용됩니다. 그러나 /proc 파일 시스템은 많은 비 프로세스 관련 정보로 복잡해지고 있습니다. Linux 2.5 개발 주기에서 /sys 파일 시스템이라는 새로운 인터페이스가 도입되었습니다. Sysfs는 RAM 기반 파일 시스템입니다.

커널 데이터 구조와 해당 특성을 커널에서 사용자 공간으로 내보내도록 설계되어 /proc 파일 시스템을 어지럽히지 않습니다. procfs를 통해 sysfs의 장점은 다음과 같습니다 : 표시 – 파일이 sysfs에서 읽을 때 호출 되는 함수에 대한 포인터, 여기서 kobj는 이름을 바갈해야 하는 디렉토리에 해당하는 kobject 포인터이며 new_name은 디렉토리에 부여됩니다. sysfs 인터페이스는 일반적으로 직접 호출 되지 않기 때문에 다음 kobject 인터페이스 는 이름 바꾸기 목적에 대 한 호출: 어디, kobj: 이것은 링크를 만들 수 있는 디렉토리를 나타내는 kobject에 대 한 포인터입니다. 대상: 링크를 가리키는 대상 디렉토리입니다. 이름: 링크를 만들 이름입니다. 이 예제에서는 링크가 다음과 같이 만들어집니다. …여기서 attr은 생성할 파일을 나타내는 특성이며, show는 파일을 sysfs로 읽을 때 호출되는 함수에 대한 포인터이며, 저장은 파일이 sysfs로 작성될 때 호출되는 함수에 대한 포인터입니다. 예제로 만든 /sysfs/커널/example_dev 디렉터리에서 예제_info 파일을 만들어야 한다고 가정합니다. 다음 방법은 특성을 정의하는 방법입니다: 이 디렉터리에는 커널에 로드되는 각 모듈에 대한 하위 디렉토리가 포함되어 있습니다. 포함된 슬래시를 느낌표로 대체하여 이름이 파일 이름으로 적합합니다.

그런 다음 kobject_add()는 sysfs 트리에 사물을 넣습니다. 어디? subsys 아래, 즉 /sys/block/fd0으로, 왜냐하면 alloc_disk()가 우리를 가리키는 곳이기 때문입니다. 예를 들어, kobjects를 참조 하는 floppy.c의 유일한 부분은 루틴 그것은 장치 모델및 그것의 sysfs 인터페이스의 대부분을 함께 보유 하는 접착제. Kobject 참조 카운트 각 kobject에는 참조 카운터인 멤버 구조체 크레프가 있습니다. 모든 모듈이 이미 만든 kobject를 사용하려는 경우 이 참조 수는 증가하며 해당 모듈이 kobject 사용을 중지하려고 할 때마다 참조 수가 감소되어 kobject 또는 sysfs 디렉터리를 사용하여 모듈 수를 유지합니다. kobject로 표현됩니다. 참조 수가 0에 도달할 때마다 kobject_create_and_add에서 할당한 kobject와 관련된 메모리가 해제되고 kobject_create_and_add를 사용하여 kobject가 생성될 때마다 내부적으로 kref 참조 카운터를 하나씩 초기화합니다. 이는 kobject가 현재 모듈에서 사용되고 있음을 나타내고 kobject_create_and_add를 내부적으로 kobject에 대한 디렉토리를 만듭니다. 새 모듈에서 해당 kobject로 표시되는 디렉터리를 사용하려는 경우 참조 카운터를 증분해야 합니다. 참조 수는 다음 함수를 사용하여 kobject에서 유지됩니다.

About the author: mcadmin