2013年2月18日月曜日

ARM QEMUでlinuxカーネルを起動

QEMUでARMの話の続き。

linuxを動かしてみたいと思います。


1. linuxカーネルのビルド

kernel.orgからダウンロードしてビルドします。3.xもありますが、今回は2.6を選んでみました。
ここでコンフィギュレーションは次のようにしておきます。 
で、ビルド。
ビルドできたらイメージを確かめてみます。

2. とりあえずQEMUに放り込んでみる

ここでQEMUのビルドのとき、--target-listオプションにarm-softmmuを仕込んでおいた効果が出ます。linuxカーネルを動かすときはqemu-system-armコマンドを使います。
私はx11vncを使っているので、-vnc :0オプションでvncに出力して見ています。linuxデスクトップで試している場合はナシでOKです。それから先にvncのセッションが存在している場合も良くない場合があるので、止めておきます。x11vncなら下記です。

実行してみると、kernel panicで落ちています。
ということで、rootを指定しろ、と言われます。

3. ダミーファイルシステムの作成

ルートファイルシステムに指定するためのダミーを作成します。適当なディレクトリで、下記のようにエディタでcコードを書いてください。

続いてコンパイル。
ここで-staticにしておくのがミソのようです。
cpioコマンドでルートファイルシステムに変換します。

で、これをルートに指定して実行します。-kernelオプションの引数は正しいカーネルの位置を指定してください。

すると、cコードに書いたとおり、Hello World!を出力する様子が確認できると思います。





トラブルシューティング。



◆実行時

oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: No such file or directory
oss: Could not initialize DAC
oss: Failed to open `/dev/dsp'
oss: Reason: No such file or directory
audio: Failed to create voice `lm4549.out'

下記を入れてから実行します。

----
Unimplemented flash cmd sequence

これは、 grepしてみるとkernelではなくQEMUのhw/pflash_cfi01.cが出していることがわかります。この辺で調べてみたところ、どうやらQEMUのバージョンが古いのがダメらしい。このブログの前回のQEMUでARMの記事で、当初1.3.1を入れたとか書いてたりしてたんですが、1.4以降を入れる必要があったようです。ここで最新のReleaseをDLしましょう。


参考情報

Using QEMU for Embedded Systems Development, Part 1
Compiling Linux kernel for QEMU ARM emulator 
Architectures/ARM/HowToQemu

0 件のコメント:

コメントを投稿