问题:
在嵌入式ARM Linux开发板调试触控的时候, 会经常碰见不同接口类型的触控板,有I2C的,USB等, 不同厂家不同型号的触控驱动在内核启动时加载顺序不同,也就导致了在/dev/input目录下生成的eventX的序号就不同, 而应用层一般会固件打开某个event设备节点,更换触控面板,可能会导致应用程序打开错误的event设备节点,因此想在内核里面做一下适配,是某些固定的触控设备最终在文件系统中生成固定的设备号文件节点。
解决:
1. 查看系统总线上所有的input设备
# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-keyboard"
P: Phys=sunxikbd/input0
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=kbd event0 autohotplug cpufreq_interactive
B: PROP=0
B: EV=3
B: KEY=100040000800 c000000000000 0
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi_ir_recv"
P: Phys=sunxi_ir_recv/input0
S: Sysfs=/devices/soc.0/1f02000.s_cir/rc/rc0/input1
U: Uniq=
H: Handlers=kbd event1 autohotplug cpufreq_interactive
B: PROP=0
B: EV=100013
B: KEY=100040000840 1c168000000000 10000000
B: MSC=10
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="MCE IR Keyboard/Mouse (sunxi-rc-recv)"
P: Phys=/input0
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=sysrq kbd mouse0 event2
B: PROP=0
B: EV=100017
B: KEY=30000 7 ff87207ac14057ff febeffdfffefffff fffffffffffffffe
B: REL=3
B: MSC=10
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="axp81x-supplyer"
P: Phys=m1kbd/input2
S: Sysfs=/devices/platform/axp81x_board/axp81x-supplyer.47/input/input3
U: Uniq=
H: Handlers=kbd event3 autohotplug cpufreq_interactive
B: PROP=0
B: EV=7
B: KEY=10000000000000 0
B: REL=0
I: Bus=0003 Vendor=222a Product=0001 Version=0110
N: Name="ILITEK ILITEK-TP"
P: Phys=usb-sunxi-ehci-1.4/input0
S: Sysfs=/devices/soc.0/1c1b000.ehci1-controller/usb1/1-1/1-1.4/1-1.4:1.0/input/input4
U: Uniq=
H: Handlers=mouse1 event4 autohotplug cpufreq_interactive
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=260800000000003
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="audiocodec sunxi Audio Jack"
P: Phys=ALSA
S: Sysfs=/devices/soc.0/sound.6/sound/card0/input5
U: Uniq=
H: Handlers=kbd event5
B: PROP=0
B: EV=23
B: KEY=400000000 0 c000000000000 0
B: SW=14
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-ths"
P: Phys=sunxiths/input0
S: Sysfs=/devices/virtual/input/input6
U: Uniq=
H: Handlers=event6
B: PROP=0
B: EV=9
B: ABS=10000000000
比如我们的应用程序中默认固定使用了/dev/input/event5作为我们设备的触控设备文件节点,但是查看input设备信息发现我们的触控设备ILITEK ILITEK-TP现在枚举成了/dev/input/event4了, 现在希望ILITEK ILITEK-TP还是枚举为/dev/input/event5。
2. Linux内核文件修改处
drivers/input/input.c input_register_device函数 input序号
drivers/input/mousedev.c mousedev_connect函数 mouse序号
drivers/input/evdev.c evdev_connect函数 event序号
3. 修改后效果
# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-keyboard"
P: Phys=sunxikbd/input0
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=kbd event0 autohotplug cpufreq_interactive
B: PROP=0
B: EV=3
B: KEY=100040000800 c000000000000 0
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi_ir_recv"
P: Phys=sunxi_ir_recv/input0
S: Sysfs=/devices/soc.0/1f02000.s_cir/rc/rc0/input1
U: Uniq=
H: Handlers=kbd event1 autohotplug cpufreq_interactive
B: PROP=0
B: EV=100013
B: KEY=100040000840 1c168000000000 10000000
B: MSC=10
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="MCE IR Keyboard/Mouse (sunxi-rc-recv)"
P: Phys=/input0
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=sysrq kbd mouse0 event2
B: PROP=0
B: EV=100017
B: KEY=30000 7 ff87207ac14057ff febeffdfffefffff fffffffffffffffe
B: REL=3
B: MSC=10
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="axp81x-supplyer"
P: Phys=m1kbd/input2
S: Sysfs=/devices/platform/axp81x_board/axp81x-supplyer.47/input/input3
U: Uniq=
H: Handlers=kbd event3 autohotplug cpufreq_interactive
B: PROP=0
B: EV=7
B: KEY=10000000000000 0
B: REL=0
I: Bus=0003 Vendor=222a Product=0001 Version=0110
N: Name="ILITEK ILITEK-TP"
P: Phys=usb-sunxi-ehci-1.4/input0
S: Sysfs=/devices/soc.0/1c1b000.ehci1-controller/usb1/1-1/1-1.4/1-1.4:1.0/input/input5
U: Uniq=
H: Handlers=mouse1 event5 autohotplug cpufreq_interactive
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=260800000000003
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="audiocodec sunxi Audio Jack"
P: Phys=ALSA
S: Sysfs=/devices/soc.0/sound.6/sound/card0/input4
U: Uniq=
H: Handlers=kbd event4
B: PROP=0
B: EV=23
B: KEY=400000000 0 c000000000000 0
B: SW=14
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="sunxi-ths"
P: Phys=sunxiths/input0
S: Sysfs=/devices/virtual/input/input6
U: Uniq=
H: Handlers=event6
B: PROP=0
B: EV=9
B: ABS=10000000000