为了让 2.6 ARM 内核在 QEMU 中运行,我缺少哪一步?

为了让 2.6 ARM 内核在 QEMU 中运行,我缺少哪一步?

我正在尝试使用 QEMU 交叉编译并启动适用于 ARM 的 Linux 2.6 内核。我基本上遵循了看似中包含的相同说明每一个教程关于这个话题。

具体来说:

  1. 下载并编译内核

    $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- versatile_defconfig
    $ #Disabled loadable modules and enabled initramfs
    $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all
    
  2. 编译Busybox

    $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- arm
    $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install
    
  3. _install从 Busybox目录创建 cpio 存档

    $ cd $BUSYBOX/_install
    $ find . | cpio -o -Hnewc | gzip > ../initramfs.gz
    
  4. 使用 qemu-system-arm 启动

    $ qemu-system-arm -M versatilepb -m 200M -kernel $KERNEL/arch/arm/boot/zImage -initrd $BUSYBOX/initramfs.gz -append "root=/dev/ram0"
    

结果是这样的:

在此输入图像描述

看起来内核无法识别文件系统,但我不知道如何解决这个问题。这些基本上是每个教程遵循的确切步骤。内核源代码中没有启用“cpiofs”之类的东西。

答案1

成功!

正如建议的那样,解决方案是将 CONFIG_INITRAMFS_SOURCE 指向我的 BusyBox 的“_install”目录,将 initrd 映像嵌入到内核中。非常感谢 jc__ 提供的建议。

另外,对于尝试此操作的其他人来说,值得注意的是我需要在 Busybox _install 目录中创建:

  • 开发/控制台
  • 开发/循环0

正如本文中提到的: https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

相关内容