我如何知道内核是否使用 CONFIG_MODVERSIONS 构建?

我如何知道内核是否使用 CONFIG_MODVERSIONS 构建?

我正在运行 Ubuntu:

#lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.4 LTS
Release:    12.04
Codename:   precise## Heading ##

和:

内核信息:

3.8.0-38-generic #56~precise1-Ubuntu SMP Thu Mar 13 16:23:47 UTC 2014 i686 i686 i386 GNU/Linux

我想知道这个正在运行的内核是否是使用哪个构建的CONFIG_MODVERSIONS。有什么命令吗?

更新

#/usr/src/ubuntu-precise# make oldconfig | grep CONFIG_MODVERSIONS
/boot/config-3.8.0-38-generic:3420:warning: symbol value 'm' invalid for SPI_PXA2XX_PCI
/boot/config-3.8.0-38-generic:4222:warning: symbol value 'm' invalid for VIDEO_EM28XX_RC
/boot/config-3.8.0-38-generic:6694:warning: symbol value 'm' invalid for NFS_V3
/boot/config-3.8.0-38-generic:6696:warning: symbol value 'm' invalid for NFS_V4

之后没有任何进展。在这里停留了 30 多分钟

答案1

尝试这个:

  1. 安装dpkg-dev软件包。这是第 2 步所需的。

    sudo apt-get install dpkg-dev
    
  2. 下载当前使用的内核源代码:

    apt-get source linux-image-$(uname -r)
    

    这将在当前目录中创建一个包含内核源代码的目录。例如,在运行内核版本 的 13.10 上3.11.0-12-generic,它创建了:

    /home/terdon/linux-3.11.0
    
  3. 检查文件中是否设置了该选项~/linux-3.11.0/.config

    $ grep CONFIG_MODVERSIONS  ~/linux-3.11.0/debian.master/config/config.common.ubuntu
    CONFIG_MODVERSIONS=y
    

y正如您上面看到的,该选项默认设置为(开启),因此,除非您编译了自己的内核,否则该选项是在您正在使用的内核中设置的。

答案2

尝试:

grep MODVERSIONS /boot/config-$(uname -r)

如果你得到

CONFIG_MODVERSIONS=y

然后它就打开了。

答案3

对于 2.4 内核,CONFIG_MODVERSIONS可以在文件夹中的 Makefile 中找到/usr/src/linux-2.4.x-xx/

另一个症状是出现错误消息,例如,unresolved symbol reference可能的原因之一可能是 -CONFIG_MODVERSIONS已启用,但 LKM 并未同样进行编译。

相关内容