2012年02月29日
KZM-A9-Dualボードで、glibcベースで軽量な Linuxを動作させる
概要
KZM-A9-Dualボードで、glibcベースで比較的軽量なルートファイルシステムを用いた Linuxを動作させる手順を説明します。
ルートファイルシステムには、ARM社が公開しているものを用いています。
ファイルシステム、ツールチェインの取得
ARM社から Linuxのルートファイルシステム、MentorGraphics社からツールチェイン(Sourcery G++)をダウンロードします。
1) Linuxルートファイルシステム
http://www.arm.com/ja/community/software-enablement/linux.php
中程にある「ビルド済みファイルシステムイメージ」の箇所から、Minimal ARMv6 cramfs をダウンロードします。
thumb2でビルドされたルートファイルシステムを使いたい時には、Minimal ARMv7 Thumb-2 cramfs をダウンロードします。
KZM-A9-Dualボードは neonを搭載しているので、どちらかお好みの方を使ってください。
以下 Minimal ARMv6 cramfs を使う前提で説明をします。
ダウンロード完了すると、ファイル filesystem_bin_alip-ael-armv6-min-debug.cramfs が取得できます。
2) ツールチェイン
https://sourcery.mentor.com/sgpp/lite/arm/portal/subscription?@template=lite
GNU/Linuxの All versions を選択
Sourcery G++ Lite 2010.09-50 を選択
IA32 GNU/Linux TAR をダウンロード
直接には次の URLでダウンロードできます
ルートファイルシステムの準備
Linuxホスト環境として、Ubuntu10.04を利用しています。異なる環境の場合には、その部分を読み替えてください。
KZM-A9-Dualボードでは NFSルートファイルシステムで動作させることにします。
取得したファイルは CRAMFSイメージファイルとなっているので、このままでは NFSで使えません。
CRAMFSイメージをホスト Linux上でファイルを抜き出します。
以下、抜き出し手順です。
$ sudo mount -t cramfs -o loop filesystem_bin_alip-ael-armv6-min-debug.cramfs ./tmp_mnt/ $ cd tmp_mnt $ sudo tar zcvf ./../rootfs_armv6_min.tar.gz *
これで、ルートファイルシステムイメージからファイル単位で抜き出したファイルアーカイブ rootfs_armv6_min.tar.gz が生成されました。
このファイルアーカイブを NFSルートして利用するところに展開します。
たとえば、次のようにします。
$ sudo mkdir -p /export/kzm-a9d/rootfs_arm $ sudo tar xvpf rootfs_armv6_min.tar.gz -C /export/kzm-a9d/rootfs_arm
これで /export/kzm-a9d/rootfs_arm に NFSルートファイルシステムが展開されました。
最後にファイルを一つ変更する必要があります。
NFSルートファイルシステムの次のファイルを変更してください。
etc/inittab
編集は $ sudo vi inittab など、ルート権限で行います。
最後の行が、
::respawn:/sbin/getty -L ttySA0 38400 vt100
となっているところを、次のように変更します(ttySA0 -> ttyS1に変更し、115200bpsにする)。
#::respawn:/sbin/getty -L ttySA0 38400 vt100 ::respawn:/sbin/getty -L ttyS1 115200 vt100
これでルートファイルシステムの準備はできました。
カーネルの準備
KZM-A9-Dualボード付属の Android用のカーネルがそのまま利用できます。
ただし、そのままでは、カーネルの Android向け機能の制約のために、ユーザー空間での socket()生成ができません。
これを回避する必要がある場合には、カーネルコンフィグレーションで、
CONFIG_ANDROID_PARANOID_NETWORK
を無効にして再ビルドしてください。
Networking support -> Networking options -> Only allow certain groups to create sockets
起動オプション
次のようなカーネルコマンドラインにしてください。
root=/dev/nfs nfsroot=192.168.177.233:/export/kzm-a9d/rootfs_arm ip=dhcp noinitrd \ console=ttyS1,115200n8n androidboot.console=ttyS1 SELINUX_INIT=no \ mem=135M@0x40000000 mem=256M@0x50000000 rw video=qfb: rootwait debug
アプリケーションの作成
このルートファイルシステムについて、ARM社の WEBページで、
"これらのイメージは、GCC 4.5.1およびGNU libc 2.11を使用して生成されています。 "
と記載されています。これに相当する codesourceryツールチェインが、
arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
になるので、ダウンロードした上記ファイルをホスト Linux上に展開して使ってください。