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

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

我对 Linux 机器上的串行驱动程序做了一些更改。我一直试图编译模块并重新加载它,但它会抛出一些错误。相反,如果我重新编译整个内核,它就可以正常工作。

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

谢谢

答案1

正如您提到的那样,成功完成“重新编译整个内核”,您无需再次重新编译整个内核即可开始。大多数用户无法仅编译模块,只是因为没有所有必需的头文件库源。完整内核编译意味着其他必需的库文件已到位。

现在您需要做的是发出:

sudo make prepare 

刚发布

sudo make config 

或者

sudo make oldconfig

让我一步一步地给你命令(以肮脏的方式仅供参考:)

>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

以上步骤与编译完整内核或仅编译模块的步骤相同。现在,如果您只需要编译模块,请让您的制作命令'准备'本身会自动链接 lib/config 文件,以便 make 目标模块进行必要的更改。尝试以下两个命令:

>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/header 文件。

希望此时一切正常,退出时没有任何错误。现在您已经准备好将 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 命令创建的错误消息,您将获得有关源语法/任务库文件的错误信息,或其他错误(例如缺少依赖模块/源)。

祝编译愉快:)

相关内容