리버스 엔지니어링에 적합한 장치 찾기

리버스 엔지니어링에 적합한 장치 찾기

Asus GL503VD를 가지고 있는데 터치패드가 Linux에서 작동하지 않습니다.

저는 Arch, Debian, Ubuntu 16/17/18, Sabayon, Pop_OS, Fedora 등 다양한 배포판을 사용해 보았습니다. 그들 중 누구도 작동하는 터치패드를 갖고 있지 않았기 때문에 저는 Ubuntu 18.04를 선택하고 직접 디버깅하기로 결정했습니다.

첫째, 이 노트북은 상당히 새롭기 때문에 acpi=force GRUB 매개변수 없이는 부팅되지 않습니다. 둘째, i2c-hid 모듈 로드가 허용되면 검은색 화면으로 부팅됩니다(따라서 i2c-hid를 블랙리스트에 추가해야 합니다). i2c-hid가 내 터치패드 처리를 담당하는 드라이버라고 확신하므로 이는 조사해 볼 가치가 있는 문제입니다. 문제는 모듈 로드가 허용될 때 ctrl+alt+f* 조합을 사용하여 터미널에 접근조차 할 수 없다는 것입니다. 단지 검은색이고 아무것도 아닙니다.

내 Windows 파티션을 보면 터치패드가 ELAN1200(elantech 아님)임을 알 수 있습니다. 성공하지 못한 채 hid-elan 모듈을 로드하려고 했습니다. 필사적으로 시냅틱스 모듈도 사용해 보았으나 아무런 성과도 없었습니다. 다양한 x.org.conf.d 구성을 시도했지만 이는 내 노트북이 Gnome DE에 액세스하는 것을 막는 것뿐입니다. libinput을 사용해 보았지만 성공하지 못했습니다.

i8042.nomux=1, i8042.noloop, i8042.nopnp, i8042.kdbreset=1, i8042.reset을 시도했지만 이들 중 어느 것도 작동하지 않았습니다. (내가 아는 한, 내 터치패드/키보드 콤보는 아마도 i8042 칩에 의해 관리되고 있을 것입니다. xinput 출력에서 ​​보면 ITE8910이 콤보를 관리하는 것처럼 보입니다.)

xinput 출력에서는 터치패드가 아마도 터치패드/키보드 콤보의 일부일 수도 있음을 알려줍니다. 터치패드와 키보드는 하나의 기기라고 생각합니다: ITE8910

x 입력 및 출력:

⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ MOSART Semi. USB Device                   id=12   [slave  pointer  (2)]
⎜   ↳ ITE Tech. Inc. ITE Device(8910)           id=14   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Asus Wireless Radio Control               id=7    [slave  keyboard (3)]
    ↳ Video Bus                                 id=8    [slave  keyboard (3)]
    ↳ Video Bus                                 id=9    [slave  keyboard (3)]
    ↳ Power Button                              id=10   [slave  keyboard (3)]
    ↳ Sleep Button                              id=11   [slave  keyboard (3)]
    ↳ USB2.0 HD UVC WebCam: USB2.0 HD           id=13   [slave  keyboard (3)]
    ↳ Asus WMI hotkeys                          id=15   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]
    ↳ ITE Tech. Inc. ITE Device(8910)           id=17   [slave  keyboard (3)]

dmesg의 출력은 장치가 USB를 통해 연결되어 있음을 알려줍니다.

[    2.408602] usb 1-8: new full-speed USB device number 5 using xhci_hcd
[    2.562105] usb 1-8: New USB device found, idVendor=0b05, idProduct=1869
[    2.562106] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[    2.562107] usb 1-8: Product: ITE Device(8910)
[    2.562108] usb 1-8: Manufacturer: ITE Tech. Inc.

lsusb인 경우 공급업체 ID와 제품 ID가 포함된 올바른 장치가 표시됩니다.

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc. 
Bus 001 Device 004: ID 13d3:5666 IMC Networks 
Bus 001 Device 003: ID 8087:0a2b Intel Corp. 
Bus 001 Device 002: ID 062a:410c Creative Labs 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

참고: Creative Labs 장치는 외부 마우스입니다.

lsusb -vd 0b05:1869 하면 키보드 관련 설명만 표시됩니다.

