我正在运行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内核开发书),并尝试再次编译,它编译内核很好,但是当我发布时:
[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),经过上述步骤后,发生了同样的事情。这很奇怪。也许在我的系统中的一些东西搞砸了这个:(希望有人遇到这个并且有所启发。
答案 0 :(得分:2)
好的,经过几杯咖啡和大量谷歌搜索,我不知道这一切是如何工作的,但看起来就像我第一次升级内核时,.config是基于正在运行的内核的配置,它包括所有所需的模块,因此运行良好?然后以某种方式在随后的编译中几乎所有模块都没有在.config中配置(除了上面提到的4个)。长话短说,我使用旧的.config并运行menuconfig进行其他更改,似乎解决了我的问题。谢谢!
答案 1 :(得分:0)
如果你不做“make clean”,之前的编译结果仍然存在。只会重建受您更改的代码影响的模块。
答案 2 :(得分:0)
也许只有这四个模块依赖于您触摸的文件。如果您想确认这一点,请执行make clean
,然后再次尝试构建,并查看是否未再次编译所有模块。当然,这需要更长的时间!
答案 3 :(得分:0)
尝试make V=1 ...
以获得详细输出。
甚至是V=2
。
答案 4 :(得分:0)
我遇到了同样的问题,并按照wliao的建议解决了这个问题。
问题描述:
make distclean
进行了彻底清理; make
,make modules_install
和make install
之后,我尝试使用新内核重新启动; error: /vmlinuz-5.3.0-rc6+ has invalid signature.
解决步骤:
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)'