2010-12-16 6 views
1

register_chrdev 함수에서 장치 이름을 지정해야합니다. 비록 우리가 동일한 메이저 넘버를 가진 다른 이름을 가진 디바이스를 만들지 만 올바르게 작동합니다. 그렇다면 그 기능에 이름을 부여하는 것의 의미는 무엇입니까?LKMG chardev.c register_chrdev 함수에 대한 질문

The name parameter is a short name for the device 
and is displayed in the The /proc/devices list. It also 
must exactly match the name passed to unregister_chrdev 
function when releasing the functions. 

그래서, 이름이 정말 모든 방법을 제외하고 커널을 사용하지 않습니다 :

나는 이것에 초보자가 register_chrdev()에 대한 man 페이지 당으로

답변

0

를 :)입니다 나중에 등록을 식별하여 실행 취소 할 수 있고/proc 장치 목록에서 드라이버를 호출하는 것이 현명 할 수 있습니다.

두 개의 별도의 register_chrdev를 다른 이름으로 사용하고 동일한 주요 작업을 수행하는 이유는 최신 Linux 커널이 여러 드라이버가 동일한 주요 번호를 등록하고 기본적으로 공유하기 때문입니다. 아마 양쪽 운전자는 그 전공에 대한 모든 호출을 얻을 것이고, 행동을 취할 것인지 아닌지를 부 번호에 기초하여 결정해야 할 것이다. 나는 정말로 잘 모르겠다. 필자가 해본 모든 드라이버와 대부분의 드라이브는 모두 '주요 번호 당 하나의 드라이버'를 따른다.

중요한 번호를 하드 코딩하는 것이 아니라 가능한 한 가지, 가능한 것 register_chrdev에 0을 전달하고 커널이 당신을 위해 무료 메이저 넘버를 선택하여 그것을 돌려 주도록하십시오. 이렇게하면 다른 운전자의 발끝을 밟을 필요가 없지만/dev 항목을 올바르게 mknod하려면 사용자 공간 코드 검사/proc/devices가 필요합니다.

+0

[udev] (http://en.wikipedia.org/wiki/Udev)는/dev에있는 항목을 생성하고 파기해야합니다. 올바른 작업을 자동으로 수행하지 못하면 장치에 대한 새 규칙을 작성할 수 있습니다. – Karmastan

+0

[Linux Device Drivers, Third Edition] (http://lwn.net/Kernel/LDD3/)을 읽으십시오. 이 책의 제 3 장은 또한 똑같은 것을 말합니다. "예를 들어, 의 경우,/dev/null과/dev/zero는 모두 드라이버 1에 의해 관리되는 반면 가상 콘은솔과 직렬 터미널은 드라이버 4에 의해 관리됩니다. , vcs1 및 vcsa1 모두 장치는 드라이버 7에서 관리합니다. 최신 Linux 커널을 사용하면 여러 드라이버가 주요 번호를 공유 할 수 있지만 표시되는 대부분의 장치는 여전히 1 대 1 드라이버 원칙에 따라 구성됩니다. " –