10

我正在使用 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:

在第一台机器上,在插入平板电脑之前, lsmod 不显示模块。插入后,模块可以自动加载。我可以看到 lsmod 显示了该模块。

在第二台机器中,模块不能通过插入设备自动加载。我必须sudo modprobe <module>手动完成。

由于我必须将模块安装到我公司的许多机器上,因此无需重新安装内核就可以更轻松地安装模块。我尝试将内置在第一台机器上的内核 .deb 包安装到第二台机器上,它在第二台机器上运行良好。但是我感觉不太好将内核重新安装到许多机器上。谢谢。

4

2 回答 2

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其用作模板,并且您可以在 Debian wiki 中阅读有关存储库的信息

于 2016-09-23T02:26:25.483 回答
-4

您可以将模块添加到 /etc/modules 以便在启动时加载它。

于 2015-03-26T19:12:42.253 回答