連載
» 2008年10月29日 00時00分 UPDATE

−ザ・組み込み−ソフトウェアのハードウェア化(4):意外と深い、マイコン版「Hello World!!」を侮るなかれ (1/4)

OSが動くようになったH8マイコンを使って、今度は“ユーザー・アプリケーションの構築”にチャレンジするぞ!

[鳥海佳孝 設計アナリスト,@IT MONOist]

 前回「山あり谷あり、非力なマイコンでuClinuxを動かすべし」では、小型CPUで動作可能なLinux OS「uClinux」をH8マイコン上で動作させることに成功しました。こんな小さなボード上でOSが動作するなんて、まさに「ザ・組み込み」ではないでしょうか。

 さて今回は、これまでお届けした環境構築編(第1回〜3回)を受け、いわゆる“ユーザー・アプリケーションの構築”を行っていこうと思います。

――その前に、

  皆さん、これまでの内容を読んでみて、“あること”に不満を感じてはいないでしょうか(実は、ずっと心の奥に引っ掛かっていました)。そう、それは「一体、いつからソフトウェアのハードウェア化の話になるんだ!」ということです。

 3回の連載を重ねてもその話は一切していませんので、ご指摘はごもっともです……。しかし、これまでの内容は決して無駄なものではなく、「ザ・組み込み」を語るうえで重要な要素だと筆者は考えています。何をいいたいかというと、“ソフトウェアのハードウェア化”を本格的に説明していくためには、これまでの内容を事前に解説する必要があったということです。

 そして、今回お届けする内容を境に(つまり、次回から)、ソフトウェアのハードウェア化の本題に入っていく予定ですので、いましばらく辛抱してお付き合いください。

 さて、何だか政治家の言い訳のようになってしまいましたが、気を取り直して今回の内容を進めていきましょう。

サービスの起動を有効にする

 ここまでの作業で何とかOSを動作させることができましたので、今回はもう少し環境的に踏み込んでみたいと思います。

 まずは、ホスト側(KOHJINSHA SA5SX12A)の設定の見直しです。

 実はいまの状態のままですと、特に立ち上げ時に何も設定していないので、DHCPサーバのサービスやNFSのサービスをその都度以下のようなコマンドで起動する必要があります。

# /etc/init.d/dhcpd start ←DHCPサーバのサービスの起動 
# /etc/init.d/nfs start ←NFSサーバのサービスの起動 

 これを毎回行うのはさすがに「ウザい」と思いますので、起動時にこれらのサービスが有効になるように設定してみましょう。

 実際、こうした設定を行う方法はいくつか存在しますが、ここは「ザ・組み込み」ということで直接関連するファイルを操作・設定してみることにします(難しいことは何1つありませんのでご安心を!)。以下のディレクトリの“あるファイル”をしかるべき名前に変更するだけです。

  • /etc/rc3.d ←通常のマルチユーザーモード(テキストログイン)で起動している場合はこちら
  • /etc/rc5.d ←グラフィカルログインによるマルチユーザーモードで起動している場合はこちら

 ご自身の環境に該当するディレクトリで、以下のようにリンクファイルをリネームしてください(う〜んよく分からん! という方は両方のディレクトリに対して、以下の作業を適用してください)。

# cd /etc/rc3.d
# mv K35dhcpd S35dhcpd
# mv K20nfs S20nfs  
# cd ../rc5.d
# mv K35dhcpd S35dhcpd
# mv K20nfs S20nfs 

 どうです、簡単ですよね。このように、ファイル名の先頭の文字を“K”から“S”に変更するだけです。ちなみに、このディレクトリ(/etc/rc3.d、/etc/rc5.d)に存在する頭“S”ではじまるファイルがLinuxのブート時に実行されるサービスです。実は、Linuxの起動時に[ OK ]と表示されるものは、このディレクトリ直下にあるリンク先のファイルが順次実行されているのです(この辺りも併せて追いかけてみると結構面白いと思います)。


ブート時のコマンドをスクリプト化する

 ホスト側の設定はこれでよしとして、次に「ターゲット(AKI−H8/3069F)側ももう少し何とかならないのか(自動化できないのか)!」とお思いのことでしょう。

 というわけで、ここではブート時に入力する以下の2つのコマンドをスクリプト化してみたいと思います。

RedBoot> load -v /tftpboot/linux.bin  
RedBoot> exec -c "console=ttySC1,38400n81 nfsroot=192.168.0.1:/opt/aki3069f"

 まずは、ホスト側とターゲット側とを、USB−シリアル変換ケーブル、クロスのネットワークケーブルの両方で接続し、前回解説したようにH8ボードのDIPスイッチを設定して電源を入れてください(当然ホスト側ではcuコマンドまたは、minicomコマンドを実行してからRedbootの起動を確認します)。そして、Redbootが立ち上がったところで、以下のように「fconfig -i」を実行し、設定を行います。

RedBoot> fconfig -i
Initialize non-volatile configuration - continue (y/n)? y
Run script at boot: true ←「true」にする
Boot script:
Enter script, terminate with empty line
>> load -v /tftpboot/linux.bin ←コマンドを入力
>> exec -c "console=ttySC1,38400n81 nfsroot=192.168.0.1:/opt/aki3069f" ←コマンドを入力
>> ←[Enter]キーを入力
Boot script timeout (1000ms resolution): 5 ←時間設定
Use BOOTP for network configuration: true
Default server IP address: 192.168.0.1
GDB connection port: 9000
Force console for special debug messages: false
linux boot command:
Network debug at boot time: false
Default network device: dp83902a_eth0
Update RedBoot non-volatile configuration - continue (y/n)? y
... Erase from 0x00070000-0x00080000: .
... Program from 0x005e4000-0x005f4000 at 0x00070000: . 

 スクリプトを設定する個所(Enter script, terminate with empty line以下)で、上記に示した2つのコマンドを入力し、最後に[Enter]キーを押すことでスクリプト入力が完了します。その次に聞かれるスクリプトの実行時間(Boot script timeout)については適当な値を設定しておきます。ちなみに、筆者は「5」に設定しました。ある程度の時間を指定した方が、スクリプトの設定ミスがあった場合などに、[Ctrl]+[C]キーを入力してRedbootプロンプトに戻ることができるので便利です。

 さて、上記の設定が完了したら、ホスト側でDHCPとNFSのサービスが起動していることを再度確認して(確認方法はリスト1を参照)、ターゲット側の電源を入れ直すか、リセットボタンを押してみてください。

# /etc/init.d/dhcpd status
dhcpd (pid 17172) を実行中...
# /etc/init.d/nfs status
rpc.mountd (pid 17235) を実行中...
nfsd (pid 17227 17226 17225 17224 17223 17222 17221 17220) を実行中... 
リスト1 DHCPとNFSのサービスが起動しているか確認

 うまくuClinuxが起動すれば、ブート時に入力するコマンドのスクリプト化が成功していることになります。

       1|2|3|4 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.