차고에서 오래된 노트북(Lenovo IdeaPad U260)을 발견했는데 마더보드와 CPU를 교체하고 Ubuntu 18.04.3 LTS를 설치한 후에는 거의 새 것과 다름이 없습니다. 유일한 문제는 터치패드가 작동하지 않고 인식되지 않는다는 것입니다. 이것은 다음의 출력입니다 lspci
.
00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller (rev 02)
00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 02)
00:16.0 Communication controller: Intel Corporation 5 Series/3400 Series Chipset HECI Controller (rev 06)
00:1a.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 05)
00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 05)
00:1c.1 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 2 (rev 05)
00:1c.2 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 3 (rev 05)
00:1d.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a5)
00:1f.0 ISA bridge: Intel Corporation QS57 Chipset LPC Interface Controller (rev 05)
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 6 port SATA AHCI Controller (rev 05)
00:1f.3 SMBus: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller (rev 05)
00:1f.6 Signal processing controller: Intel Corporation 5 Series/3400 Series Chipset Thermal Subsystem (rev 05)
02:00.0 Network controller: Intel Corporation Centrino Wireless-N 1000 [Condor Peak]
03:00.0 Ethernet controller: Qualcomm Atheros AR8151 v1.0 Gigabit Ethernet (rev c0)
ff:00.0 Host bridge: Intel Corporation Core Processor QuickPath Architecture Generic Non-core Registers (rev 05)
ff:00.1 Host bridge: Intel Corporation Core Processor QuickPath Architecture System Address Decoder (rev 05)
ff:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 05)
ff:02.1 Host bridge: Intel Corporation 1st Generation Core i3/5/7 Processor QPI Physical 0 (rev 05)
ff:02.2 Host bridge: Intel Corporation 1st Generation Core i3/5/7 Processor Reserved (rev 05)
ff:02.3 Host bridge: Intel Corporation 1st Generation Core i3/5/7 Processor Reserved (rev 05)
그리고 다음 출력 cat /proc/bus/input/devices
:
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=PNP0C0C/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0f/PNP0C0C:00/input/input0
U: Uniq=
H: Handlers=kbd event0
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0f/PNP0C0E:00/input/input1
U: Uniq=
H: Handlers=kbd event1
B: PROP=0
B: EV=3
B: KEY=4000 0 0
I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:0f/PNP0C0D:00/input/input2
U: Uniq=
H: Handlers=event2
B: PROP=0
B: EV=21
B: SW=1
I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input3
U: Uniq=
H: Handlers=kbd event3
B: PROP=0
B: EV=3
B: KEY=10000000000000 0
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input4
U: Uniq=
H: Handlers=sysrq kbd event4 leds
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7
I: Bus=0019 Vendor=0000 Product=0000 Version=0000
N: Name="Ideapad extra buttons"
P: Phys=ideapad/input0
S: Sysfs=/devices/pci0000:00/0000:00:1f.0/PNP0C09:00/VPC2004:00/input/input11
U: Uniq=
H: Handlers=rfkill kbd event7
B: PROP=0
B: EV=13
B: KEY=81000800100c03 4400000000300000 0 2
B: MSC=10
I: Bus=0003 Vendor=5986 Product=0195 Version=1423
N: Name="Lenovo EasyCamera: Lenovo EasyC"
P: Phys=usb-0000:00:1d.0-1.3/button
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/input/input12
U: Uniq=
H: Handlers=kbd event8
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0
I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/LNXVIDEO:00/input/input13
U: Uniq=
H: Handlers=kbd event9
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input14
U: Uniq=
H: Handlers=event10
B: PROP=0
B: EV=21
B: SW=10
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input15
U: Uniq=
H: Handlers=event11
B: PROP=0
B: EV=21
B: SW=4
I: Bus=0003 Vendor=046d Product=c52f Version=0111
N: Name="Logitech USB Receiver"
P: Phys=usb-0000:00:1a.0-1.2/input0
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/0003:046D:C52F.000B/input/input36
U: Uniq=
H: Handlers=mouse0 event5
B: PROP=0
B: EV=17
B: KEY=ffff0000 0 0 0 0
B: REL=1943
B: MSC=10
I: Bus=0003 Vendor=046d Product=c52f Version=0111
N: Name="Logitech USB Receiver Consumer Control"
P: Phys=usb-0000:00:1a.0-1.2/input1
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.1/0003:046D:C52F.000C/input/input37
U: Uniq=
H: Handlers=kbd event6
B: PROP=0
B: EV=1f
B: KEY=300ff 0 0 483ffff17aff32d bf54444600000000 1 130ff38b17c000 677bfad9415fed 9ed68000004400 10000002
B: REL=1040
B: ABS=100000000
B: MSC=10
따라서 터치패드에 관한 내용은 없으므로 제가 이해한 바로는 이를 지원하는 커널 업데이트를 기다려야 할 것입니다. (지금까지 제가 틀린 부분이 있으면 정정해 주세요.)
내 질문은: 내 자신의 드라이버를 작성할 수 있는 방법이 있습니까? 나는 대답이 어느 정도 "예"라고 생각합니다. 왜냐하면 드라이버는 정기적으로 Linux 코드 베이스에 기여하는 사람들에 의해 항상 밀려나기 때문입니다. 그렇다면 내 후속 질문은 다음과 같습니다.
- C 및 C 유사 언어 개발 경험과 일부 임베디드 개발 경험이 있지만 이와 같은 개발 경험이 없는 사람에게는 이것이 얼마나 어려운 작업입니까?
- Lenovo로부터 어떤 유형의 적절한 문서/정보가 필요합니까?
- 개발 과정에 도움이 되는 링크를 제안해 줄 수 있는 사람이 있나요? 이 터치패드용 드라이버가 이미 존재하지만 학습 목적과 호기심을 위해 직접 알아내고 싶습니다.
- 내가 이해한 바에 따르면 이것은 개발 드라이버이며 반드시 Linux/커널을 수정하지는 않습니다. 따라서 이론적으로 이것은 모든 Linux OS 배포판과 호환되어야 합니까? 아니면 대상 OS와 호환되도록 뭔가를 해야 합니까?
이러한 물음표가 너무 많아서 짜증나지 않기를 바랍니다. 도움을 주시는 분들께 미리 감사드립니다!
편집하다
출력 lsusb
:
Bus 002 Device 004: ID 5986:0195 Acer, Inc
Bus 002 Device 003: ID 046d:c52f Logitech, Inc. Unifying Receiver
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0489:e00d Foxconn / Hon Hai Broadcom Bluetooth 2.1 Device
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
여기에는 터치패드처럼 보이는 것도 없습니다. :(
답변1
나만의 드라이버를 작성할 수 있는 방법이 있나요?
물론이죠. 많은 드라이버가 이런 식으로 작성됩니다.
C 및 C 유사 언어 개발 경험과 일부 임베디드 개발 경험이 있지만 이와 같은 개발 경험이 없는 사람에게는 이것이 얼마나 어려운 작업입니까?
커널 및 관련 하위 시스템의 작동 방식을 이해해야 하지만 관리하기 쉬워야 합니다. 기존 터치패드 드라이버에서 코드를 읽는 것이 도움이 될 것입니다.
Lenovo로부터 어떤 유형의 적절한 문서/정보가 필요합니까?
터치패드에 대한 등록 수준 문서입니다. 어느 것이지어려운 부분, Lenovo로부터 어떠한 정보도 얻을 수 없기 때문입니다.
또 다른 방법은 기존 Windows 드라이버 등을 리버스 엔지니어링하는 것입니다. 이는 매우 시간이 많이 걸릴 수 있습니다.
개발 과정에 도움이 되는 링크를 제안해 줄 수 있는 사람이 있나요?
Google은 "초보자를 위한 Linux 커널 모듈 튜토리얼" 및 변형과 같은 항목을 검색합니다.
내가 이해한 바에 따르면 이것은 개발 드라이버이며 반드시 Linux/커널을 수정하지는 않습니다. 따라서 이론적으로 이것은 모든 Linux OS 배포판과 호환되어야 합니까?
특정 버전의 Linux 커널용 커널 모듈("드라이버")을 작성합니다. 따라서 이는 동일한 API를 사용하는 모든 Linux 버전과 호환되지만 API가 변경되면 변경해야 합니다(또는 API가 다른 이전 커널에서는 작동하지 않습니다).
터치패드에 관한 내용은 아무것도 없습니다.
터치패드는 PCI 장치가 아닐 수도 있습니다. USB, 일부 내부 직렬 포트 또는 I2C/SMBUS를 통해 연결할 수 있습니다. 또는 다음을 통해 독점 통신 방법을 사용할 수도 있습니다.유럽 공동체. BIOS ACPI 테이블에서 힌트를 찾을 수도 있고 찾지 못할 수도 있습니다.
터치패드 연결 인터페이스는 매우 다르기 때문에 적절한 문서가 없으면 드라이버를 작성하기 가장 어려운 장치 중 하나입니다.