ARM用のDebianシステムをクロスコンパイルしようとしています。私は動作するクロスコンパイラ設定を持っており、QEMUにインストールされているDebianシステムでプログラムを実行できます。私はQEMUにコマンドラインオプションとして提供する仮想ディスク(qcow2形式)とは別のカーネルとinitramfsイメージ(ホストシステム上)を使用しています。
プリコンパイルされた Debian カーネルで起動すると、すべてがうまく動作し、システムは /dev/vda* の /dev/vda1 パーティションから起動します。私の考えでは、qcow2ディスクイメージから作成された仮想ディスクデバイスQEMUのようです。
ただし、Debianカーネルソースをインポートして(ゲストシステムからダウンロードして、そのシステムとDebianバージョンの正しいソースを取得してホストにコピーします)、ホストシステムでクロスコンパイルすると、次のようになります。カーネルはinitramfsのbusyboxのみを起動します。この時点では、/ dev / vda *デバイスが存在しないため、ルートデバイスが見つかりません。 (/dev/sd*、/dev/hd*などのデバイスもありません。)
私のカーネルにQEMU仮想ディスクデバイスがまったく表示されないのはなぜですか? (QEMUにはまったく同じコマンドラインがあります。唯一の違いはカーネルイメージファイル名です。)カーネルをビルドするときに誤って設定しましたか? (デフォルトの設定では、実際にはクライアントシステムの/ bootフォルダから取得したDebianカーネル設定ファイルから始めました。)
Debian バージョン (ゲスト) は 8.11 (jessie) です。 Linuxカーネルのバージョンは3.16.0.6-armmp-lpaeです。
私のQEMUコマンドラインは次のとおりです。
qemu-system-arm -M virt -m 1024 -kernel <the kernel image file> -initrd initrd.img-3.16.0-6-armmp-lpae -append 'root=/dev/vda2' -drive if=none,file=hda.qcow2,format=qcow2,id=hd -device virtio-blk-device,drive=hd -netdev user,id=mynet -device virtio-net-device,netdev=mynet -nographic
答え1
少なくとも、次のカーネル構成が必要な場合があります。
CONFIG_BLOCK=y
CONFIG_BLK_DEV=y
CONFIG_DEVTMPFS=y
CONFIG_VIRTIO_MENU=y
CONFIG_VIRTIO_BLK=y
それからそれをinitrddevtmpfs
にマウントすると。/dev
/dev/vda
CONFIG_VIRTIO_MENU
デフォルトでオンになっていても使用する場合はtinyconfig
明らかに必要です。