なんとかなるさね

マイコンをネタにブログを始めてみました


QEMU | Ubuntuのchroot機能でCEV-RZ/A1L Linuxのルートファイルシステムをエミュレーション 

1つ前のエントリでUbuntuのマルチアーキテクチャ機能を試していた時、Ubuntu(というかLinux)にchroot
という機能があることを知りました。この機能は、任意のフォルダ下に作成された擬似的なルートファイル
システムが、あたかも本物のルートファイルシステムであるかのごとく見える(扱える)ようにした状態で、
擬似的なルートファイルシステム上の任意のコマンドを実行する機能です。用途として、新しくビルドした
ルートファイルシステムを確認したり、実行するコマンドが本物のルートファイルシステムにアクセス出来
ないように隔離したり、といったことがあるようです。

$ chroot <擬似ルートファイルシステムフォルダ> <擬似ルートファイルシステム上のコマンド>

そこで、擬似ルートファイルシステムフォルダに、Ubuntu上のCEV Linux SDKでビルドしたCEV-RZ/A1L
Linuxのルートファイルシステムフォルダ(Ubuntu上でビルドしましたのでUbuntu上にあります)を指定し、
実行する擬似ルートファイルシステム上のコマンドに、CEV-RZ/A1L Linuxの/bin/shコマンド(ARM Linux
Cross GCCでビルドしましたのでARM Linuxバイナリです)を指定してみました。

なお、今回もJTAG-ICEベンダの京都マイクロコンピュータ社のブログ記事を参考にさせて頂いたのですが、
そこの実行例にある通り、事前にx86 Ubuntuの/usr/bin/qemu-arm-staticというファイルをARM CEV-
RZ/A1L Linuxの/usr/binフォルダへコピーしておかないと、ARM CEV-RZ/A1L Linuxの/bin/shコマンドが
見つからないというエラーになってしまって、chrootコマンドを実行出来ませんでした。

CEV Linux SDK V1.00.00の場合

NEWROOT=~/CEV_Linux_SDK_V1.00.00/buildroot-2013.05-cevrza1l-20130912-1/output/target
cp /usr/bin/qemu-arm-static $NEWROOT/usr/bin
sudo chroot $NEWROOT /bin/sh

CEV Linux SDK V2.00.00の場合

NEWROOT=~/CEV_Linux_SDK_V2.00.00/buildroot-2013.08.1-cevrza1l-20131202-1/output/target
cp /usr/bin/qemu-arm-static $NEWROOT/usr/bin
sudo chroot $NEWROOT /bin/sh

CEV Linux SDK V1.00.00の場合の実行結果 (なお、lsコマンドもARM Linuxバイナリです。)



CEV Linux SDK V2.00.00の場合の実行結果 (なお、lsコマンドもARM Linuxバイナリです。)



qemu-arm-staticというファイルをコピーしておかなかった場合のエラー



追記 : メモ

参考にさせて頂いたブログ

QEMUのもうひとつの使い方: ユーザーモードエミュレーションとbinfmtとchrootの組み合わせ
http://blog.kmckk.com/archives/2342452.html

関連記事

2014/01/28   blog-entry-413   category: Arduino Lib & CrossGCC

go page top