Ubuntu 19.10을 실행하는 여러 시스템이 있습니다.
모든 시스템에서 감지되는 USB HID 장치가 있고
3개 시스템 모두에서 정확히 동일한 udev 규칙 파일(99-MyDevice.rules)을 사용하고 있습니다.
SUBSYSTEM=="usb",ATTRS{idVendor}=="XXXX",ATTRS{idProduct}=="YYYY",MODE="0660",GROUP="timothy",SYMLINK+="mydevice%n"
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="timothy"
3개 시스템 모두에서 장치가 /dev/mydevice로 올바르게 나타납니다...
이제 실행하면 lsusb -t
다음이 출력됩니다.
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=, 12M
비어 있지만 Driver
가끔은 실제로 드라이버(제가 원하는 것)를 로드하고 다음을 출력합니다.
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
드라이버를 로드한 후 소프트웨어는 장치를 감지하고 사용할 수 있습니다.
문제는 드라이버가 자동으로 로드되는 경우가 거의 없다는 것입니다.
지금까지 드라이버를 수동으로 로드하는 두 가지 방법을 찾았습니다(성공 여부).
방법 1:
다음을 사용하여 드라이버를 수동으로 할당/바인딩할 수 있습니다.
echo -n "4-3:1.0" > /sys/bus/usb/drivers/usbhid/bind
이 시점에서 lsusb -t
드라이버가 로드되었음을 표시합니다.
Port 4: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
acl
그런 다음 이를 사용하려면 /dev/mydevice...를 수정해야 합니다 .
이 접근 방식이 항상 작동하는 것은 아닙니다. 기껏해야 무작위로 느껴집니다.
방법 2:
컴퓨터에서 장치를 논리적으로 연결 해제했다가 다시 연결하십시오.
(물리적으로 연결을 끊는 것이 아니라) VMWare를 설치 하고 장치를 게스트 시스템에 몇 초 동안 연결하여
이 작업을 수행했습니다 .
장치가 호스트에 다시 연결된 후 대부분의 경우 드라이버가
자동으로 바인딩되고 소프트웨어에서 장치를 보거나 사용할 수 있습니다.
(이 접근 방식을 사용하면 아무 것도 수정할 필요가 없습니다 acl
.)
몇 가지 참고사항:
- Raspbian이 설치된 RaspberryPI에서 이 장치를 사용하면 이 문제가 발생하지 않습니다.
- 동일한 유형의 장치가 여러 개 있는데 이 문제는 모든 장치에서 발생합니다.
- 이 문제는 Windows에서는 발생하지 않습니다.
- Windows의 Ubuntu 시스템 가상 머신에서는 이 문제가 발생하지 않습니다.
- MacOS에서는 이 문제가 발생하지 않습니다.
- 내가 기억하는 한 이전 버전의 Ubuntu에서도 이런 일이 발생하지 않습니다(완전히 확실하지는 않음).
- 장치 자체는 STM32F4를 기반으로 합니다.
usbhid
매번 운전자를 강제로 묶는 방법을 아시나요 ?
고쳐 쓰다:
장치 를 물리적으로 연결한 후 다음 명령을 실행하면 usbhid
드라이버가 매번 올바르게 바인딩되는 것으로 나타났습니다 .
sudo rmmod usbhid && sudo modprobe usbhid
rmmod
먼저 사용해야 했지만
단순히 실행하는 것만 으로 modprobe
는 문제가 해결되지 않았습니다.
그래서:
- 물리적 연결:
Driver=, 12MB
- 위 명령을 실행합니다.
Driver=usbhid, 12MB
이에 따르면원천 드라이버 자체가 지원하는 장치를 선택합니다.
그래서 나는 이 명령으로 인해 usbhid
드라이버가
장치를 처리할 수 있는지 여부를 다시 평가하게 된다고 추측합니다.
이제 자동화하는 방법을 알아내야 합니다.
답변1
/etc/modules-load.d
/00-my-usbhid.conf에 라인 파일을 생성합니다.
usbhid
모듈이 자동으로 로드되므로 최신 시스템에서는 이 작업이 필요하지 않지만 때로는 모듈을 강제로 로드해야 하는 경우도 있습니다.
다른 모든 방법이 실패하면 커널 부팅 매개변수를 추가해 보세요.
usbhid.quirks=0x0463:0xffff:0x08
도착하다NOGET 특성을 다시 활성화합니다.작동하는지 확인하세요.
https://www.cyberciti.biz/faq/linux-how-to-load-a-kernel-module-automatically-at-boot-time/ https://bugzilla.redhat.com/show_bug.cgi?id=1715504 https://github.com/networkupstools/nut/issues/515