ネットワーク基本設定
ネットワークに対応するには、ネットワーク対応のハードウェアがなければなりません。SH7706LSRはネットワークに対応するハードウェアを有します。
Linuxカーネル再構築
Linuxでネットワークを使うためには、LinuxカーネルでTCP/IPミドルウェアを有効にして、対象となるネットワークコントローラがLinuxのデバイスドライバにおいてサポートされていなければなりません。LinuxカーネルでTCP/IPミドルウェアを有効にするにはカーネル再構築のメニューから図1のように「Networking Support」を選択し、出たメニューで図2のように「Networking Options」を選択、そして最低限図3のように「TCP/IP Networking」を選択します。
SH7706LSRに搭載されているネットワークコントローラは、ASIX社のAX88796BLFです。Linuxカーネルでは標準でASIX社のAX88796のデバイスドライバがサポートされていますが、注意しなければならないのは、AX88796とAX88796BLFは互換性がないので、ASIX社のAX88796のデバイスドライバを組み込んでも、SH7706LSRで正常に使うことができません。
ASIX社ではLinux2.6初期に対応したAX88796BLFのデバイスドライバを配布しており、筆者がLinux2.6.12.xで組み込んでみたところ、SH7706LSRで正常に動作することが確認できました。ただし、Linuxカーネルのネットワークドライバ関連の内部インターフェースは、Linux2.6.20以降あたりから仕様変更が加速してだんだん正常に動作しなくなり、Linux2.6.29以降ではコンパイルさえ通らなくなりました。
AX88796BLFはNE2000互換という謳い文句がありますが、厳密にはAX88796BLFとNE2000では完全に互換性がありません。ただ、ASIX社ではAX88796BLF開発時にLinuxカーネルを意識していますので、AX88796BLFとNE2000では完全に互換性がなくともLinuxのNE2000ドライバで使う部分は互換性を保つようにしました。
NE2000ドライバはLinuxカーネルにおいて重点的にメンテナンスされているデバイスドライバなので、最新のLinuxカーネルでもNE2000ドライバを使うことでAX88796BLFが安定して動作します。SH7706LSR向けのLinuxパッチでは、暗黙でNE2000ドライバが組み込まれることになります。
BusyBox設定
BusyBoxの標準設定ではそのままネットワークが使えるようになっています。BusyBoxで最低限のネットワークを利用するには図4のように「Networking Utilities」を選択し、図5のようにDNSネームサーバを利用するための「dnsd」、図6のようにネットワークデバイスを制御するための「ifconfig」、図7のようにルーティング設定をするための「route」を選択します。
コマンド設定
現在ではコンピュータにおけるネットワーク設定はDHCPサーバを利用して自動でネットワーク設定する方法が主流となっています。最新のBusyBoxでも、特別な設定を何もしなくともDHCPサーバが利用できるDHCPクライアントの設定になっています。以下のコマンドでDHCPサーバを利用して全自動でネットワーク設定することができます。
もしインターネットに接続できる環境であれば、そのままインターネットに接続することができます。
Webサーバの構築
BusyBox設定
BusyBoxの標準設定では、そのままWebサーバが使えるようになっています。BusyBoxでWebサーバを利用するには図4のように「Networking Utilities」を選択し、図8のようにWebサーバを利用するための「httpd」を選択します。BusyBoxのhttpdはApacheのように重量級のフル装備ではありませんが、通常のWebページの閲覧やCGIスクリプトの実行にも対応しており、一般的なWebサーバの構築が可能となっています。
HTML文書の公開
BusyBoxのhttpdは、/etc/httpd.confの設定により特定のIPやネットワークに対してアクセスを許可や拒否をする設定をしたり、特定のフォルダに対して特定のユーザーやパスワードのみを許可したり、特定の拡張子でCGIスクリプトのための特定のインタープリタを起動したりするように設定をすることが可能です。
HTML文書を公開する際は、任意のフォルダに公開したいHTML文書を置き、httpd起動時にHTML文書が置いてあるトップフォルダを指定します。たとえばHTML文書を/var/httpd以下に置いた場合は、以下のようにデーモンを起動します。
/var/httpd/index.htmlがリスト1の内容だった場合、外部のブラウザを使って図9のように表示されます。
CGIスクリプトの実行
ネットワーク対応の組込み機器はWebサーバ経由で機器を設定するケースが多く、Webサーバ経由で制御を行うにはCGIスクリプトの実行が不可欠となります。BusyBoxのhttpdはCGIスクリプトの実行にも対応しており、たとえばリスト2のプロクラムをコンパイルした実行ファイルを/var/httpd/cgi-bin/indexとして置いた場合は、外部のブラウザで /cgi-bin/indexのパスを指定すると図10のように表示されます。
ネットワーク関連デーモンの設定
一般的にhttpd以外のネットワーク関連のデーモンは、inetdのようなネットワークデーモン経由で起動するのが慣例となっています。BusyBoxの標準設定ではそのままinetdが使えるようになっています。BusyBoxでinetdを利用するには図4のように「Networking Utilities」を選択し、図11のようにinetdを利用するための「inetd」を選択します。
inetdの設定は /etc/inetd.conf で行い、設定内容は通常のinetdと同じように設定をします。UDPとTCPのポート番号を番号ではなくプロトコル名で指定する場合は、あらかじめ、/etc/services にUDPとTCPのポート番号とプロトコル名の対応を記述しておく必要がありますが、適当なPCLinuxの設定ファイルをそのまま持ってくるのがいいでしょう。
inetdの起動は以下のように行います。
FTPサーバ
最近までのBusyBoxはFTPサーバの機能がないので、それまでは別途FTPサーバをインストールしなければなりませんでした。最新のBusyBoxの標準設定では、そのままFTPサーバが使えるようになっています。BusyBoxでFTPサーバを利用するには図4のように「Networking Utilities」を選択し、図12のようにFTPサーバを利用するための「ftpd」を選択します。
もし、公開専用FTPサーバでアップロードが不要ならば、「Enable upload commands」のチェックを外します。BusyBoxのftpdは単独で動作するデーモンになっておらず、必ずinetdのようなネットワークデーモンを通してしか使うことができないようになっています。
BusyBoxのftpd自身は、特定のIPやネットワークに対してアクセスを許可や拒否をする設定をしたり、特定のフォルダに対して特定のユーザやパスワードのみを許可したりする設定機能は有してしませんので、そのような機能はinetdのようなネットワークデーモンに委任します。
FTPサーバの公開では任意のフォルダに公開したいファイルを置き、ftpd起動時にFTPサーバのファイルが置いてあるトップフォルダを指定します。たとえば、FTPサーバを/var/ftp以下に置いた場合は、inetd.confに以下のような記述を加えます。
ファイルアップロードを許可する場合は、以下のようにinetd.confの記述をします。
ファイルアップロードを許可したFTPサーバが立ち上がっていれば、SH7706LSRボードとPCの間で自由にファイルのやりとりが可能になるので便利です。
TELNETサーバ
BusyBoxの標準設定では、TELNETサーバがそのまま使えるようになっています。BusyBoxでTELNETサーバを利用するには図4のように「Networking Utilities」を選択し、図13のようにTELNETサーバを利用するための「telnetd」を選択します。BusyBoxのtelnetdは、スタンドアロンとネットワークデーモン経由のいずれでも起動をすることができます。
SH7706LSRボードの標準でのコマンド操作はシリアルポート経由で行うようになっていますが、SH7706プロセッサのシリアルポートを全て外部機器通信用に使いたい場合や、複数の端末よりLinuxのコマンド操作を行いたい場合は、TELNETサーバからLinuxのコマンド操作を行うことができるので、そういった場合にTELNETサーバは便利です。
inetd.conf でtelnetdの記述は以下のようにします。
NTPクライアント
組込みボードでデータ収集などを行う場合は時刻などのタイムスタンプとセットで行うことが多いですが、市販の時計などを含めて時計用の水晶のみではたんだんと時間がずれてきます。市販の時計では、内蔵水晶のみでの時間のずれを補正するための電波時計が普及してきています。組込みボードでも正確な時間は長波により電波時計の無線受信で補正をしなればなりませんが、インターネットが接続できる状況ならば、電波時計を使わなくても公共的なNTPサーバに接続すれば時間の補正が可能となります。
ntpclientコマンド
BusyBoxでのNTPクライアントの位置づけは「External Tiny Utilities」に該当しており、外部から持ってきて組込むようになっており、BusyBoxのサイトからリンクがあります。NTPクライアントはBusyBoxの内部には含まれていませんが、NTPクライアントはBusyBoxに問題なく組み込めるようにしてあるので、NTPクライアントはBusyBoxでは半サポートという位置つけとなっています。
NTPクライアントであるntpclientは以下のURLでダウンロードができます。
- ntpclient
- URL:http://doolittle.icarus.com/ntpclient/
BusyBoxへの組込み
BusyBoxへのソースコード組込みに関しては前回までに解説してありますので、詳細はそちらを参照してください。ここではntpclient特有の内容についてのみ解説します。
ntpclientのアーカイブを展開すると雑多なファイルが展開されますが、BusyBoxで必要なファイルは以下の3つのみです。
- ntpclient.c
- ntpclient.h
- phaselock.c
展開されたソースコードは単独で動作することを前提としたコードなので、BusyBoxに組み込むには若干の変更が必要となります。オリジナルのntpclient.cに対してリスト3とリスト4の変更を加えます。
リスト3の37行目ではBusyBoxに関する組込みとは直接関係はないですが、時刻設定と取得のLinuxシステムコールで新しい方法ではなぜかBusyBoxではコンパイルエラーになるので古い方法での時刻設定と取得のLinuxシステムコールを指定します。リスト3の47行目では、BusyBoxのヘッダを呼び出すように変更します。
リスト4の部分はオリジナルではmain関数でしたが、BusyBoxのコマンドとして組み込めるようにリスト4のように変更します。
NTPサーバへの接続
国内での公共的なNTPサーバは多数ありますが、代表的なNTPサイトは以下となります。
- (1)独立行政法人情報通信研究機構(NICT)
- 独立行政法人情報通信研究機構は日本標準時を供給しており、サーバ名は以下となります。
ntp.nict.jp
- (2)インターネットマルチフィード(MFEED)
- インターネットマルチフィードはJPNAPを通じて多数のISPのネットワークに隣接しており、サーバ名は以下となります。
ntp.jst.mfeed.ad.jp
サービスは無償ですが、機器ベンダが各種機器についてNTPサーバをあらかじめデフォルトにて設定される場合は、ntp-info@mfeed.ad.jp宛までご一報くださいとのことです。
- (3)Ring Server Project
- 歴史的経緯により福岡大学に集中した負荷を回避するために特定のサーバに負荷がかからないように、Ring Server Project参加組織のサーバで分散してサービスを提供する仕組みになっています。以下のサーバ名を指定することによりラウンドロビンにより特定サーバに負荷をかけないようになっています。
ntp.ring.gr.jp
- (4)NTP POOL PROJECT
- 全世界的なNTPサーバをプールしたプロジェクトで参加サイトは増える傾向にあります。複数のサイトががラウンドロビンで参照され、国内サーバの参照は以下となります。
jp.pool.ntp.org
この他にも大学などでNTPサーバのサービスを提供しているサイトが多数存在します。
ntpclientを組み込んだBusyBoxでNTPサーバによる時刻合わせをするには例えば、以下のようにします。
次回は
次回はSH7706LSRのI/O制御をするWebサーバの構築について解説します。