编译 kernel.org 内核并将其安装到磁盘上的自定义卷

编译 kernel.org 内核并将其安装到磁盘上的自定义卷

我想在自定义 HDD 卷上编译并安装 kernel.org 内核,/dev/sda5而不是与我当前的 Ubuntu 目录合并。

我可以在整个网络上找到有关配置和编译过程的信息,但没有跟踪如何将内核放在自定义卷上(与您在编译时使用的引导发行版不同)。我要求的是如何在 1 个 HDD 上的 2 个不同卷上安装 2 个不同的发行版,现在将我的自定义内核视为另一个发行版。

答案1

您可以在任何您喜欢的地方编译内核,包括您的主目录。构建树之外的目录唯一被修改的时间是当您创建目标之一时install*。因此,要安装内核,您需要执行以下显而易见的操作:

cd $SOME_DIRECTORY
tar -xjvf linux-$VERSION.tar.bz2
cd linux-$VERSION
make mrproper menuconfig
# Configure the kernel here.
# Now build it using all your CPU threads in parallel.
make -j$(grep -c processor /proc/cpuinfo) bzImage modules

配置内核后,它将被构建。此时,您将在 arch/$YOUR_ARCHITECTURE/boot/bzImage 下拥有一个内核二进制文件 (vmlinux) 和一个可启动内核映像。

如果您正在构建一个整体内核,那么您就完成了。将未压缩文件 ( vmlinux) 或压缩文件 ( bzImage) 复制到您想要的卷,根据需要配置启动管理器,然后就可以开始了。

如果您需要安装模块,并假设您已将目标卷安装在 /mnt 上,您可以说:

INSTALL_MOD_PATH=/mnt \
INSTALL_PATH=/mnt/boot \
make modules_install

这会将内核映像复制到/mnt/boot并将模块复制到/mnt/lib/modules/$VERSION.

请注意,我过于简单化了。如果您需要手动构建内核的帮助,您应该阅读内核源代码树子目录中的一些文档Documentation/。该README文件还详细告诉您如何构建和安装它。

不过,引导内核是另一回事。大多数现代发行版都使用初始 RAMdisk 映像,其中包含大量启动内核其余部分(块设备、文件系统、网络等)所需的硬件驱动程序。这个过程不会产生这个图像。取决于你需要做什么(什么你需要做什么?),你可以使用现有的工具链或使用你的发行版的工具链创建一个新的。您应该检查 上的文档update-initramfs

不过,还存在其他问题。使用标准工具链,您无法为不同的体系结构或子体系结构编译内核。请注意,在某些情况下,即使是在特定类型的 x86 机器上编译的内核也无法在某些其他类型的 x86 机器上运行。这一切都取决于子体系结构和内核配置的组合。跨架构编译(例如在 x86 机器上构建 ARM 内核)是完全不可能的,除非您安装了适当的交叉编译工具链。

但是,如果您尝试挽救另一台安装或计算机,则救援磁盘可能比构建这样的自定义内核更方便。

还有一件事:如果您尝试为另一台启动的计算机构建内核,该内核与您正在编译的计算机具有相同的架构,并且运行 Debian 或类似 Debian 的操作系统(Ubuntu 也算在内),您可以安装kernel-package包裹 (sudo aptitude install kernel-package)。然后将内核解压cd到源代码树的根目录,并说:

CONCURRENCY_LEVEL=$(grep -c processor /proc/cpuinfo) \
sudo make-kpkg --initrd binary-arch

这将应用必要的补丁、配置内核、构建它并将其打包为 .deb 包(实际上是几个包)。您所需要做的就是将其安装到目标系统上,然后就完成了。

相关内容