我对 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 命令创建的错误消息,您将获得有关源语法/任务库文件的错误信息,或其他错误(例如缺少依赖模块/源)。
祝编译愉快:)