2017-03-01 11 views
0

나는 입력 된 GNU/Linux 드라이버를 연구 해왔다. 예를 들어 usb mouse driver과 어떻게 상호 작용 하는지를 알았지 만, 커널이이 드라이버를로드하는 장치 유형을 어떻게 인식하는지 이해하지 못한다. 대각선으로 Linux Device Drivers을 훑어 보았지만이 문제에 대해 아무 것도 발견하지 못했습니다.리눅스는로드해야하는 입력 드라이버를 어떻게 인식합니까?

이 프로세스를 이해하려면 무엇을 읽어야합니까?

답변

2

배경 : 커널은 kobject_uevent_env 함수를 사용하여 uevents라고하는 것을 전송합니다. 이 uevents는 netlink 소켓의 udev 데몬 (이전 버전에서는 hotplug 사용)에서 읽습니다. 시작하기 전에 udev는 /etc/udev/rules.d/에서 규칙을 사전로드합니다.이 규칙에는 커널에서 적절한 uevent에 대한 반응으로 수행해야 할 작업에 대한 정보가 들어 있습니다 (예 : 모듈 insmod).

지금 물어 본 내용. 일반적으로 어떤 uevent 메시지와 함께 제공되는 것은 MODALIAS, 그것과 같을 수 : MODALIAS가 구축 될 때

MODALIAS = usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02 

의 USB 장치에 저장 공급 업체 ID 및 기기 ID, 그들은 또한 사용된다. 동적으로로드 할 수있는 커널 장치 드라이버 (.ko 파일)도 장치 식별자를 저장하며이 드라이버는 함께 작동 할 수 있습니다. 드라이버는 MODULE_DEVICE_TABLE 매크로를 사용하여 적절한 장치/공급 업체 ID로 작동한다는 것을 알릴 수 있습니다. 이것이 장치와 동적 모듈 간의 관계가 어떻게 설정되는지입니다.

+1

"* 그래서 장치와 동적 모듈 간의 관계가 설정됩니다."* -이 요약 문은 너무 광범위합니다. 당신은 USB 장치에 대해서만 설명했습니다. OP 제목은 USB 장치에만 국한되지 않습니다. I.E. 일반적인 SoC에있는 다른 주변 장치 버스의 ADC, UART, 심지어 USB 컨트롤러와 같은 장치는 거의 식별되지 않습니다. – sawdust

+0

@ 톱밥 당신이 대답을 좋아하지 않는다면, 당신은 자신의 것을 제안 할 수 있습니다. 나는 당신이 언급 한 것들을 설명 할 수 있다면 기뻐할 것입니다. 나는 내가 알고있는 정보를 게시했다. –

+0

어디서 읽을 수 있습니까? – WhilseySoon