我正在尝试使用 QEMU 交叉编译并启动适用于 ARM 的 Linux 2.6 内核。我基本上遵循了看似中包含的相同说明每一个教程关于这个话题。
具体来说:
下载并编译内核
$ 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
编译Busybox
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- arm $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install
_install
从 Busybox目录创建 cpio 存档$ cd $BUSYBOX/_install $ find . | cpio -o -Hnewc | gzip > ../initramfs.gz
使用 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