如何修改未编译为模块的Linux内核驱动程序?

4
我正在尝试修改嵌入式设备的触摸屏驱动程序,以实现多点触控支持。问题是,该驱动程序最初并未编译为模块,因此我不知道除了完全重建内核之外,是否有任何改变的方法。这不是我想做的事情。我已经尝试修改现有的驱动程序并将其编译为模块;在更改名称后,它可以加载而没有报错,但是除了原始驱动程序输出的事件之外,没有其他事件被报告。是否有更好的方法来实现我的目标?这可能无法正常工作的特殊原因是什么?

需要补充的一件重要事情是,这是一个i2c驱动程序,而且似乎有些不同。我可以像@msh所说的那样取消绑定驱动程序,但是当我执行以下操作时: insmod /mnt/onboard/zforce_i2c_multitouch.ko echo zforce 0x50 > /sys/bus/i2c/devices/i2c-0/new_device 我仍然会得到以下错误信息: i2c i2c-0: Failed to register i2c client zforce at 0x50 (-16) - giorgio130
1个回答

4

在加载您的模块之前,您可以尝试手动解除绑定原始驱动程序。请参见这篇LWN文章


谢谢提供的链接,非常有趣。我可以轻松地解除原始驱动程序的绑定,与之相关的设备/dev/input/event0也会消失;但是,如果我加载自己的驱动程序并将硬件绑定到它上面,这样的设备就不会被创建,因此我无法获得任何输出... 有什么需要检查的吗? - giorgio130
我可以手动使用mknod创建设备:mknod /dev/input/event1 c 13 65,但是我接着收到了以下的错误信息:[root@(none) /]# cat /dev/input/event1 cat: can't open '/dev/input/event1': No such device - giorgio130
你确定你的驱动程序的主/次编号是正确的吗?同时要小心,不要与通常管理设备节点创建的任何Android守护程序陷入反转战。 - Chris Stratton
根据此链接(https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/devices.txt),主设备号和次设备号应该是正确的。我不在安卓上,而是在基于Linux的电子书阅读器上。也许udev已经在做一些事情,但至少在/dev下没有自动创建条目。 - giorgio130
我发现我的“绑定”没有任何作用,通过解除绑定并重新绑定原始驱动程序进行验证。echo -n "0-0050" > /sys/bus/i2c/drivers/zforce-ir-touch/unbind 可以工作,但是 echo -n "0-0050" > /sys/bus/i2c/drivers/zforce-ir-touch/bind 没有任何作用。这怎么可能? - giorgio130

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接