Linux에서 장치와 상호 작용하는 가장 유용한 (기능 측면에서) 방법을 명확하게하려고합니다. 내가 이해하는 것처럼 장치 파일은 기능의 일부 (블록 장치의 주소 블록, 문자 장치의 스트림 등) 만 노출합니다. ioctl(2)
가장 일반적으로 사용되는 것으로 보이지만 일부 사람들은 안전하지 않다고 말합니다.
좋은 기사 나 다른 관련 조언을 환영합니다.
답변
ioctl
/dev
출품작 과 손을 잡고 경향이있다 . 일반적인 코드는
fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);
이것은 완벽한 표준 유닉스 행동입니다. 커널 드라이버 안에는 액세스 제어를 할 수 있습니다 (예 : root
일부 작업 만 수행하거나보다 세밀한 액세스를 위해 특정 기능이 필요할 수 있음).
물론 이것은 장치가 블록 / 문자 읽기 / 쓰기 활동을 사용하는 것보다 훨씬 더 많이 노출 할 수 있음을 의미합니다. 많은 일들이 ioctl
전화 를 통해 이루어질 수 있습니다 . 그리 쉬운에서 아주 쉽게 쉘 스크립트에서 사용할 수 있지만,하기 C
또는 perl
또는 python
또는 유사한.
sysfs
항목은 드라이버와 상호 작용하는 또 다른 방법입니다. 일반적으로 각 명령 유형은 서로 다른 항목을 가지므로 드라이버 작성이 복잡 할 수 있지만 사용자 공간을 통해 쉽게 액세스 할 수 있습니다. 간단한 쉘 스크립트는 많은 것을 조작 할 수 있지만 매우 효율적이지 않을 수 있습니다
netlink
주로 네트워크 데이터 전송에 중점을두고 있지만 다른 용도로도 사용될 수 있습니다. 대량의 데이터 전송에 실제로 유용하며 ioctl
경우에 따라 후속 작업이 될 수 있습니다 .
모든 옵션이 좋습니다. 사용 사례는 드라이버에서 노출 할 인터페이스 유형을 더 잘 결정할 수 있습니다.