組み込み用開発システム(OpenEmbedded + debian)

 armとpower-PCの組み込み用開発システムの試用

 無償のuClinuxも安価ではあるが有償化されMontavistaも前ほどの元気が無い。となれば、やっぱり Debianの出番のようです。

2007/9/15
1 試みにixp425のシステムを作成してみる
 手持ちでiomega-NAS100dと同一構成のixp425ボードがあったので、何はともあれ、やってみる事にした。まず NSLU2-LinuxのProject の NSLU2-Linux Development を開き、MasterMakeileのStandard steps の手順に従う。 しかし、バージョン管理の monotone はリーナスさんもあきれるほどの遅さで (Pen4/1.8Gで)8時間を要した。 続いて次のステップを実行する。
$ make setup
$ make slugosbe
 このステップの実行には、やはり6時間程度を要する。 これはarm用のバイナリを全部作っているからで、1度作っておけば再度実行する必要は無い。無事に エラー無くバイナリが完成すれば、ここまでで ixp425用の toolchain が出来上がったことになる。 そこで Makefile の distro を image に変更しておく。 (忘れても以降は image 作成だけ)
ここまでに BSD_ixp400AccessLibrary-2_4.zip と IPL_ixp400NpeLibrary-2_4.zip を ~/download/ にダウンロードしておく。 加えて、BSDをIPL に変更し、md5 を計算しておく。
$ make slugosbe
 このステップで既に設定されているターゲットの kernel-image が作成される。

  既存の設定で ~slugosbe/tmp/deploy/images/ にターゲットの zImage と同時に jffs2 ファイルシステムが出来上がる。
2 ターゲットへのインストールと実行
 インストール作業は通常の redboot で行う。TFTP で開発システムからダウンロードできるように設定しておく。 
load -r -v -b 0x01600000 zImage
fis create -b 0x01600000 -l 0x00100000 zImage
load -r -v -b 0x01000000 rootfs.jffs2
fis erase -f 0x501c0000 -l 0x004a0000
fis write -f 0x501c0000 -l 0x00400000 -b 0x01000000
fis create rootfs.jffs2 -n -f 0x501c0000 -l 0x004a0000
実行は fconfig で設定する。
fis load zImage
go 0x01600000
必要最小限の Linux が立ち上がる。
3 ディスク増設
 nas100d はもともと "Network Attached Storage" ですから usb ディスクのため usb2 ポートがついています。 ここに usb-disk を接続すれば直ちに認識し使用可能になる。もちろん USB メモリもOKです。
4  速度は早くなっているはず??
 
オリジナルを持っていないので比較できないが、kernel2.6版はオリジナルよりも高性能??
5 ファイルシステムの変更

 この開発システムのディレクトリ構成とその意味を列挙する。
 
