我想将 Fedora 20 内核 (3.11) 降级到 2.6 版,因为我有一个仅支持该内核的软件包。我到处寻找 Fedora 20 的 2.6 内核,但无功而返。如果我尝试安装 Fedora core 16 专用的 2.6 内核,Fedora 就无法启动。有人有什么建议吗?
答案1
Fedora 使用旧内核启动应该(相对而言)不会有问题,我们一直这样做,在无法运行主流内核编译的 ARM 平台上运行 Fedora。
为了保证系统正常运行,必须解决两个关键问题。
第一个是引导加载程序(很可能是 GRUB)。如果您没有为内核安装官方 RPM,这实际上只是一个问题 - 官方 RPM 将为您生成 initramfs 并创建引导加载程序条目。
第二个涉及固件加载。大多数发行版在 3.10 左右从用户空间固件加载切换到内核固件加载。所有当前支持的 Fedora 版本都以这种方式加载固件。因此,切换到较旧的内核意味着内核希望操作系统加载固件,而操作系统希望内核加载固件。我们需要在某个地方重新启用用户空间中的固件加载。
因此,首先,通过你喜欢的任何方式安装旧内核。为了方便起见,我安装了为 Fedora 构建的最新 2.6 内核(f15 是官方支持 2.6 的最新版本)。这些软件包仍可在 Fedora 构建系统 Koji 上使用 [1]。
接下来,我验证了 GRUB 条目是否已创建。您应该会看到内核 2.6 的提示/boot/grub/grub.cfg
(假设您不在 EFI 系统上)。
最后,我们需要解决固件问题。我见过两种解决方案:1. 安装或编译旧版本的 udev(现在包含在 systemd 中),启用内部固件加载。2.firmware.sh
像过去那样使用。
在这种情况下,后者要容易得多。要使此方法有效,需要添加两个文件:/usr/lib/udev/firmware.sh
和/usr/lib/udev/rules.d/50-firmware.rules
。在 Google 上搜索以找到这些文件的副本 [2] - 我不想直接链接到任何一个。
一旦它们进入您的系统,您将需要重新生成 initramfs,以便在必要时在挂载根之前加载固件。这在 Fedora 中使用 dracut 很容易;运行:
dracut /boot/initramfs-2.6.43.8-2.fc15.x86_64.img 2.6.43.8-2.fc15.x86_64 --force
第一个选项是目标 initramfs 文件,第二个选项是内核版本,--force
需要覆盖我们已经制作的 initramfs(最有可能是在 RPM 安装期间)。
这样就行了。我刚刚在虚拟机中测试了它,效果很好。最后要注意硬件的驱动程序支持。它可能不存在于内核 2.6 中。这是我的虚拟机的 Hyper-V 网络适配器的情况。但是,切换到“旧版”网络适配器会产生结果。
[1]http://koji.fedoraproject.org/koji/buildinfo?buildID=327165
[2]https://www.google.com/search?q=%22firmware.sh%22+%2250-firmware.rules%22