linux-kernel - 自定义构建的内核无法正确安装 - Centos7
问题描述
我正在尝试在我的机器上构建和安装多个内核,所有版本完全相同(4.19.10
在此处找到),但具有不同的抢占模型(用于基准测试)。我在最初的 vanilla 内核构建和安装方面取得了成功,但所有后续安装都无法启动。
我将内核构建为 rpm 包。同样,除了 2 处更改外,所有内容都完全相同make menuconfig
:
General Setup >> Local version - append to kernel release
- 这里我添加了一个字符串来表示抢占模式,例如-lld
用于低延迟桌面General Setup >> Preemption Model
- 这里我选择抢占模型
所有这些(有和没有CONFIG_RT_PREEMPT
补丁)都构建良好,没有错误。我正在安装rpm -ivh kernel-4.19.10_lld-1.x86_64.rpm
,在达到 100% 并挂起之前,它似乎是成功的。最终,我终止了安装ctrl+c
并检查正在运行的内容,top
并且可以看到grub2-editenv
仍在运行。
从这里开始,可能会发生一些不同的事情,但结果都是一样的。重新启动通常会挂起,第二次重新启动要么将我带到 grub 命令行,要么返回带有Welcome to emergency mode!
.
我可以将新内核添加到 grub 中grub2-mkconfig -o /boot/grub2/grub.cfg
,这没有问题。但无论是直接从 grub 命令行选择启动映像,还是将其添加到 grub 并在启动期间选择它,我都会得到相同的文本:
error: invalid magic number.
error: you need to load the kernel first
我认识到这里可能没有足够的信息来确定我的问题,但我希望至少能得到一些指导并回答几个问题:
- 是否
General Setup >> Local version - append to kernel release
足以使这些内核独一无二,以便它们可以并排安装? - 这些症状是否表明构建错误、配置不正确的 rpm 规范或只是错误的 grub 配置?
谢谢
更新:我能够rpm -Uvh kernel-4.19.10_lld-1.x86_64.rpm
成功升级我的内核并让它正确启动,尽管我不能用其他内核之一做到这一点。不确定这表明什么,但我认为问题可能是尝试并行安装相同的内核版本,并且构建本身可能还可以。
更新 2:我放弃了 rpm 解决方案并尝试了make modules_install
和make install
. 安装没有问题,但运行grub2-mkconfig
挂起。引导在黑屏时挂起,重新引导将我带到 grub 命令行。然后手动加载内核不会出现任何错误,但在识别硬件后启动最终会导致内核崩溃。消息是Kernel Panic - not syncing: VFS: Unable to mount
。
可能相关 - 我在 VM(intel i7 硬件)上构建了第一个(工作)内核,但一直在 intel atom e3950 芯片组上构建其他内核。我认为这可能是问题所在,因为 menuconfig 最终会有所不同。我认为我还没有在那个芯片组上建立一个健康的构建。
解决方案
推荐阅读
- ios - 字符串文件不作为 Xcode 中的 ASCII 属性列表打开?
- c# - 有没有办法显示从函数返回的数组
- python - 从右到左对齐数据
- python - 如何在 TensorFlow 中动态省略反向传播的梯度路径?
- android - Android:应用程序在带有签名证书的发布模式下崩溃
- python - 将行与熊猫合并
- kotlin - Retrofit2 - 是否可以循环 @Part 的改造?
- php - 在 php 中检索对象的空白页
- haskell - Haskell 错误 - 未解决的重载 - 由使用“打印”引起的不明确类型变量“a0”
- javascript - 垫自动完成没有正确过滤角度