デイレクトリあるいはファイル名 内容
Makefile これはマスターメイクファイルである
bitbake/ bitbake はOpenEmbedded パッケージを支援構築するツールである、この拡張子として .bb を与えられている
downloads/ 全てのダウンロードされたソースの格納場所
downloads/*.md5 ソースコードがダウンロードされると同時に、そのmd5sums ファイルが生成される。ある時点でbitbake がチェックする。
monotone/ このプロジェクト(nslu2) のデータベースファイル
openembedded/ openembedded本体
openembedded/conf/distro/slugos.conf slugos(プラットフォーム)自体の基本設定
openembedded/packages/ ここにopenembeddedで扱う全てのパッケージがある。
openembedded/packages/meta/slugos-packages.bb slugos構築用のメタパッケージ
slugosbe/ このデイレクトリはプロジェクトのターゲット構築の全ての要素を含む
slugosbe/tmp/ このディレクトリ以下に構築される。
slugosbe/tmp/cross/ 完全なクロスコンパイル toolchain
slugosbe/tmp/deploy/ rom焼き用のパッケージ及びイメージの収容場所
slugosbe/tmp/rootfs/ 圧縮されたルートファイルシステム
slugosbe/tmp/staging/ コンパイルに必要される全てのもの
slugosbe/tmp/stamps/ 空のファイルであり存在そのものがプロセスの状態(有無)を示す
slugosbe/tmp/work/ コンパイル済みパッケージ
scripts/  
unslung/ 他のプロジェクト例えば unslung

 この NSLU2 プロジェクトでも取り扱っているが、限られたメモリ・リソースの中では squashfs が良い選択肢と思われる。 RAM の使用は最小限であり、圧縮を戻す速度も向上している。 R/W 属性の必要なものは tmpfs に移行すれはサーバーのような用途では充分な速度が得られる。 速度的には Ramdisk には及ばないが、その分 Ram エリアはメインメモリに戻されるので、多くの場合プロセスはメモリに残る。 その結果、圧縮ファイルシステム採用により速度が大きく削がれることはないようである。 ここでは squashfs の追加を行う。

 カーネル・コンフィグ変更の方法
 新規に作るのは大変なので、既にパッチ済みのソースツリーを使ってコンフィグを変更する。 ソースツリーは下記の場所にある。 (この場所は削除して再構築を行うので注意。)
 
cd ~/slug/slugosbe/tmp/work/ixp4xxbe-linux/ixp4xx-kernel-2.6.21.6-r0.915/

 ここで

make ARCH=arm CROSS_COMPILE=armeb-linux menuconfig

 として menuconfig を動かす。

 得られた .config は
openembedded/packages/linux/ixp4xx-kernel/2.6.21/defconfig
に置く。

6  カーネルの再構築
 せっかく機種ごとにカーネル作成が組み立てられているので Bitbake の作法に従って実行する。前記の slugosbe/tmp/ の配下に work、stamps、(cache) があり、この中の ixp4xxbe-linux ディレクトリがある。カーネルはこれ以下に作成されるので、この ixp4xxbe-luinux ディレクトリを削除する。( cache は使ってないかも知れない)

cd ~/slug/slugosbe/tmp/work
rm -rf ixp4xxbe-linux
cd ~/slug/slugosbe/tmp/stamps
rm -rf ixp4xxbe-linux

cd ~/slug/slugosbe
make image
deploy 配下にファイルシステム及びカーネルイメージが作成される。

 しかし、これは kernel_source からパッチをかけてコンパイルする一連の動作を実行する。もし Bitbake 作法によらないのであれば、最終パッチ後のソースが前記場所に残っているので、menuconfig と同様に make することができる。
 以下同様に各種変更を行う。なお、~/slug/sugosbe/tmp/stamps に実行済みの処理名が残っている。これの再実行処理名を消せば、その処理と依存関係にある処理が実行される。
7 ファイルシステムの作成
 最小のファイルシステムは ~/slug/slugosbe/tmp/rootfs にある。
他のアプリケーションは ~/slug/slugosbe/tmp/work/armv5teb-linux にある。
これを適宜インストールしてファイルシステムを構築する。
 なおアプリケーション全部の追加とコンパイルに2日ほど、ディスクは 13Gb ほどかかった。
 
8 結果と感想
 OpenEmbeddedとbitbake のマニュアルを見ながらなので、えらく手間ヒマがかかるがバグも無く働く。こうなれば日本語マニュアルが欲しい。がよく見てみると、この最小システムで ipkg が動作する。 直ちに、ネイティブな開発環境が出来上がりそうです。
 
9 Native開発環境の作成
 適当なUSBディスクが手持ちに無かったので、遅いことを承知でNFSrootで構成することにした。まずNFSサーバ上にrootfsのディレクトリツリーを作成しておく。

# udhcpc

# mount  "SERVER ADDR":/rootfs   /mnt
# chroot  /mnt
# mount  -t proc proc /proc

 これで、NFS上の広いディスク空間を使用することができる。

# ipkg update
# ipkg install libc6-dev
# ipkg install slugos-native   これでNative開発に必要な全てのものがインストールされます。 カーネルソースは適当に選んで持ってきてください。(パッチも済ましておく)
# make menuconfig
# make

 というように何の苦もなくできてしまう。あとは慣れたDebianの手法で作業が進められる。ありがたい?時代になったものだ。

 
Guest No.