web-dev-qa-db-ja.com

QEMUでARMシステムイメージをビルドして実行しますか?

Debianに基づいてARM(armhfarmelまたはaarch64)の完全なシステムイメージをセットアップしようとしています。 QEMUで実行します。残念ながら、Webで見つけたすべての例は、カーネル(およびいくつかのモジュールが必要な場合はinitrd)を渡すことでイメージを開始します。

しかし、実際にシステムを起動したいのは、ディスクイメージとCD-ROMイメージを(インストールを開始するために)与えるだけで、qemu-system-AMD64を使用してシステムを起動することです。

-machine-cpuにはデフォルトがないことは理解できますが、次のような方法でWeb上に手掛かりを見つけることはできません。

#> wget \
   http://cdimage.debian.org/.../armhf/iso-cd/debian-testing-armhf-netinst.iso
...
#> qemu-img create -f qcow2 debian-armhf.qcow 20G
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                   -hda debian-armhf.qcow                  \
                   -cdrom debian-testing-AMD64-netinst.iso \
                   -boot d
...
#> qemu-system-arm -machine vexpress-a9 -cpu cortex-a9     \
                   -hda debian-armhf.qcow                  \
                   -net nic -Net User,hostfwd=tcp::2222-:22
...

ですから、そんなことが可能かどうかは本当に気になります。そうでない場合、なぜですか?

5
perror

これは素晴らしい質問で、私が少し前に自分自身を掘り下げることを選択しました。私だけがMIPS/MIP64を使用していました。

これを困難にするいくつかの問題があります。

Linuxホストを起動するとき、カーネルは、動作しているハードウェアを理解する必要があります。一部のアーキテクチャ(AMD64など)では、ファームウェアの検出は「高度な構成と電源インターフェイス」( [〜#〜] acpi [〜#〜] )を介してBIOSによって処理されます。他のケースでは、これは拡張可能なファームウェアインターフェイス( [〜#〜] efi [〜#〜] )または非常に古いソリューションとしてのATAGSによって処理されます。最近のほとんどの組み込みシステムでは、ATAGSの使用は「デバイスツリーblob」( [〜#〜] dtb [〜#〜] )と呼ばれるメカニズムに置き換えられています。一連の役立つユーザーは、私よりもはるかに優れた 違いの説明 を行いました。

これらすべての目的は、ハードウェアの構成に関してカーネルにヒントを与えることを支援することであり、一般にブートローダーと連携して動作します。あなたのケースではARMリトルエンディアン(armel)、ARMハード浮動小数点(armhf)、および= ARM 64ビット(aarch64)は、すべてがエミュレートされた「命令セットアーキテクチャ」( [〜#〜] isa [に準拠する必要があるため、コンパイル済みパッケージ、カーネルなどの選択に影響を与えます。 〜#〜] )。

空のディスクとCDイメージのシンプルさを求めているとのことですが、Raspberry Pi *のようなシステムにその形式の「インストーラー」がないのは、そのためです。 Raspbianイメージをダウンロードすると、ブートローダー(das uBoot)、対応するハードウェアのデバイスツリーBLOB、パッケージリポジトリが構成された利用可能なパッケージの基本セットを含む、構造化されたパーティションのセットが含まれます。

これは、別のちょっとした興味深い雑学に触れています... Linuxを「インストール」するときに、そのISOイメージが何をしているのかをよく見ましたか?

例として、Anacondaベースのインストーラー(Fedora、RHEL、CentOSなど)を使用します。

インストールを開始すると、pythonユーティリティ Anaconda の実行を自動的に開始する最小限のライブシステムが起動します。Anacondaは、ユーザーに一連の質問に答えるように要求します。ドメイン固有の言語の構成ファイルを作成し、chrootを作成して、そのchroot内で一連のパッケージインストールを実行します。

これは...小さな意味で、Raspbianイメージを使用するのと同じです。

これはどういう意味ですか?

さて、最初に、どのように進めたいかに応じて、私がお勧めする答えがありますか?

RPiをエミュレートするだけで十分な場合は、以下を提案します。 QEMUを使用してRaspberry Piをエミュレートする

「クラウド」ベースのシステムのようなものをエミュレートする場合、George Hawkinsは 要旨のある要旨 を維持します。

本当に最初からやり直したいのであれば、DebianユーザーAurel32は何年にもわたって ベースイメージのブート準備ができている同様のブログのすばらしい記事)を維持していますプロセス

6
Brian Redbeard