Linux

為了讓我的 2.6 ARM 核心在 QEMU 中執行,我缺少什麼步驟?

  • March 29, 2016

我正在嘗試使用 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
  1. 編譯 Busybox
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- arm
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install
  1. _install從 Busybox目錄創建 cpio 存檔
$ cd $BUSYBOX/_install
$ find . | cpio -o -Hnewc | gzip > ../initramfs.gz
  1. 使用 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”之類的東西。

成功!

正如建議的那樣,解決方案是通過將 CONFIG_INITRAMFS_SOURCE 指向我的 BusyBox 的“install”目錄來將 initrd 映像嵌入核心。非常感謝 jc_ 的提示。

此外,對於其他嘗試此操作的人,值得注意的是我需要在 Busybox _install 目錄中創建:

  • 開發/控制台
  • 開發/循環0

如本文所述: https ://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt

引用自:https://unix.stackexchange.com/questions/272569