태그 보관물: development

development

USB-HID 장치에 Linux 커널 드라이버 바인드 / 바인드 해제 인터페이스를 사용하는 방법은 무엇입니까? 등을 재구성하는 것과 같이 HID 모듈을 계속

첫 번째 배경. Logitech 게임 패널 장치 용 드라이버를 개발 중입니다. 화면이있는 키보드입니다. 드라이버는 잘 작동하지만 기본적으로 장치는 HID에 의해 처리됩니다. HID가 드라이버보다 먼저 장치를 인계받지 않도록 hid-core.c에 블랙리스트에 올릴 수 있습니다. 이것은 효과가 있지만 여러 사람들과 함께 일할 때 가장 좋은 해결책은 아니며 우리 모두가 종종 initramfs 등을 재구성하는 것과 같이 HID 모듈을 계속 패치해야합니다.

나는이 문제에 대한 몇 가지 연구를했고 나는 발견 이 메일 링리스트 게시물 결국에 데려 갔다, LWN에이 기사를 . 런타임에 장치를 특정 드라이버에 바인딩하는 메커니즘에 대해 설명합니다. 이것은 내가 필요한 것 같습니다.

그래서 나는 그것을 시도했다. 키보드를 HID에서 바인딩 해제 할 수있었습니다. 이것은 효과가 있었고 예상대로 더 이상 입력 할 수 없었습니다. 그러나 드라이버에 바인딩하려고하면 “오류 : 해당 장치 없음”이 표시되고 작업이 실패합니다.

그래서 내 질문은 : 어떻게 커널 바인드 / 언 바인드 작업을 사용하여 HID 장치를 hid-core로 블랙리스트에 추가하고 자신의 드라이버를 제공 할 때 발생하는 일을 복제합니까? -즉-hid-core.c를 항상 패치 할 필요성을 대체 할 것인가?

드라이버의 소스는 다음과 같습니다 : https://github.com/ali1234/lg4l



답변

좋아, 대답이 나를 쳐다보고 있었다는 것이 밝혀졌다.

첫째, 사용자 지정 드라이버를 사용하든 일반적으로 장치를 인계받는 일반 드라이버를 사용하든 USB가 아닌 HID로 제어됩니다.

이전에는 HID에서 바인딩을 해제하려고 시도했지만 방법이 아닙니다. HID에는 특수 드라이버가없는 장치를 대신하는 하위 드라이버가 generic-usb라고합니다. 이것이 hid-g19에 바인딩하기 전에 바인딩을 해제하는 데 필요한 것입니다. 또한 “1-1.1 : 1.1″로 보이는 USB 주소가 아니라 “0003 : 046d : c229.0036″으로 보이는 HID 주소를 사용해야했습니다.

따라서 리 바인딩하기 전에 dmesg에서 이것을 볼 수 있습니다.

generic-usb 0003:046D:C229.0036: input,hiddev0,hidraw4: USB HID v1.11 Keypad [Logitech G19 Gaming Keyboard] on usb-0000:00:13.2-3.2/input1

그런 다음

echo -n "0003:046D:C229.0036" > /sys/bus/hid/drivers/generic-usb/unbind
echo -n "0003:046D:C229.0036" > /sys/bus/hid/drivers/hid-g19/bind

그런 다음 dmesg에서 봅니다.

hid-g19 0003:046D:C229.0036: input,hiddev0,hidraw4: USB HID v1.11 Keypad [Logitech G19 Gaming Keyboard] on usb-0000:00:13.2-3.2/input1

내가 말했듯이, 두 가지 핵심 정보가 장치가 바인딩 될 때 라인의 첫 번째 두 가지이기 때문에 나를 쳐다 본다.


답변