「Bonsai kitのすすめ」 目次 ==== - Bonsai Kitとは? - Bonsai Kitの構成 - 準備 - いきなり! Embedded Linuxを体験してみよう ・起動してみよう ・起動プロセスを確認してみよう ・ネットワークアプリケーションを試してみよう - カーネルを作ってみよう - ユーザランドを作ってみよう - My Embedded Linuxを起動してみよう - まとめ Bonsai Kitとは? =============== 組み込みLinuxの開発の敷居を低くし、初心者でも気軽にオリジナル Embedded Linuxを作れるような環境を整備するのがBonsai Linux project のテーマの一つでした。 以下のURLに公開したBonsai Linux開発のドキュメントもなるべく配慮した つもりですが、まだ「興味があればすぐ試せる」状況ではありません。 ドキュメント「Bonsai Linuxの楽しみ方」 http://www.takemaru.com/microserver/technote/bonsai_linux.txt そこで、さらに気軽に試して頂けるように、各種ソースファイル、設定ファ イル、すぐに起動して遊べるUser-mode Linuxと竹丸謹製Bonsai Linuxイ メージをセットにしました。 入手してすぐに試せ、その後ずっと開発環境として利用できます。以下の URLより入手できます。 http://www.takemaru.com/download/bonsai_20040413.tar.gz 110MB以上ありますので、ちょっと回線の太い方向けです(^^; ご注意く ださい。 Bonsai kitの構成 ================ Bonsai Linux projectの提案するEmbedded Linux開発に必要なソースや ツール、竹丸が準備したバイナリ、設定ファイルなどが含まれています (各ツールに関してはそれぞれのライセンスに従ってください)。 - Linux kernel 2.4.24 ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.24.tar.gz - User-mode Linux 2.4.24-1 http://aleron.dl.sourceforge.net/sourceforge/user-mode-linux/uml-patch-2.4.24-1.bz2 - ptxdist 0.5.2 http://www.pengutronix.de/software/ptxdist/ptxdist-0.5.2.tgz すでにリリースされているドキュメント「Bonsai Linuxの楽しみ方」 http://www.takemaru.com/microserver/technote/bonsai_linux.txt で紹介されているディレクトリ構成に基づいています。 ディレクトリ構成は以下の通り。 ~/bonsai -+- linux | (Linux Kernelのソースを展開しています) | +- ptxdist | (ptxdistのソースを展開しています) | +- uml | (User-mode Linux作業用ですが空です) | +- bin | (竹丸がコンパイルしたUML, "linux"があります) | +- src | (ptxdistが必要とするかも知れないgraphvizのRPMがあります) | +- image | (竹丸が作ったユーザランド"userland.img"があります) | +- conf -+ (竹丸が使用した各種設定ファイルがあります) +- dot.config_kernel +- dot.config_ptxdist +- dot.config_uml +- etc 準備 ==== Bonsai Kitを入手しLinux上に展開します。 竹丸はRedHat Linux 9で作業をしていますが、他のLinuxでも大丈夫だと 思います。RedHat Linux 7.3上ではTUN/TAPドライバが無いとメッセージが 出ますが、ネットワーク通信が出来ないことをのぞき問題ないようです。 % wget http://www.takemaru.com/download/bonsai_20040413.tar.gz % tar zxf bonsai_20040413.tar.gz % cd bonsai_20040413 % ls いきなり! Embedded Linuxを体験してみよう ======================================== 1) 起動してみよう "User-mode Linux"を使って竹丸が準備したLinuxを起動してみましょう。 作業用Linux(ホストOS)の上で自分で作ったLinuxがゲストOSとして動作 します。開発時には自分でptxdistを利用し作ったユーザランドが正しく 動作するか試験環境として利用します。 % cd bonsai_20040413 % bin/linux ubd0=uml.diff,image/userland.img eth0=tuntap,,,192.168.2.254 - bin/linuxがUser-mode Linux本体 - image/userland.img が今回起動するユーザランドのイメージファイル - uml.diffは、起動後にユーザランド内で書き換え等が起こった場合の 差分が書き込まれるファイル - "tuntap,,,192.168.2.254"部分はホストOSとゲストOS間の通信の設定 tuntapドライバの使用を宣言。ゲストOSのdefault gatewayとなるべき 仮想的HUBのIPアドレス(未使用なら任意)を設定します。 ゲストOSのアドレスはuserland.imgの中で設定(192.168.2.10)しています。 リターンでシェルに入り、haltで停止するようになっています。 2) 起動プロセスを確認してみよう ptxdistで生成できるのは各種プログラムだけで、どんなプログラムを起動 するかは作者が決定します。どのように決まるのでしょうか。 起動プロセスに関係するファイルは/etc/inittab, /etc/init.d/rcSです。 それぞれの中身確認したり、変更してみてください。 ハングアップしても大丈夫。ホストOS上からプロセスをkillすることがで きます。ps -ef | grep linux で引っ掛かるものが該当プロセスです。 うまく起動できなくなっても大丈夫。ゲストOS内部でのファイル変更は 差分ファイル"uml.diff"に残っています。削除し再起動するとオリジナル に戻ります。 3) ネットワークアプリケーションを試してみよう 今回準備したuserland.imgでは、telnetとftpが動作するようになって います。ネットワーク設定がうまくいっていれば、ホストOS側からゲスト OS側へ通信が可能です。 userland.imgでは以下のようなネットワーク/アカウント設定がされています。 - hostname : test - IP address : 192.168.2.10 - default gateway : 192.168.2.254 - account : root (パスワード"root"), user (パスワード無し) default gatewayは、UML起動時に指定した仮想HUBのアドレスを指定する ようにします(参考:eth0=tuntap,,,192.168.2.254)。 a) ネットワークの確認 guest_os:% ifconfig -a guest_os:% ping b) Telnetの確認 host_os:% telnet c) FTPの確認 host_os:% ftp カーネルを作ってみよう ====================== 自分好みのLinux Kernelを作ってみましょう。 % cd bonsai_20040413/linux % setenv LANG C % make mrproper 既存の.configを消します % cp ../config/dot.config_linux2.4.24 .config 練習用に竹丸があらかじめ準備していたconfigをコピーします。 % make menuconfig 通常ここで自分好みにカスタマイズしますが、今回はメニュー内を冒険したら、 変更無しで終了してください(configコピー後1度は実行してください)。 % make dep % make clean % make bzImage いよいよコンパイルです。ちょっと時間がかかります。 MicroPC Eden/667MHzにて20分程度。 % ls arch/i386/boot/bzImage これが出来上がったカーネルです。 ユーザランドを作ってみよう ========================== ptxdistを使って自分好みのユーザランドを作ってみましょう。 % cd bonsai_20040413/ptxdist % setenv LANG C 練習用に竹丸があらかじめ準備していたconfigをコピーします。 % cp ../config/dot.config_ptxdist0.5.2 .config どんなユーザランドが欲しいかptxdistの設定を自分好みにカスタマイズします。 今回はメニュー内を冒険したら変更無しで終了してください(configコピー後1度は 実行してください)。 % make menuconfig コンパイルします。自動的に各ソース、パッチをインターネット上に入手にいき、 コンパイルを行います。ネットワークの確認など行った上で実行してください。 Bフレッツ+MicroPC Eden/667MHz にて2時間半程度かかりました。 % make world 出来上がったユーザランドを確認しましょう。 % ls root デバイスファイル(/dev)を作成します。 % su root # cd root/dev # cp -dpR /dev/hda[1-6] . # cp -dpR /dev/hdc[1-6] . # cp -dpR /dev/tty[0-3] . # cp -dpR /dev/ttyp[0-3] . # cp -dpR /dev/ptyp[0-3] . # cp -dpR /dev/shm . # cp -dpR /dev/pts . # cp -dpR /dev/console . # cp -dpR /dev/null . # mknod ubd0 b 98 0 # mknod ubd1 b 98 16 # mknod ubd2 b 98 32 # mknod ubd3 b 98 48 各種設定ファイル(/etc)を準備します。 % cd bonsai_20040413/config % tar cf - etc | ( cd ../ptxdist/root ; tar xf - ) User-mode Linux用、Compact Flash用では2つのファイルが異なります。 あらかじめ準備していますのでリンクを張り替えてください。 % ls -la bonsai_20040413/ptxdist/root/etc/fstab % ls -la bonsai_20040413/ptxdist/root/etc/init.d/rcS 以上でユーザランドは完成しました。 My Embedded Linuxを起動してみよう ================================= 前章で作ったユーザランドを、User-mode Linuxで起動してみましょう。 空のroot file image(16MB)を作成します。 % cd bonsai_20040413 % /bin/dd if=/dev/zero of=image/my_userland.img bs=16777216 count=1 % /sbin/mke2fs image/my_userland.img ユーザランドを書き込みます。 % su root # mkdir /mnt/img # /bin/mount -o loop image/my_userland.img /mnt/img # cd bonsai_20040413/ptxdist/root # tar cf - . | ( cd /mnt/img ; tar xf - ) # umount /mnt/img カーネルはコピーしません。 通常のEmbedded Linuxには当然カーネルが必要ですが、User-mode Linux での起動実験の場合はUMLがカーネルとして動作しますので不要です。 起動してみましょう。 % cd bonsai_20040413 % rm uml.diff % bin/linux ubd0=uml.diff,image/my_userland.img eth0=tuntap,,,192.168.2.254 まとめ ====== Linux は "boot loader", "Kernel", "userland"の3つの部品から成 り立っているといえます。Bonsai KitではそのうちのKernelとuserland 作りの環境を提供、特にuserland作成の試行錯誤が簡単に出来るよう に準備されています。 このドキュメントの内容はほとんどcopy&pasteで実行できるほどに 簡単になっていますが、その流れは実際の開発と変わりません。 ここまで読んでくださった皆さんは実際に開発を「体験」したことになります。 Bonsai kitが「ptxdistによるBusyBoxを中心とした小型Linux作成の自動 化」「User-mode Linuxをエミュレーション環境と見立てたLinuxの起動実 験環境」の理解の助けとなれば幸いです。