커널 모듈이 일관성이 없습니다

커널 모듈이 일관성이 없습니다

모든 사람.

내 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 다른 글에도 질문을 올렸는데 아무도 답변을 안 해주셨네요.

관련 정보