0

有什么方法可以在不连接设备的情况下安装 Linux 设备驱动程序?

我可以完全访问驱动程序代码。我正在使用 Linux 内核 2.6.35。

我尝试过 insmod 和 modprobe 无济于事。我正在开发一个自定义驱动程序(我没有编写它),但没有任何文档。

4

2 回答 2

2

Linux 中的设备驱动程序(大部分)是内核模块。所以是的!您需要做的就是加载内核模块。

将代码编译为内核模块,make install然后modprobe <modulename>.

您的驱动程序的文档应该已经告诉您了。;)

于 2012-10-03T18:28:45.353 回答
2

当系统中不存在设备实例时,不应安装正确编写的设备驱动程序(热插拔设备可能是一个例外)。在某些版本的 Unix 中,驱动程序的probe()函数会检查设备是否存在。在 Linux 中,探测功能通常包含在 _init() 例程中。当没有检测到硬件时,驱动程序不应该注册自己,如果它是一个模块,则返回将导致它被卸载的状态。

如果您坚持将驱动程序代码放在内存中,则不要将其构建为可加载模块,而是选择 Linux 驱动程序作为内存驻留内核的一部分。通过在程序中键入“M”来选择将驱动程序构建为可加载模块menuconfig。要将驱动程序内置到内核中,请使用空格键选择驱动程序。选择将标有星号*而不是M以指示此差异。

(此menuconfig对话框的文本来自Kconfig文件。此配置对话框的产物是.config文件,其中有配置符号,在Makefiles 中用于控制目标文件的编译。前面假设此驱动程序已合并到 Linux 内核中源代码树。如果您只有源代码文件,那么您必须决定该驱动程序在源代码树中的位置。然后您可以手动编辑 aMakefile以在相应的子目录中无条件地编译驱动程序. 或者使用此驱动程序的配置变量自定义Kconfig和文件。)Makefile

要保留所有驱动程序的代码,您必须进行一些小的代码更改。通常初始化代码和数据被放置在与“普通”文本和数据分开的文本和数据部分中,一旦内核完成引导,这个内存部分就会被释放。要防止释放任何驱动程序代码和数据,请删除声明中的__initand__exit节说明符。

当然,您必须构建一个新的内核二进制文件才能合并此设备驱动程序。.config在添加驱动程序之前,您应该尝试使用以前的构建文件。

于 2012-10-05T21:12:15.897 回答