我正在使用 ubuntu,但问题一般是针对 linux 的。
我通过编译我的linux内核安装了一个模块/驱动程序并安装了新编译的内核。它工作正常。
为了在不安装新内核的情况下让这个驱动在另一台机器上工作,我将.ko
文件复制到新机器下/lib/modules/<version>/...
,然后运行sudo depmod -a
. 然后运行sudo modprobe <drivername>
。该模块可以毫无问题地加载。但是该设备无法与此.ko
模块一起正常工作。
这两台机器的硬件并不完全相同,但它们与内核版本和 ubuntu 发行版本相同。通常,复制.ko
文件应该适用于相同的 linux 版本和相同的内核。
有关驱动程序的更多信息。这是一个隐藏的数位板驱动程序。所有补丁文件:
- 一个 .c 文件
drivers/hid/
- 添加一行
drivers/hid/Makefile
- 添加几行到
drivers/hid/usbhid/Kconfig
- 添加几行到
drivers/hid/hid-ids.h
drivers/hid/usbhid/hid-quirks.c
在 { 0, 0 } 之前的 hid_blacklist 结构中添加几行
就这样。
我什至尝试将包括drivers/hid/
所有文件的整个目录.ko
从第一台机器复制到第二台机器。但没有运气。数位板可以在第二台机器上识别,我可以用笔做鼠标左键单击事件,但是笔不能移动光标。
希望我提供了足够的细节。我的目标是只将模块安装到相同的 linux 版本(内核)而不重新安装内核。我不确定如何实现这一目标或是否可能。
非常感谢。
PS:
- 第一台机器上的 dmesg 输出:http: //paste.ubuntu.com/6419301/
- 第二台机器中的 dmesg 输出:http: //paste.ubuntu.com/6419302/
在第一台机器上,在插入平板电脑之前, lsmod 不显示模块。插入后,模块可以自动加载。我可以看到 lsmod 显示了该模块。
在第二台机器中,模块不能通过插入设备自动加载。我必须sudo modprobe <module>
手动完成。
由于我必须将模块安装到我公司的许多机器上,因此无需重新安装内核就可以更轻松地安装模块。我尝试将内置在第一台机器上的内核 .deb 包安装到第二台机器上,它在第二台机器上运行良好。但是我感觉不太好将内核重新安装到许多机器上。谢谢。