ホームページ>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.は、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]