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
という機能があることを知りました。この機能は、任意のフォルダ下に作成された擬似的なルートファイル
システムが、あたかも本物のルートファイルシステムであるかのごとく見える(扱える)ようにした状態で、
擬似的なルートファイルシステム上の任意のコマンドを実行する機能です。用途として、新しくビルドした
ルートファイルシステムを確認したり、実行するコマンドが本物のルートファイルシステムにアクセス出来
ないように隔離したり、といったことがあるようです。
$ 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
- 関連記事
-
- OSエミュレータ | LinuxバイナリをWindows上で実行するAtratusというソフトウェアを試してみた→×
- QEMU | VMware Player上のUbuntuでMinGW32 GCCをapt-getしてインストールしてみた
- QEMU | ARM (Linux非対応) Insight-7.4でARM Linux Arduinoスケッチをデバッグ
- QEMU | UbuntuのARMユーザランド + ARM Linux GDBでARM Linux Arduinoスケッチをデバッグ (2)
- QEMU | UbuntuのARMユーザランド + ARM Linux GDBでARM Linux Arduinoスケッチをデバッグ→△
- QEMU | UbuntuのネイティブなGDBSERVERをインストールして動かしてみた
- QEMU | Ubuntuのchroot機能とマルチアーキテクチャ機能を使ってARM Linux Arduinoスケッチを実行
- QEMU | Ubuntuのchroot機能でCEV-RZ/A1L Linuxのルートファイルシステムをエミュレーション
- QEMU | Ubuntuのマルチアーキテクチャ機能を使ってARM Linux Arduinoスケッチを実行
- QEMU | CEV Linux SDK V2.00.00 GCC 4.7でビルドしたARM Linux ArduinoスケッチをQEMUで実行
- QEMU | Linaro ARM Linux GCC 4.7でビルドしたARM Linux ArduinoスケッチをQEMUで実行
- Arduino IDE | Linux Arduino互換ライブラリをCEV Linux SDK V2.00.00 GCC 4.7でビルド→正常終了
- Arduino IDE | Linux Arduino互換ライブラリをUbuntu/Linaro x86 Linux GCC 4.7でビルド→正常終了
- Arduino IDE | Linux Arduino互換ライブラリをLinaro ARM Linux GCC 4.7でビルド→正常終了
- Arduino IDE | Linux Arduino互換ライブラリをUbuntu/Linaro x86 Linux GCCでビルド→途中でエラー
2014/01/28 blog-entry-413 category: Arduino Lib & CrossGCC
| h o m e |