ノートブックでサポートされていないタッチパッド用のドライバを作成するには?

ノートブックでサポートされていないタッチパッド用のドライバを作成するには?

ガレージで古いラップトップ(Lenovo IdeaPad U260)が見つかりました。唯一の問題は、タッチパッドが機能せず認識されないことです。これは次の出力です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 テーブルでヒントを見つけることも、見つからない場合もあります。

タッチパッド接続インターフェイスは非常に異なるため、適切な文書がないとドライバを作成するのが最も難しいデバイスの1つです。

関連情報