ホームページH8をMacで>その8・uClinuxに浮気してみる(ハイブリッド編)

その8・uClinuxに浮気してみる(ハイブリッド編)

目次
 目的と経緯

 以下は、マイコンボードのOSをTOPPERS/JSPからuClinuxに変更した際の覚書です。

 大分間があいてしまったH8の話題ですが、TOPPERSに関しては、その間にすっかり忘れてしまいました(笑)。
 再度一からやり直し、でもいいのですが、折角なので(意味不明)、uClinuxに挑戦してみることにしました。

 なお、ハイブリッド編としたのは、今回はMacだけでは完結せず、Linux(Ubuntu)マシンも併用しているためです。


 方針

 まずは恒例?の各OS比較をしてみました。

項目 MES TOPPERS uClinux
 コンパイラ  gcc  gcc  gcc
 OSの提供形態  バイナリ(自分でビルドも可)  ソースコード  ソースコード(バイナリ配布あり)
 OSの置き場  ROM  RAM  外付DRAM
 ブートローダ  (OSと一体化)  簡易モニタ  RedBoot
 アプリケーションの置き場  RAM  RAM  PC(NFS経由の場合)
 アプリケーション等の転送  tftp  Serial  tftp

 uClinuxはサイズが大きく、H8の内蔵ROM/RAMには収まりきりません。(工夫すれば載るのかもしれないが、今回の趣旨にはそぐわないため、深入りしない。)

 そのため、外部記憶領域が必要になりますが、手元のH8/3069ボードには幸い、16Mbit(2MByte)DRAMが実装されていましたので、これを使うことにします。
 ただし、2MBでは全システムを収めるには無理があるらしく、ルートファイルシステム(/bin等のファイル領域)をパソコン上に置いてネットワーク経由でマウントする(NFSサーバ)やり方が一般的のようなので、この方式で行くことにします。


 入手する

 以下の参考サイトで、ビルド済バイナリが公開されていますので、まずはこれをそのまま使わせて頂いて、起動できるかをテストします。
 ネットワーク経由でルートファイルシステムがマウントできれば、ひとまずOKということです。

 参考サイト(1):−ザ・組み込み−ソフトウェアのハードウェア化

 今回揃えるものは以下の通りです。
 ・uClinuxカーネル(『カーネル:「linux.bin」(▼ダウンロードはこちら)』から)
 ・ルートファイルシステム(『ルートファイルシステム:「romfs.tar.gz」(▼ダウンロードはこちら)』から)
 ・ブートローダ(『H8ボード用ブートローダ(▼ダウンロードはこちら)』から)


 経過

 <RedBootを実機のROMに転送する(Windowsマシン)>

 H8では、uClinuxのOS本体をROMに収めることができないため、ブートローダのみを書き込んでおく形になります。
 RedBootは、H8向けブートローダとしては最も一般的なものです。
 例によって、ROMへの転送はMacではできない(できるツールが手元にない)ので、今回もWindowsマシンを用いました。(利用ツールも同じく、h8write.exeです。)
 転送は正常に終了しました。
追記:その後、MacでもROMに転送できるようになりました。こちらを参照して下さい。(2009.12.05)
 <ルートファイルシステムを展開する>

 前述の通り、ルートファイルシステムはパソコン上に置いておき、これをネットワーク経由でマウントして利用する方法を用います。
 今回使わせて頂くカーネルも、この利用を前提にビルドされています。
 そこで、Mac上にルートファイルシステムを作成しました。
(デバイスノードも含んでいるため、解凍はrootで行う必要がある。)

 <動作テスト(失敗)>

 OS本体の転送にはtftp、コンソールとの通信はシリアルポートを使う、という点はMESと同じです。
 よって、Mac-H8IDEをベースにしたMac-H8uClinuxを作成して、実験に使うことにしました。
 ボードの電源を入れると、RedBootが起動しました。
 その後、tftpサーバのIPアドレスを設定し、カーネルを転送したところ、正常にロードされました。

 なので、(試しに)そのまま実行させてみたところ、portの検出でタイムアウトしてしまいます。(その後、カーネルパニック)
 どうも、標準ではMac上でNFSサービスが稼働していないようです。

 <NFSサーバをセットアップする>

 ここで根本的な疑問に立ち返ることになります。すなわち「そもそもMac OS XはNFSサーバになり得るのか?」。
 もしサーバになれない(または導入にコスト/リスクが伴う)のであれば、諦めざるを得ない、ということになります。
 調べたところ、NFSサーバになれることがわかりました。
 しかも、その方法はただ一点、「/etcにexportsファイルを作成すればよい」というものでした。

 参考サイト(2):cappuccinoのコンピタブログ : ここがヘンだよ,Mac OS X 【NFS編】

 そこで、exportsファイルを作成しました。
 ただし、Mac OS XはFreeBSD系なので、前述の参考サイト(1)等の記述では文法エラーになります。
 man等を参考にして、以下のとおり設定しました。
