QEMUを使用してARMカーネルを起動するには?

QEMUを使用してARMカーネルを起動するには?

QEMUを使用してrootfsでARM Linuxカーネルを起動する際に問題があります。まず、直接コンパイルしようとした後、debian linux-image-rt-armmpカーネルを使用しましたが、何も機能しませんでした。

これが私が得るものです:

  • debootstrapを使用してext4ディスクイメージにrootfsを作成しました。
  • vmlinuz(debianコンパイル用)/ bzImage(自己コンパイル用)にLinuxカーネルを用意しました。
  • debootstrapで作成されたinitrdをコピーしました。

複数のQEMU呼び出しを試みました。

  • qemu-system-arm -machine virt -kernel linux-kernel/vmlinuz -append "root=/dev/sda rootwait console=ttyAMA0" -drive file=./armhf.img,format=raw,index=0,media=disk -cpu cortex-a15 -smp 2 -s -m 1024<ディスクが使用できないため待機します。
  • qemu-system-arm -machine virt -kernel linux-kernel/vmlinuz -append "root=/dev/ram rootwait console=ttyAMA0" -initrd linux-kernel/initrd.img -cpu cortex-a15 -smp 2 -s -m 1024 -nographic<initramfsで起動しますが、/dev/ramまたは他のディスクが見つかりません。
  • 別のものを指定すると、-machineすべてvirtが静かになり、何も見えません。
  • -drive file=...-sdさまざまなバリエーションの使用/指定-hda。カーネルにパニックが発生した場合(つまり、省略rootwait)、私が指定したものに関係なく、利用可能な開発は表示されません。

ディスクが見えないため、ドライバが欠落していると仮定します。なぜ Debian ビルドカーネルに含まれないのですか?私はいくつかの記事で読んだもののいくつかをカスタムカーネルにコンパイルしようとしましたが、何も機能しないようです。ここで有効にする必要がある特定の構成を知っている人はいますか?

私も見つけました。このシーズカラーガイドbuildroot を使用して rootfs を生成します。カーネルがディスクを見ることができない場合、彼らのガイドがなぜ機能するのか理解できません。また、私はdebootstrapを使用したいと思います。これはすべてのソースであるデバイスツリーがありませんか-dtb /linux/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb

別のアイデアがありますか?

答え1

欠落しているデバイスツリーは実際には問題です。 Debian ビルドカーネルでは動作させることはできませんが、カスタムビルドカーネルはすぐに動作します(make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- vexpress_defconfig)。

最終的なオペレーティングシステムは次のように起動します(DTBを入手するにはsyzkallerのガイドに従ってください)。

    qemu-system-arm \
        -machine vexpress-a15 \
        -kernel linux-6.4.5/arch/arm/boot/zImage \
        -append "root=/dev/mmcblk0 console=ttyAMA0" \
        -sd ./armhf.img \
        -smp 2 \
        -m 1024 \
        -dtb vexpress-v2p-ca15-tc1.dtb \
        -nographic

関連情報