저는 Linux 드라이버를 처음 개발했습니다.
전통적으로 char 장치를 만들고 싶다면 구현 read
write
하고 ioctl
기능 을 수행 하고 register_chrdev_region
해당 Major device ID
. 그런 다음을 사용 mknod
하여 해당 Major device ID
. 그런 다음 read
write
open
사용자 공간에서 호출하면 커널에 의해 해당 함수가 호출됩니다.
하지만 지금 은 커널 2.6에 추가 된 및를 연구 Linux device model
하고 sys filesystem
있습니다. /dev filesystem
리눅스는 이제 장치와 드라이버를 다룰 수있는 좋은 장치 모델을 가지고 있기 때문에 가능하다면 사용하지 말라고 들었습니다. 이것은 나를 혼란스럽게했기 때문에 몇 가지 질문으로 요약하겠습니다.
/dev/null
있습니까?udev
기반으로 한다고 들었습니다 . 왜? 나는 "가능하면 수행은 사용하지 말거야 때문에 , 왜 않는다" 사용 에 파일을 만들 ?sys filesystem
/dev
/dev filesystem
udev
/sys
/dev
sys
같은 개념이 있습니까?char device file
block device
/dev
, open
write
에 사용자 공간에서 마지막으로 기능 매핑됩니다 file operation structure
내게로 정의하고 내가 열거 나 쓰기의 파일에 때 함수가 호출됩니다 /ssy
?맥락없이 당신의 문에 대한 /dev
명확하지 않다. 어쨌든:
sysfs에서 char 장치를 만들 수 없습니다. sysfs의 주요 목적은 정보를 내보내고 사용자가 단일 값을 조정할 수 있도록하는 것 /sys/
입니다 (몇 가지 예를 보려면 아래 로 이동 ). Char 장치는 일반적으로 훨씬 복잡한 작업을 수행합니다.
open (2), read (2), write (2), ioctl (2)을 수행하여 드라이버의 open, read, write, ioctl, ...을 호출하는 방법을 의미한다면 (이 명령의 맨 페이지를보십시오 )
장치가 나타나면 커널은 / sys 아래에 디렉토리를 만듭니다. 예를 들어 ls /sys/bus/usb/devices/
. USB 장치가 나타날 때 모든 디렉토리가 생성됩니다. USB 장치를 연결 / 분리하여 시도 할 수 있습니다. udev
sysfs를 주시하여 새 장치를 감지하고 sysfs의 정보에 따라 /dev
. 이것은 운전자가 어떻게 든 전화를 걸 때 발생합니다 device_add()
. 종종이 기능은 같은 다른 레지스터 기능에 의해 호출됩니다 device_create
, device_register
또는 다른 하위 시스템에서 다른.
sysfs의 개념은로드 된 장치 및 드라이버에 대한 정보를 제공하는 것입니다. 따라서 장치, 버스 및 드라이버 옵션을 변경할 수 있습니다. 또는 모듈에 수동으로 장치 연결
실제로 sysfs 속성 뒤에는 file_operation 세트가 있습니다. 여기서 열기, 읽기 및 쓰기는 드라이버가 아닌 커널에 의해 관리됩니다. sysfs 속성을 생성 하려면 드라이버에서 무언가를 읽고 쓰기 위해 show 및 store 함수 쌍을 제공해야합니다 . 그런 다음 커널은 요청을 올바른 속성으로 라우팅합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다