Linux
為了讓我的 2.6 ARM 核心在 QEMU 中執行,我缺少什麼步驟?
我正在嘗試使用 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”之類的東西。
成功!
正如建議的那樣,解決方案是通過將 CONFIG_INITRAMFS_SOURCE 指向我的 BusyBox 的“install”目錄來將 initrd 映像嵌入核心。非常感謝 jc_ 的提示。
此外,對於其他嘗試此操作的人,值得注意的是我需要在 Busybox _install 目錄中創建:
- 開發/控制台
- 開發/循環0
如本文所述: https ://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt