我使用的是ubuntu,但问题是Linux的问题。
我通过编译linux内核并安装新编译的内核来安装模块/驱动程序。它工作正常。
为了使这个驱动程序在另一台机器上工作而不安装新内核,我将.ko
文件复制到/lib/modules/<version>/...
下的新机器上,然后运行sudo depmod -a
。然后运行sudo modprobe <drivername>
。可以毫无问题地加载模块。但该设备与此.ko
模块不兼容。
这两台机器与硬件不同,但它们与内核版本和ubuntu发行版本完全相同。通常,复制.ko
文件应该适用于相同的Linux版本和相同的内核。
有关驱动程序的更多信息。这是一个隐藏的笔平板电脑驱动程序。所有补丁文件:
drivers/hid/
drivers/hid/Makefile
drivers/hid/usbhid/Kconfig
drivers/hid/hid-ids.h
drivers/hid/usbhid/hid-quirks.c
的hid_blacklist结构添加几行
这就是全部。
我甚至试图复制整个drivers/hid/
目录,包括从第一台机器到第二台机器的所有.ko
文件。但没有运气。可以在第二台机器上识别笔数位板,我可以用笔做鼠标左键单击事件,但笔不能移动光标。
希望我提供了足够的细节。我的目标是只将模块安装到相同的Linux版本(内核)而无需重新安装内核。我不确定如何实现,或者是否可能。
非常感谢。
PS:
在第一台机器中,在插入平板电脑之前,lsmod不显示模块。插入后,模块可以自动加载。我可以看到lsmod显示模块。
在第二个模块中,插入设备无法自动加载模块。我必须手动执行sudo modprobe <module>
。
由于我必须将模块安装到我公司的许多机器上,因此在不重新安装内核的情况下安装模块会更容易。我尝试将内置在第一台机器中的内核.deb软件包安装到第二台机器上,它在第二台机器上工作正常。但我觉得将内核重新安装到许多机器上感觉不错。感谢。
答案 0 :(得分:1)
您构建的内核似乎不是1:1匹配。而且,通常不需要编译新内核。
处理树外驱动程序部署的最简单方法是使用DKMS。
您需要提供的只是一个dkms.conf
文件,指定包名称,版本和驱动程序名称和目标(在/lib/modules/{kernel}
内)。
在以下示例中,大括号内的内容需要替换为真实内容,例如如果版本是1.0.0,那么显然{version}
1.0.0
。
示例dkms.conf
:
PACKAGE_NAME="{mydriver}"
PACKAGE_VERSION="{version}"
BUILT_MODULE_NAME[0]="{mydriver}"
BUILT_MODULE_LOCATION[0]="/{mycompany?}"
AUTOINSTALL="yes"
然后您只需将源安装到/usr/src/{mydriver}-{version}
,然后运行dkms
:
dkms add -m {mydriver} -v {version}
dkms build -m {mydriver} -v {version}
dkms install -m {mydriver} -v {version}
您应该看一看其他人在这个领域所做的工作,您可以将大量自动化应用于测试和发布流程。 Bluecherry的solo6x10
树外版本提供了一些有用的make
目标(披露:我是编写该目标的人)。
此外,您绝对想要构建和分发软件包,您可以使用solo6x10/debian
作为模板,并且可以read about repositories in the Debian wiki。
答案 1 :(得分:-3)
您可以将模块添加到/ etc / modules,以便在启动时加载。