ULK 기반 장치 파일 및 드라이버에 문제가 있으므로 커널은 2.6.11입니다. 내 이해는 다음과 같습니다.
사용자가 일부 장치 파일에서 시스템 호출 open()을 실행할 때 커널은 때때로 장치 파일의 inode에서 읽기/쓰기 기능을 요청합니다.
장치 파일은 /sys 폴더의 장치를 기반으로 udev에 의해 생성됩니다. 이는 장치 파일의 inode에 read() 및 write()와 같이 장치와 통신하는 방법을 아는 함수를 가리키는 i_fop 필드가 있어야 함을 의미합니다. 이는 각 장치 파일의 inode->i_fop 필드가 다른 file_Operations 구조를 가리켜야 함을 의미합니다.
그렇다면 장치 드라이버는 이러한 읽기/쓰기 기능, 아마도 읽기/쓰기/ioctl 등을 포함한 완전한 file_Operations 구조를 제공합니다.
이제 ULK는 (장치 파일의 open() 시스템 호출 설명에서) "장치 파일 유형에 따라 inode 객체의 i_fop 필드를 def_blk_fops 또는 def_chr_fops 파일 작업 테이블의 주소로 설정합니다."라고 말합니다. 블록 장치 파일 동일한 읽기/쓰기 기능을 사용하여 사용자는 어떻게 다른 장치와 통신합니까?
또한 device_driver 구조를 확인했는데 실제로 파일 작업 기능을 위한 공간이 없습니다. 그러면 개방형 시스템 호출이 장치 특정 드라이버를 사용하여 작업을 정확히 어떻게 수행합니까? 장치별 작업 기능이 device_driver에 없으면 장치별 작업 기능은 어디에 있습니까?