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