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

Linux kernel 如何修改未编译为模块的Linux内核驱动程序?,linux-kernel,linux-device-driver,embedded-linux,Linux Kernel,Linux Device Driver,Embedded Linux,我正在尝试修改嵌入式设备的触摸屏驱动程序,以获得多点触控支持。问题是这个驱动程序最初不是作为模块编译的,所以除了完整的内核重建之外,我不知道还有什么方法可以改变它。这不是我真正想做的。我试图修改现有的驱动程序,并将其编译为一个模块;更改名称后,它会毫无怨言地加载,但除了原始驱动程序输出的事件外,不会报告任何事件。有没有更好的方法来做我想做的事?是否有任何特殊原因导致此功能无法工作?在加载模块之前,您可以尝试手动解除原始驱动程序的绑定。请参见谢谢您的链接,非常有趣。我可以毫无问题地解除原始驱动程序

我正在尝试修改嵌入式设备的触摸屏驱动程序,以获得多点触控支持。问题是这个驱动程序最初不是作为模块编译的,所以除了完整的内核重建之外,我不知道还有什么方法可以改变它。这不是我真正想做的。我试图修改现有的驱动程序,并将其编译为一个模块;更改名称后,它会毫无怨言地加载,但除了原始驱动程序输出的事件外,不会报告任何事件。有没有更好的方法来做我想做的事?是否有任何特殊原因导致此功能无法工作?

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

谢谢您的链接,非常有趣。我可以毫无问题地解除原始驱动程序的绑定,与之关联的设备/dev/input/event0就会消失;但是,如果我加载自己的驱动程序并将硬件绑定到它,这样的设备不会被创建,因此我无法获得任何输出。。。有什么要检查的吗?我可以用mknod手动创建设备:
mknod/dev/input/event1 c 13 65
,但是我得到:
[root@(none)/]#cat/dev/input/event1 cat:can't open'/dev/input/event1':没有这样的设备
你确定主/次数字适合你的驱动程序吗?另外,要注意不要与Android守护进程通常管理设备节点创建的任何程序发生冲突。根据这一点,主要和次要程序应该是正确的。我不是在安卓上,而是在基于linux的电子书阅读器上。也许udev已经在做一些事情,但至少没有自动创建/dev下的条目。我发现我的“绑定”没有任何作用,我通过解除绑定并再次绑定原始驱动程序来验证它<代码>echo-n“0-0050”>/sys/bus/i2c/drivers/zforce ir touch/unbind工作,但
echo-n“0-0050”>/sys/bus/i2c/drivers/zforce ir touch/bind不起任何作用。这怎么可能呢?需要补充的一点是,这是一个i2c驱动程序,看起来有些不同。我可以像@msh所说的那样解除驱动程序的绑定,但当我这样做时:
insmod/mnt/board/zforce_i2c_multi-touch.ko echo zforce 0x50>/sys/bus/i2c/devices/i2c-0/new_device
我仍然得到:
i2c i2c i2c-0:无法在0x50(-16)注册i2c客户端zforce