드라이버에서 직접 호출하는 대신 외부에서 mknod를 호출해야 하는 이유는 무엇입니까?

드라이버에서 직접 호출하는 대신 외부에서 mknod를 호출해야 하는 이유는 무엇입니까?

문자 장치 드라이버에 대해 찾을 수 있는 모든 책/기사/자습서/예제를 읽으면서 모두 드라이버 코드에서 주요 장치 번호를 얻는 방법을 다루었고 모두 호출하여 실제 장치 노드를 생성하도록 제안 했습니다 alloc_chrdev_region(). mknod외부 드라이버 코드를 수동으로 또는 스크립트로. 추천인 중 한 명은 내 운전자가 마스터 장비 번호를 인쇄하기를 원했습니다. 또 다른 사람은 주요 번호를 찾기 위해 awkon을 사용하기를 원합니다 . /proc/devices이 함수가 언급되어 있지만 mknod()사용자 영역 코드에서 사용하기 위한 것으로 보입니다.

내 드라이버를 자급자족할 수 있는 방법이 없는 이유를 이해하지 못하기 때문에 뭔가 빠진 것이 분명합니다. 즉, 이렇게 하면 다른 작업을 하지 않고도 생성하게 modprobe my_driver됩니다 ./dev/my_driver

답변1

Linux에서는 device_create 및 class_create 명령 쌍이 이를 수행합니다. 확인하다 https://stackoverflow.com/questions/5970595/create-a-device-node-in-code

답변2

유닉스는 전통적으로 "정책이 아닌 메커니즘"의 전통을 따라왔습니다. 장치 드라이버의 경우 이는 커널의 드라이버 식별이 단순히 주요/부 장치 번호임을 의미합니다. mknod를 사용하여 장치 이름을 지정하는 작업("policy*")은 사용자 공간에 맡겨졌습니다.

관련 정보