何気に、Air Card向けのARMクロスコンパイル環境を構築したわけだが、実機で動かす前に母艦PCで試しに動かしてみたアレ。QEMUを使う故、記事画像はQEMUのサイト。書いていたらちょっと長くなったので続きを読むから。
目次
ユーザーモードエミュレータのインストールじゃ
まずqemu-user or qemu-user-staticをインストールする(static版のほうがいいかも)。仮想マシンでお馴染みQEMUのユーザーモード版。他のCPU(ARMとかMIPSとか)向けに作られたバイナリをQEMUを介して実行できる。
$ apt-get install qemu-user-static
そして起動へ…
そのあと、qemu-(CPUタイプ) (バイナリ)みたいな感じで起動する。マシンエミュレート時とは異なりsystem抜きであることに注意。ARMの場合は以下のようにする(qemu-user-staticをインストールした場合はCPUタイプの後に-staticを追加すること)。
$ qemu-arm-static busybox
ここではARMでクロスコンパイルしたbusyboxを起動している。スタティックリンクでビルドしている場合は普通に起動するはず。
蛇足:binfmtのちからってすげー!
qemu-user-staticを入れた場合、インストールの時点でbinfmtの設定がされるためqemu-arm-static 〜などとしなくても直接起動できたりする。
ちなみにbinfmtとはバイナリ実行時に動作するもので、特定のパターンに一致した時に指定されたプログラム等にファイルを投げつけ実行させるカーネルの機能(でいいですよね?)。
$ update-binfmts --display qemu-arm qemu-arm (enabled): package = qemu-user-static type = magic offset = 0 magic = \x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00 mask = \xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff interpreter = /usr/bin/qemu-arm-static detector = $ uname -m x86_64 $ ./busybox uname -m armv7l