모든 사람.
내 Linux 컴퓨터에 연결하는 데 필요한 특수 USB 장치(중국어 터치 스크린)가 있습니다.
기본적으로 Linux는 연결된 장치를USBHID(나는 다음을 실행하여 이 정보를 찾았습니다.USB 장치및 노드그림*터치스크린을 컴퓨터에 연결한 후 나타남) 커널 모듈로 인해 시스템에서 터치스크린을 입력 장치로 볼 수 없습니다. 또한 장치용 드라이버도 있습니다. Linux 시스템에서 드라이버를 빌드 및 설치하고 시스템 시작 시 이 모듈을 로드하기 위한 지침을 생성합니다./etc/modules-load.d/.
시작 시 드라이버가 성공적으로 로드됩니다(다음을 실행하여 이 정보를 얻습니다).lsmod), 터치스크린은 여전히 연결되어 있습니다.USBHID. 드라이버가 제대로 실행되고 있다는 것을 알고 있습니다. 제거하면USBHID장치를 다시 연결하면 터치스크린 드라이버가 터치스크린을 캡처합니다.
[alarm@alarmpi ~]$ usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0eef ProdID=0005 Rev=02.00
S: Manufacturer=RPI_TOUCH
S: Product=By ZH851
S: SerialNumber=RÿhgWUC`g
C: #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=(usbhid)
장치 바인딩을 해제하는 방법이 있다는 것을 알았습니다.USBHIDudev 규칙을 생성합니다. 내 udev 규칙은 다음과 같습니다.
ATTRS{idVendor}=="0eef", ATTRS{idProduct}=="0005", DRIVER=="usbhid", RUN="/bin/sh -c 'echo -n $kernel > /sys/bus/usb/drivers/usbhid/unbind'"
컴퓨터가 다시 시작된 후,USB 장치터치스크린용 추가 드라이버가 전혀 없다고 합니다! 제 생각엔 운전기사가 잡을 것 같아요:
[alarm@alarmpi ~]$ usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0eef ProdID=0005 Rev=02.00
S: Manufacturer=RPI_TOUCH
S: Product=By ZH851
S: SerialNumber=RÿhgWUC`g
C: #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=(none)
알았어 나도 알아냈어시스템 파일 시스템공급새로운 아이디내 드라이버의 필드. 구글 검색새로운 아이디존재하다시스템 파일 시스템공급업체와 제품 ID를 보내면 장치가 드라이버에 바인딩되고 드라이버가 장치를 캡처한다는 것을 알았습니다. 따라서 쉘에서 다음과 같은 것을 실행하면:
[alarm@alarmpi ~]# echo -n 0eef 0005 > /sys/bus/usb/drivers/eleduino_ts/new_id
모든 것이 내가 원하는 방식으로 정확하게 작동합니다. 그래서 다음 문자열로 udev 규칙을 업데이트하기로 결정했습니다.
# 1. Unbind our device from usbhid:
ATTRS{idVendor}=="0eef", ATTRS{idProduct}=="0005", DRIVER=="usbhid", RUN="/bin/sh -c 'echo -n $kernel > /sys/bus/usb/drivers/usbhid/unbind'"
# 2. Bind device to eleduino_ts driver:
ATTRS{idVENDOR}=="0eef", ATTRS{idProduct}=="0005", RUN="/bin/sh -c 'echo -n '0eef 0005' > /sys/bus/usb/drivers/eleduino_ts/new_id'"
새로운 udev 규칙을 적용하고 재부팅한 후 usb-device를 실행합니다.
[alarm@alarmpi ~]$ USB 장치
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0eef ProdID=0005 Rev=02.00
S: Manufacturer=RPI_TOUCH
S: Product=By ZH851
S: SerialNumber=RÿhgWUC`g
C: #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=(usbhid)
어떻게 되어가나요? 왜USBHID? .
글쎄, 나는 udev 규칙을 다운그레이드하기로 결정하고시스템.d제공하다. 이 하나:
[alarm@alarmpi ~]$ cat /etc/systemd/system/eleduino_ts.service
[Unit]
Description=Bind device to eleduinos_ts
[email protected] plymouth-quit.service
After=systemd-user-sessions.service [email protected] plymouth-quit.service
[Service]
ExecStart=/bin/echo -n 0eef 0005 > /sys/bus/usb/drivers/eleduino_ts/new_id
Restart=always
IgnoreSIGPIPE=no
[Install]
WantedBy=multi-user.targets
서비스는 제대로 실행되고 있지만 터치스크린에 여전히 드라이버가 연결되어 있지 않습니다.
[alarm@alarmpi ~]$ usb-devices
T: Bus=01 Lev=02 Prnt=02 Port=03 Cnt=02 Dev#= 4 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0eef ProdID=0005 Rev=02.00
S: Manufacturer=RPI_TOUCH
S: Product=By ZH851
S: SerialNumber=RÿhgWUC`g
C: #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=100mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=(none)
제 질문은: 드라이버를 내 장치에 어떻게 연결합니까?
PS 아마도 도움이 될 것입니다:
[alarm@alarmpi ~]$ uname -a
Linux alarmpi 4.1.12-1-ARCH #1 PREEMPT Tue Oct 27 19:16:04 MDT 2015 armv6l GNU/Linux
미리 감사드립니다.
PS 다른 글에도 질문을 올렸는데 아무도 답변을 안 해주셨네요.