命令“制作模块”不会构建所有模块

Posted

技术标签:

【中文标题】命令“制作模块”不会构建所有模块【英文标题】:Command 'make modules' doesn't build all modules 【发布时间】:2011-06-10 13:45:08 【问题描述】:

我正在运行 Fedora 14 64 位。

我从 git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 克隆了内核源代码树

大约一周前,我将内核从 2.6.35 编译并升级到 2.6.39,进展非常顺利,我所做的一切都非常简单:

make menuconfig
make oldconfig
make -j8
make modules_install && install

然后我添加了一个虚拟系统调用(我在 Robert Love 的 Linux Kernel Development 书中遵循了这个)并尝试再次编译,它编译内核很好,但是当我发出:

[root@xps420 Kernel]# make modules
CHK     include/linux/version.h
CHK     include/generated/utsrelease.h
CALL    scripts/checksyscalls.sh
Building modules, stage 2.
MODPOST 4 modules

它只做了4个模块,以前有2000多个模块。

我认为是我的虚拟系统调用导致了问题,我撤消了所有更改并再次尝试,结果相同。

同样,我采取的步骤是:

make menuconfig
make oldconfig
make -j8
make modules ----> suspicious

我不确定是什么原因造成的。

编辑: 更多信息,我在重新编译之前运行make clean,但它仍然只生成了 4 个模块。 有一次我确实做了modules_install,并检查了/lib/modules/[ver],只有这4个模块被复制到那里。我应该停在那里,但我继续运行make install,它安装了内核,但无法使用它启动。

编辑: 我刚刚从 kernel.org 下载了稳定版本(2.6.39.1),经过上述步骤后,同样的事情发生了。这很奇怪。也许我系统中的某些东西搞砸了:(希望有人遇到过这个问题并有所启发。

【问题讨论】:

让人们知道您找到了解决方案,进行第三次编辑,将其粘贴为答案,然后点击“接受”复选标记。 会做的,谢谢你的帮助! 【参考方案1】:

好的,在喝了几杯咖啡和大量的谷歌搜索之后,我还不知道这一切是如何工作的,但看起来当我第一次升级内核时,.config 是基于正在运行的内核的配置,它包括所有所需的模块,因此它运行良好?然后不知何故,在随后的编译中,几乎所有的模块都没有在 .config 中配置(除了上面提到的 4 个)。长话短说,我使用旧的 .config 并运行 menuconfig 进行额外的更改,这似乎解决了我的问题。谢谢!

【讨论】:

【参考方案2】:

如果不做“make clean”,之前的编译结果还在。只有受您更改的代码影响的模块才会被重建。

【讨论】:

对不起,我应该提到我确实做了 make clean,结果相同。 你在哪里解压新下载的内核? 您好,我在我的下载文件夹中解压,它是/home/wliao/Downloads/linux-2.6.39.1,但位置应该无关紧要? 只是想确保您没有在存在此问题的现有内核构建之上解压它。【参考方案3】:

也许只有这四个模块依赖于您接触的文件。如果您想确认这一点,请执行make clean,然后再次尝试构建,看看您是否没有重新编译所有模块。当然,这需要更长的时间!

【讨论】:

嗨,是的,我做了一个 make clean 但没有帮助【参考方案4】:

尝试make V=1 ... 以获得详细输出。 甚至V=2

【讨论】:

【参考方案5】:

我遇到了同样的问题,按照wliao的建议解决了。

问题描述:

    几天前我将内核从 3.x.x(CentOS7 内置)升级到 5.0.0; 今天我要升级到5.3.0-rc6+; 升级前,我通过make distclean 进行了全面清理; 在makemake modules_installmake install 之后,我尝试使用新内核重新启动; 但启动失败:error: /vmlinuz-5.3.0-rc6+ has invalid signature. 在谷歌上搜索了半天,我来到了这里,谢天谢地!

解决步骤:

    从 /boot 复制现有的配置文件
    cp -p /boot/config-3.10.0-957.27.2.el7.x86_64 .config
    
    通过menuconfig配置附加设置
    make menuconfig
    
    构建
    make -j $(nproc)
    sudo make modules_install
    sudo make install
    
    显示您的新内核版本
    sudo grep ^menuentry /boot/efi/EFI/centos/grub.cfg | cut -d "'" -f2
    
    设置默认启动内核
    sudo grub2-set-default 'CentOS Linux (5.3.0-rc6+) 7 (Core)'
    
    启动成功!

【讨论】:

以上是关于命令“制作模块”不会构建所有模块的主要内容,如果未能解决你的问题,请参考以下文章

Lua:制作模块系统

导入文件夹之外的用户制作模块[重复]

如何为 PyPI 组织 Python 模块以支持 2.x 和 3.x

Android Studio - 如何在子目录中制作模块?

Python中的模块与包

表格制作模块xlwt