无法加载/插入内核模块

时间:2016-08-18 18:16:38

标签: linux-device-driver kernel-module ubuntu-16.04

我正在使用运行Linux内核4.4.0系列的Ubuntu 16.0.4 LTS。 我对i2c-ocores代码和eeprom驱动程序进行了一些更改,并重新构建了整个内核。然后我安装了新构建的内核。

我使用以下步骤构建内核:

1. sudo apt-get source linux-image-$(uname -r)
2. Applied my changes to i2c-ocores and eeprom driver
3. sudo chmod a+x debian/scripts/*
4. sudo chmod a+x debian/scripts/misc/*
5. sudo fakeroot debian/rules clean
6. sudo fakeroot debian/rules editconfigs
   a. Checked all the options for i2c driver
7. sudo fakeroot debian/rules binary-headers binary-generic skipabi=true skipmodule=true 
8. Installed all the .deb packages created by the build.

安装新内核后,我重新启动了计算机并插入了i2c-ocoreseeprom驱动程序,它们运行正常。但是在重新启动四到五次后,我对这些驱动程序的插入失败了。我正在使用modprobe来插入模块。

与i2c-ocores一样,我收到以下错误:

Aug 18 11:08:14 manik kernel: [  214.831678] i2c_ocores: disagrees about version of symbol i2c_new_device
Aug 18 11:08:14 manik kernel: [  214.831682] i2c_ocores: Unknown symbol i2c_new_device (err -22)
Aug 18 11:08:14 manik kernel: [  214.831700] i2c_ocores: disagrees about version of symbol i2c_del_adapter
Aug 18 11:08:14 manik kernel: [  214.831701] i2c_ocores: Unknown symbol i2c_del_adapter (err -22)
Aug 18 11:08:14 manik kernel: [  214.831708] i2c_ocores: disagrees about version of symbol i2c_add_adapter
Aug 18 11:08:14 manik kernel: [  214.831709] i2c_ocores: Unknown symbol i2c_add_adapter (err -22)

有没有人知道这里发生了什么?我做错了吗?

1 个答案:

答案 0 :(得分:0)

问题上确实没有足够的信息给出明确的答案,但我相信我可能知道这个问题。

您正在重建Ubuntu内核,但不会更改版本号。因此,您实际上会覆盖系统附带的内核。在这个过程的某个地方,您可能会在正在使用的内核与您尝试加载的模块之间出现不匹配(即 - 您正在获取vanilla内核和自定义模块,反之亦然)。当发生这种情况时,您看到的错误可能会出现。

我最好的建议是在构建之前将内核的附加修改更改为包含您名字的内容。至少,只需运行uname -r即可查看涉及的版本。

一些旁白:

  • 人们建议你只构建模块。这不会有两个原因。首先,您正在替换现有模块,这意味着您将面临我认为发生的风险。但更重要的是,你说你改变了内核的配置。当你只用树构建模块时,你不能这样做。
  • 您正在运行sudo fakerootsudo是一个使命令以root运行的工具。 fakeroot是一个命令,当真实的环境不可用时,它会伪造根环境。同时运行两者都没有意义。据我所知,您最好的选择是使用fakeroot构建并使用sudo进行安装。