是否可以单独编译驱动程序而不是整个Linux内核?


0

我对我的linux机器上的串行驱动程序进行了一些更改。我一直在尝试编译模块并重新加载它,但它会引发一些错误。相反,如果我重新编译整个内核它工作正常。

是否可以对串行驱动程序进行更改,并仅编译该模块,并将其加载?

谢谢


它抛出了哪些错误?如果您编译内核,对驱动程序进行一些简单的更改,然后cd到其目录并编译它,它是否有效?(没有做内核广泛先干净!)
Hennes 2013年

我在/drivers/usb/serial/usb_wwan.c中做了一些更改 - 我如何重新编译这个模块?
user791953 2013年

回到内核1.3时代(当2.0内核刚刚出现时,我正在编写一个用于Linux的Firewire驱动程序(不,不发布,仅限飞利浦Natlab))它只是一个cd /usr/src/linux/drivers/../某事/和make firewire.c(显然你的名字会有所不同,但是ls是你的朋友)。
Hennes

你没有重新编译它?
user791953 2013年

我根据SCSI子系统的工作方式编辑了make文件顶部包含所需的驱动程序(3层<strike>无耻地被盗</ strike> .IEEE1394 net,1394 base,1394 AIC5800驱动程序。)
Hennes

Answers:


0

正如你提到的那样成功地“重新编译整个内核”,你就可以不用重新编译整个内核了。大多数用户无法仅仅因为没有所有必需的头库源可用而进行编译。完整的内核编译意味着其他所需的lib文件到位。

现在您需要做的是发布:

sudo make prepare 

刚发出后

sudo make config 

要么

sudo make oldconfig

让我一步一步给你命令(脏的方式FYI :)

>cd /usr/src/linux-source-X.XX.X

>sudo cp /usr/src/linux-headers-`uname -r`/Module.symvers .
>sudo cp /boot/config-X.xx.x-xx-YYYY .config

以上步骤对于编译完整内核或仅模块mak是相同的。现在,如果你需要创建ONLY模块,让你的make命令“准备”自己,必要的更改自动链接lib / config文件,用于目标模块。尝试两个命令:

>sudo make -C  /usr/src/linux-headers-`uname -r`/ prepare
>sudo make -C /usr/src/linux-headers-`uname -r`/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only prepare modules

到目前为止,我记得添加'M'开关告诉make编译源目录的模块指示,在'准备'之前必要的lib /头文件。

希望在这一点上,如果一切正常完成并退出而没有任何错误。现在您已经准备好在系统的模块路径上安装your_module.ko了。

尝试:

>sudo make -C /usr/src/linux-headers-`uname -r`/ M=/usr/src/linux-source-X.xx.X/drivers/directory/of/modules/you/compiling/only modules_install 

要么

sudo make -C / usr / src / linux-headers- uname -r/ M = / usr / src / linux-source-X.xx.X / drivers / directory / of / modules / you / compiling / only install

>depmod -a

希望您的模块现在可以使用了

>modeprob your_mod 

命令

如果你仔细查看make命令创建的eror消息时单独编译模块,你将获得源语法/任务lib文件中的ether错误信息,或者它失败了其他错误,如缺少依赖模块/源。

快乐编译:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.