Bus 001 Device 005: ID 0b05:1869 ASUSTek Computer, Inc. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0b05 ASUSTek Computer, Inc.
  idProduct          0x1869 
  bcdDevice            0.03
  iManufacturer           1 ITE Tech. Inc.
  iProduct                2 ITE Device(8910)
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           34
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.10
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     263
          Report Descriptor: (length is 263)
            Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
                            (null)
            Item(Local ): Usage, data= [ 0x10 ] 16
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0xa5 ] 165
            Item(Local ): Usage, data= [ 0x01 ] 1
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x10 ] 16
            Item(Main  ): Feature, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x89 0xff ] 65417
                            (null)
            Item(Local ): Usage, data= [ 0x0f 0xff ] 65295
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x05 ] 5
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            (null)
            Item(Local ): Usage Maximum, data= [ 0xff ] 255
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff ] 255
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x06 ] 6
                            Data Variable Relative No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x06 ] 6
                            Keyboard
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Global): Usage Page, data= [ 0x07 ] 7
                            Keyboard
            Item(Local ): Usage Minimum, data= [ 0xe0 ] 224
                            Control Left
            Item(Local ): Usage Maximum, data= [ 0xe7 ] 231
                            GUI Right
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x03 ] 3
                            Constant Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x05 ] 5
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Global): Usage Page, data= [ 0x08 ] 8
                            LEDs
            Item(Local ): Usage Minimum, data= [ 0x01 ] 1
                            NumLock
            Item(Local ): Usage Maximum, data= [ 0x05 ] 5
                            Kana
            Item(Main  ): Output, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Global): Report Size, data= [ 0x03 ] 3
            Item(Main  ): Output, data= [ 0x03 ] 3
                            Constant Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x07 ] 7
                            Keyboard
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            No Event
            Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Count, data= [ 0x06 ] 6
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Global): Usage Page, data= [ 0x07 ] 7
                            Keyboard
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            No Event
            Item(Local ): Usage Maximum, data= [ 0xdf ] 223
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0xe0 ] 224
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
                            (null)
            Item(Local ): Usage, data= [ 0x76 ] 118
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x5a ] 90
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            (null)
            Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            (null)
            Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x10 ] 16
            Item(Main  ): Feature, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x31 0xff ] 65329
                            (null)
            Item(Local ): Usage, data= [ 0x79 ] 121
                            (null)
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x5d ] 93
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            (null)
            Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x05 ] 5
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            (null)
            Item(Local ): Usage Maximum, data= [ 0xff 0x00 ] 255
                            (null)
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255
            Item(Global): Report Size, data= [ 0x08 ] 8
            Item(Global): Report Count, data= [ 0x10 ] 16
            Item(Main  ): Feature, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x0c ] 12
                            Consumer
            Item(Local ): Usage, data= [ 0x01 ] 1
                            Consumer Control
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x02 ] 2
            Item(Local ): Usage Minimum, data= [ 0x00 ] 0
                            Unassigned
            Item(Local ): Usage Maximum, data= [ 0x3c 0x02 ] 572
                            AC Format
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x3c 0x02 ] 572
            Item(Global): Report Size, data= [ 0x10 ] 16
            Item(Global): Report Count, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x00 ] 0
                            Data Array Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
            Item(Global): Usage Page, data= [ 0x01 ] 1
                            Generic Desktop Controls
            Item(Local ): Usage, data= [ 0x80 ] 128
                            System Control
            Item(Main  ): Collection, data= [ 0x01 ] 1
                            Application
            Item(Global): Report ID, data= [ 0x04 ] 4
            Item(Local ): Usage Minimum, data= [ 0x81 ] 129
                            System Power Down
            Item(Local ): Usage Maximum, data= [ 0x83 ] 131
                            System Wake Up
            Item(Global): Logical Minimum, data= [ 0x00 ] 0
            Item(Global): Logical Maximum, data= [ 0x01 ] 1
            Item(Global): Report Count, data= [ 0x08 ] 8
            Item(Global): Report Size, data= [ 0x01 ] 1
            Item(Main  ): Input, data= [ 0x02 ] 2
                            Data Variable Absolute No_Wrap Linear
                            Preferred_State No_Null_Position Non_Volatile Bitfield
            Item(Main  ): End Collection, data=none
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
Device Status:     0x0001
  Self Powered

이는 이제 터치패드 측면을 사용할 수 없음을 나타냅니다. 나는 그것을 볼 수도 없습니다.

제 질문은 이렇습니다. 왜 터치패드가 보이지 않나요? 이를 찾아서 드라이버 리버스 엔지니어링을 시작하려면 어떻게 해야 합니까?

런치패드 오류 보고서 링크(더 많은 로그 파일 포함)

답변1

터치패드가 I2C를 통해 연결되어 있다는 정보를 기반으로 한 부분 답변:

그렇지 않더라도 i2c_hidI2C 버스를 볼 수 있고 버스의 장치와 통신할 수 있어야 합니다. 이 소프트웨어 패키지에는 lm-sensorsI2C 관련 프로그램, i2c-tools설치, 읽기 , i2cdetect매뉴얼 페이지가 있습니다 .i2cdumpi2cgeti2cset

