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でダウンロードできます

https://sourcery.mentor.com/sgpp/lite/arm/portal/package7851/public/arm-none-linux-gnueabi/arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

ルートファイルシステムの準備

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上に展開して使ってください。



トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード