C 如何构建和部署Linux驱动程序?
我使用的是ubuntu,但问题是linux的通用性 我通过编译linux内核安装了一个模块/驱动程序,并安装了新编译的内核。它很好用 为了使该驱动程序在另一台机器上工作而不安装新内核,我将C 如何构建和部署Linux驱动程序?,c,linux,ubuntu,linux-kernel,kernel,C,Linux,Ubuntu,Linux Kernel,Kernel,我使用的是ubuntu,但问题是linux的通用性 我通过编译linux内核安装了一个模块/驱动程序,并安装了新编译的内核。它很好用 为了使该驱动程序在另一台机器上工作而不安装新内核,我将.ko文件复制到/lib/modules/…下的新机器上,然后运行sudo depmod-a。然后运行sudo modprobe。可以毫无问题地加载模块。但是,该设备与此.ko模块一起工作不正常 这两台机器与硬件不同,但它们与内核版本和ubuntu发行版相同。通常,复制.ko文件应该适用于相同的linux版本和
.ko
文件复制到/lib/modules/…
下的新机器上,然后运行sudo depmod-a
。然后运行sudo modprobe
。可以毫无问题地加载模块。但是,该设备与此.ko
模块一起工作不正常
这两台机器与硬件不同,但它们与内核版本和ubuntu发行版相同。通常,复制.ko
文件应该适用于相同的linux版本和相同的内核
更多关于司机的信息。这是一个隐藏笔平板电脑驱动程序。所有修补程序文件:
drivers/hid/
- 在
drivers/hid/Makefile
- 在驱动程序/hid/usbhid/Kconfig中添加几行
- 在驱动程序/hid/hid ID.h中添加几行
- 在{0,0}之前的
的hid_黑名单结构中添加几行驱动程序/hid/usbhid/hid quirks.c
驱动程序/hid/
目录包括所有.ko
文件从第一台机器复制到第二台机器。但是没有运气。在第二台机器上可以识别手写板,我可以用手写板做鼠标左键点击事件,但手写板无法移动光标
希望我提供了足够的细节。我的目标是只将模块安装到相同的linux版本(内核),而不重新安装内核。我不知道如何实现这一目标,也不知道这是否可能
非常感谢
附言:
- 工作的第一台机器中的dmesg输出:
- 第二台机器中的dmesg输出:
sudo modprobe
由于我将不得不在公司的许多机器上安装该模块,因此无需重新安装内核就可以更轻松地安装该模块。我试着将第一台机器上构建的kernel.deb包安装到第二台机器上,它在第二台机器上运行良好。但是我觉得在很多机器上重新安装内核并不好。谢谢。您可以将模块添加到/etc/modules,以便在启动时加载。您构建的内核似乎不是1:1匹配。此外,通常不需要编译新内核 处理树外驱动程序部署的最简单方法是使用 您需要提供的只是一个
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的树外版本提供了一些有用的make
目标(披露:是我写的)
另外,您肯定想要构建和分发软件包,您可以使用
solo6x10/debian
作为模板,而且您可以。在加载相关模块之前,您是否在第二台机器上加载了模块usbcore
和usbhid
。如上所述,我将整个驱动程序/hid
从第一台机器复制到第二台机器<默认情况下加载代码>usbhid。但我没有在这两台机器中找到usbcore
模块。我是内核方面的新手。我不确定什么是usbcore
模块<代码>wusbcore?那是我唯一能找到的。谢谢。lsmod
告诉你加载模块前后这两台机器的情况是什么?你好,我检查了lsmod的输出。第一台机器中加载的唯一新模块是设备模块。在第二台机器中,我需要如上所述使用sudo modprobe
手动加载它。没有区别。试试另一台机器好吗?尝试在有问题的机器上重新编译?