장치 파일, ioctl, sysfs, netlink의 사용량 차이 유용한 (기능 측면에서) 방법을 명확하게하려고합니다.

Linux에서 장치와 상호 작용하는 가장 유용한 (기능 측면에서) 방법을 명확하게하려고합니다. 내가 이해하는 것처럼 장치 파일은 기능의 일부 (블록 장치의 주소 블록, 문자 장치의 스트림 등) 만 노출합니다. ioctl(2)가장 일반적으로 사용되는 것으로 보이지만 일부 사람들은 안전하지 않다고 말합니다.

좋은 기사 나 다른 관련 조언을 환영합니다.



답변

ioctl/dev출품작 과 손을 잡고 경향이있다 . 일반적인 코드는

fd=open("/dev/mydevice",O_RDRW);
ioctl(fd,.....);

이것은 완벽한 표준 유닉스 행동입니다. 커널 드라이버 안에는 액세스 제어를 할 수 있습니다 (예 : root일부 작업 만 수행하거나보다 세밀한 액세스를 위해 특정 기능이 필요할 수 있음).

물론 이것은 장치가 블록 / 문자 읽기 / 쓰기 활동을 사용하는 것보다 훨씬 더 많이 노출 할 수 있음을 의미합니다. 많은 일들이 ioctl전화 를 통해 이루어질 수 있습니다 . 그리 쉬운에서 아주 쉽게 쉘 스크립트에서 사용할 수 있지만,하기 C또는 perl또는 python또는 유사한.

sysfs항목은 드라이버와 상호 작용하는 또 다른 방법입니다. 일반적으로 각 명령 유형은 서로 다른 항목을 가지므로 드라이버 작성이 복잡 할 수 있지만 사용자 공간을 통해 쉽게 액세스 할 수 있습니다. 간단한 쉘 스크립트는 많은 것을 조작 할 수 있지만 매우 효율적이지 않을 수 있습니다

netlink주로 네트워크 데이터 전송에 중점을두고 있지만 다른 용도로도 사용될 수 있습니다. 대량의 데이터 전송에 실제로 유용하며 ioctl경우에 따라 후속 작업이 될 수 있습니다 .

모든 옵션이 좋습니다. 사용 사례는 드라이버에서 노출 할 인터페이스 유형을 더 잘 결정할 수 있습니다.