i2c-dev예를 들어 I2C 모듈이 커널에 내장되어 있지 않은 경우 modprobe해야 할 수도 있습니다 . 그 후에는 항목 /sys/bus/i2c/devices/과 해당 장치 노드가 아래에 표시되어야 합니다 /dev/i2c*. 이제 보유하고 있는 I2C 장치(팬 제어, 온도 센서, BIOS EEPROM 등 다양할 수 있음)와 터치패드가 무엇인지 파악해야 합니다. Windows 드라이버의 정보가 도움이 될 수 있습니다.

다음 단계는 소스 코드를 읽고 i2c_hid, 표준화된 프로토콜이 있는지 확인하고, 문서를 Google에서 검색하고, 바이트 전송 및 수신을 시도하는 것입니다. 또한 i2c_hid컴퓨터가 시작되지 않는 이유도 알아보세요. 이를 위해서는 C 코드를 읽고 쓸 수 있어야 합니다.

i8042는 전통적인 PS/2 컨트롤러이며 I2C와는 전혀 관련이 없습니다. 터치패드가 I2C를 통해 연결되지 않은 경우그리고이 컨트롤러를 사용하면 i8042 코어를 조작하는 것은 전혀 도움이 되지 않습니다.

편집하다

나는 그것을 구글링했다. I2C의 HID는여기(분명히 Microsoft의 것입니다). I2C를 통해 HID가 제대로 작동하게 되면 다음 내용도 읽어야 합니다.HID 사양. 특히 HID 설명자를 살펴보세요. HID 장치는 보고(터치패드 데이터)가 표준보다 적을 때 종종 이상 현상을 경험합니다.

답변2

askubuntu에도 비슷한 게시물이 있습니다.

https://askubuntu.com/questions/1038602/18-04-ite-8910-touchpad-on-asus-strix-gl703ge-not-working

ITE와 ASUS에 데이터시트, 매뉴얼 또는 프로토콜 사양을 요청했지만 지금까지는 운이 없었으나 두 티켓 모두 아직 열려 있습니다.

안타깝게도 Vogons에서는 운이 없을 것 같습니다(Asus 레벨 1 지원).

그들은 어딘가에 이러한 문서를 가지고 있어야 하며 그렇지 않으면 랩탑을 설계하고 Windows 드라이버를 작성할 수 없습니다. 그러나 Ms. Vogon은 처음에 그들이 소프트웨어나 Linux를 지원하지 않으며 하드웨어 제조업체라고 말했습니다. 내가 데이터시트는 일반적으로 하드웨어에 관한 것이라고 말했을 때 그녀는 아직 대답하지 않았습니다.

Windows Tocuhpad 드라이버의 i2c를 스니핑하여 초기화 시퀀스를 찾고 작동 방식을 이해하는 것은 어떻습니까?

또 다른 점은 GL703GE의 경우 동일한 터치패드가 있는 것 같고 Debian이나 Ubuntu에서도 작동하지 않는다는 것입니다. ASUS 웹사이트의 Windows 드라이버가 손상되어 링크를 다운로드할 수 있는 작동하는 Windows 드라이버를 보냈습니다. :

이 버전을 사용해 보세요 http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703GS/Pricision_TouchPad_V110021.zip 또는 이 버전: http://dlcdnet.asus.com/pub/ASUS/GamingNB/GL703VD/Touchpad_Win10_64_VER11022.zip

답변3

Sony Tap 11 및 Linux Mint Cinnamon 19(및 Ubuntu 18)에서 비슷한 문제가 발생했는데 터치패드만 작동했고 여러 배포판에서는 버튼이 작동하지 않았습니다. 나는 당신이 하는 것과 같은 일을 보거나 보지 않지만, 당신이 하는 정도는 아닙니다. USB 마우스를 연결해 보았으나 여전히 같은 문제가 발생합니다. 또한 Windows 10에서는 터치패드 유형을 인식할 수 없으며 PS2 호환만 가능하다고 표시됩니다. 저는 특히 터치패드가 내장된 무선 키보드가 있는 Sony Tap 11을 보고 있습니다. 나는 사람들이 지난 15년 동안 (말 그대로) 다른 기계에서 이런 종류의 문제를 해결하려고 노력해 왔던 대부분의 표준 솔루션을 찾아 시도했지만 소용이 없었습니다. 그런 다음 Android 4.4(LineageOS 14.1)가 이 컴퓨터에서 실행된다는 사실을 알게 되었고, 이것이 작동하는지, 설치하면 무엇을 배울 수 있는지 확인하고 싶었습니다. 이는 귀하의 컴퓨터에 대해 살펴볼 가치가 있는 방법일 수 있습니다. 또한 Sony가 프로토콜을 동일한 방식으로 설정했다면 아마도 동일한 프로토콜을 사용하고 어딘가에 문서가 있을 것이라고 생각합니다. 이는 다양한 솔루션에서 흔히 발생하는 문제인 것 같습니다. 따라서 누군가가 이를 종합하여 이 오류를 완전히 제거할 수 있는 개발자와 대화할 수 있기를 바랍니다.

관련 정보