本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

ARMのプログラムを作成してデバッグする 第1回

手軽にやるために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

起動用のイメージは下記のサイトでおいてあるので利用します。

Linaro Releases
$ 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

起動過程はこんな感じで表示されます。

qemu-arm

起動後には eth0 が認識されているようです。
しかしこの仮想環境の中から外部ネットワークへ出ることは出来なかったです。
(QEMU設定の問題かも・・・)

qemu-arm-2

まとめ

とりあえずはイメージの起動まではできたところで一区切りとしておきます。
この環境に繋いでデバッグを行うことやプログラムイメージを作成する点については、また次回以降に。

余談

今更感ですが、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

プログラミング
すらりんをフォローする
すらりん日記
タイトルとURLをコピーしました