/opt/romfs -alldirs -maproot=root -network=192.168.1.0 -mask=255.255.255.0
 また、設定を変更した場合は「nfsd update」とすれば、マシンを再起動する必要はありません。

 参考サイト(3):Mac OS X Leopard からの NFS export (hisama2's weblog)

 <動作テスト(また失敗)>

 再度実行させてみたところ、portの検出は成功し、rootのマウントまでは行きました(少なくともログ上はそうとれる)が、その後「unable to open an initial console.」と出た後、カーネルパニックを起こします。
 可能性は山程考えられる(苦笑)ので、これ以上Macで実験するのは効率が悪そうです。
 なので、ここでは一旦Macを離れ、より不確定要素の少ないLinuxで継続してみます。

 <UbuntuでNFSを構成する>

 Linuxには様々なディストリビューションがありますが、ここでは、既に別マシンで稼働中のUbuntu 9.04を利用することにします。
 といっても、NFS関連はインストールしていないため、パッケージマネージャから「nfs-kernel-server」を選んでインストールしました。
 UbuntuはLinux(Debian)系なので、「/etc/exports」の記述は参考サイト(1)のとおりでOKです。
 ただし、「/etc/hosts.allow」の設定は以下のとおりとしました。
ALL: 192.168.1.0/255.255.255.0
 設定終了後、
sudo /etc/init.d/nfs-kernel-server start
で、NFSサーバをスタートさせます。
(ルートファイルシステムは、あらかじめUbuntu上に解凍しておいた。)

 <動作テスト(ようやく成功)>

 NFSサーバのIPアドレスを変更したexecを実行させてみたところ、ようやくプロンプトまで行き着くことができました。
 tftpサーバはMac、NFSサーバはUbuntu、という変則構成ですが、ともかくも一段落つきました。
 なお、「Mac上のルートファイルシステムをUbuntuにマウントし、これをH8で指定する」という、更にアクロバチックな方法(笑)も試してみましたが、H8でマウントできませんでした。


 今後の課題

 Macでうまくいかない理由として考えられるのは、まずは以下の2点でしょうか。
  1. パーミッションが不許可
  2. ファイルフォーマットが不適合
 1.は、H8から入ってくるユーザが、ログインはできてもファイルにアクセスする権限がない、という可能性です。
 Linux系では、この辺を回避するために/etc/exportsに、insecureやno_root_squashを指定しているようですが、FreeBSD系ではこれに対応するパラメータが何になるのか、良く分かりません。
 また、以下のサイトのように、ルートファイルシステムのオーナー/グループはいずれもrootでなければならない(Ubuntsuに展開したものは、実際そうなっている)という情報もあるのですが、Macでグループをrootにする方法が分かりません(というか、できるのか?)。

 参考サイト(4):Linux/MIPS HOWTO: 技術的 FAQ(「ブート時に "Warning: unable to open an initial console" というメッセージが出ます」の項)

 2.は、MacのファイルフォーマットがHFS+である、という点です。
 ただし、このことがどう影響するのかは良く分かっていません。
 というのも、Ubuntuから(NFSサーバが稼働している)Mac上のルートファイルシステムをマウントして、テキストファイルを開くと、普通に読めるからです。
 これが「Ubuntuがローカルなフォーマットのファイルを直接読んだ」のではなく、「NFSが仲介してフォーマットの差異を吸収してくれた」からだとすると、あまり関係がなさそう、ということになってしまいます。

 以上、今回の結果を見る限り、「uClinuxをMacで」というのは、かなり厳しい気がします。
 LinuxのNFSサーバにはH8だけでなく、Macも接続できるので、「開発環境&ルートファイルシステムはLinux上に置き、ソース編集&コマンド操作はMac上で」というのも考えられなくはありませんが、そこまでMacにこだわる必要はないかもしれません。
 ということで、「浮気」が「本気」になるかどうかは、まだ未定です。
こうなると、MESのサポートが打ち切られたのは返す返すも残念ですね。(コンパクトさに由来する)TOPPERSの見通しの良さも捨てがたいので、よりを戻す(笑)か、いっそ、ボードを最新のSH系やARM系にアップグレードするか…(Kane BeBe IIというのがすごく気になってはいるのだが…)

 「その8a・uClinuxに浮気してみる(Ubuntu純正編)」へ続く


 お世話になったサイト

 有用なソフトウェアおよび貴重な情報をご提供頂いている皆様に、お礼申し上げます。(以下、順不同)

 参考サイト(1):−ザ・組み込み−ソフトウェアのハードウェア化
 参考サイト(2):cappuccinoのコンピタブログ : ここがヘンだよ,Mac OS X 【NFS編】
 参考サイト(3):Mac OS X Leopard からの NFS export (hisama2's weblog)
 参考サイト(4):Linux/MIPS HOWTO: 技術的 FAQ(「ブート時に "Warning: unable to open an initial console" というメッセージが出ます」の項)


 更新履歴

 2009.12.05 経過に「追記」を追加。
 2009.11.28 新規作成


[Home]  [MacSoft]  [Donation]  [History]