手軽にやるためにWindowsの環境でなんとかやってみたいと思います。
ターゲット環境はQEMUを用いて ARM Linux を動かすことで対処したいと思います。
開発環境は出来ればWindowsでやりたいですが、Linuxのほうが楽らしいのでまずはUbuntuでARM用のクロスコンパイルを実現させます.
使用している環境は、Windows 7Pro SP1とUbuntu 14.04(amd64)です。
今回の記事では、動作環境の準備をの方を整えていきます。
UbuntuでARM用のイメージを準備する
まずはARM Linuxを起動させるために、Ubuntu上で作業します.
自分の環境では手軽にVMware内にUbuntuを準備して作業しました。
そのUbuntuの準備が出来たら、下記のように端末から入力して linaro のツールをインストールしてしまいます。
sudo apt-get update
sudo apt-get install linaro-image-tools
起動用のイメージは下記のサイトでおいてあるので利用します。
$ wget http://releases.linaro.org/platform/linaro-n/nano/final/linaro-natty-nano-tar-20110527-1.tar.gz $ wget http://releases.linaro.org/platform/linaro-n/hwpacks/final/hwpack_linaro-vexpress_20110526-2_armel_supported.tar.gz $ linaro-media-create --image_file vexpress.img --dev vexpress --binary linaro-natty-nano-tar-20110527-1.tar.gz --hwpack hwpack_linaro-vexpress_20110526-2_armel_supported.tar.gz
実行してyキーを押した後は放置します。作業が完了すると以下のようなメッセージが出ていると思います。
Formating boot partition mkfs.fat 3.0.26 (2014-03-07) mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows Loop device does not match a floppy size, using default hd params Formating root partition mke2fs 1.42.9 (4-Feb-2014) Discarding device blocks: done Filesystem label=rootfs OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 193536 inodes, 773120 blocks 38656 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=792723456 24 block groups 32768 blocks per group, 32768 fragments per group 8064 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912 Allocating group tables: done Writing inode tables: done Creating journal (16384 blocks): done Writing superblocks and filesystem accounting information: done '/tmp/tmpa4drqa/rootfs/binary/usr/lib/u-boot/ca9x4_ct_vxp/u-boot.bin' -> '/tmp/tmpa4drqa/boot-disc/u-boot.bin' Image Name: Linux Created: Sat Jul 12 02:27:51 2014 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 3046644 Bytes = 2975.24 kB = 2.91 MB Load Address: 60008000 Entry Point: 60008000 Image Name: initramfs Created: Sat Jul 12 02:27:51 2014 Image Type: ARM Linux RAMDisk Image (uncompressed) Data Size: 2496894 Bytes = 2438.37 kB = 2.38 MB Load Address: 00000000 Entry Point: 00000000 Populating rootfs partition Be patient, this may take a few minutes Creating /etc/flash-kernel.conf Updating /etc/network/interfaces Done creating Linaro image on vexpress.img
途中でエラーが出てしまいますが、ファイルさえ出来れば気にしないでおきます。
できあがったイメージを適当な場所にマウントして、必要となるファイルを取り出します。
パーミッションの都合で一部rootで作業します.
取り出したらこの2つのファイルをWindows側にコピーします。
そして、vexpress.img もWindows側へコピーします。
$ sudo mkdir /mnt/temp $ sudo mount -o loop,offset="$(file -k vexpress.img | awk 'BEGIN { RS=";"; } /partition 2/ { print $7*512; }')" -t auto vexpress.img /mnt/temp $ cp /mnt/temp/boot/initrd.img-2.6.38-1003-linaro-vexpress . $ sudo cp /mnt/temp/boot/vmlinuz-2.6.38-1003-linaro-vexpress . $ sudo chmod 755 vmlinuz-2.6.38-1003-linaro-vexpress
qemuで起動してみる
QEMUをインストールしたフォルダを、コマンドプロンプトで開きます。
そして次のようなコマンドで起動させます。
D:\qemu>qemu-system-armw.exe -M vexpress-a9 -cpu cortex-a9 -s erial stdio -kernel D:\test-linaro\vmlinuz-2.6.38-1003-linaro-vexpress -initrd d :\test-linaro\initrd.img-2.6.38-1003-linaro-vexpress -m 512 -append "root=/dev/ mmcblk0p2 vga=normal mem=512M devtmpfs.mount=0 rw" -drive file=d:\test-linaro\ve xpress.img,if=sd,cache=writeback
起動過程はこんな感じで表示されます。
起動後には eth0 が認識されているようです。
しかしこの仮想環境の中から外部ネットワークへ出ることは出来なかったです。
(QEMU設定の問題かも・・・)
まとめ
とりあえずはイメージの起動まではできたところで一区切りとしておきます。
この環境に繋いでデバッグを行うことやプログラムイメージを作成する点については、また次回以降に。
余談
今更感ですが、Ubuntuで ia32-libs はすでに deprecated 状態のようです。
そろそろ32bit終わりの感じですね。
参考
http://blog.kmckk.com/archives/4349088.html
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Virtual_ARM_Linux_environment