体験!マイコンボードで組込みLinux

第7回 ネットワーク機能の構築

この記事を読むのに必要な時間:およそ 4.5 分

ネットワーク基本設定

ネットワークに対応するには,ネットワーク対応のハードウェアがなければなりません。SH7706LSRはネットワークに対応するハードウェアを有します。

Linuxカーネル再構築

Linuxでネットワークを使うためには,LinuxカーネルでTCP/IPミドルウェアを有効にして,対象となるネットワークコントローラがLinuxのデバイスドライバにおいてサポートされていなければなりません。LinuxカーネルでTCP/IPミドルウェアを有効にするにはカーネル再構築のメニューから図1のように「Networking Support」を選択し,出たメニューで図2のように「Networking Options」を選択,そして最低限図3のように「TCP/IP Networking」を選択します。

図1 カーネルコンフィギュレーションのトップメニューで「Networking Support」を選択

図1 カーネルコンフィギュレーションのトップメニューで「Networking Support」を選択

図2 ⁠Networking Options」に進む

図2 「Networking Options」に進む

図3 ⁠TCP/IP Networking」を選択

図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」を選択します。

図4 BusyBoxのコンフィギュレーションメニューから「Networking Utilities」を選択

図4 BusyBoxのコンフィギュレーションメニューから「Networking Utilities」を選択

図5 開いたメニュー項目から「dnsd」を選択

図5 開いたメニュー項目から「dnsd」を選択

図6 同じく「ifconfig」を選択

図6 同じく「ifconfig」を選択

図7 同様に「route」を選択

図7 同様に「route」を選択

コマンド設定

現在ではコンピュータにおけるネットワーク設定はDHCPサーバを利用して自動でネットワーク設定する方法が主流となっています。最新のBusyBoxでも,特別な設定を何もしなくともDHCPサーバが利用できるDHCPクライアントの設定になっています。以下のコマンドでDHCPサーバを利用して全自動でネットワーク設定することができます。

# udhcpc -q

もしインターネットに接続できる環境であれば,そのままインターネットに接続することができます。

Webサーバの構築

BusyBox設定

BusyBoxの標準設定では,そのままWebサーバが使えるようになっています。BusyBoxでWebサーバを利用するには図4のように「Networking Utilities」を選択し,図8のようにWebサーバを利用するための「httpd」を選択します。BusyBoxのhttpdはApacheのように重量級のフル装備ではありませんが,通常のWebページの閲覧やCGIスクリプトの実行にも対応しており,一般的なWebサーバの構築が可能となっています。

図8 ⁠Networking Utilities」の中でhttpdを選択

図8 「Networking Utilities」の中でhttpdを選択

HTML文書の公開

BusyBoxのhttpdは,/etc/httpd.confの設定により特定のIPやネットワークに対してアクセスを許可や拒否をする設定をしたり,特定のフォルダに対して特定のユーザーやパスワードのみを許可したり,特定の拡張子でCGIスクリプトのための特定のインタープリタを起動したりするように設定をすることが可能です。

HTML文書を公開する際は,任意のフォルダに公開したいHTML文書を置き,httpd起動時にHTML文書が置いてあるトップフォルダを指定します。たとえばHTML文書を/var/httpd以下に置いた場合は,以下のようにデーモンを起動します。

# httpd -h /var/httpd

/var/httpd/index.htmlがリスト1の内容だった場合,外部のブラウザを使って図9のように表示されます。

リスト1 index.htmlの例

<html><body bgcolor=peachpuff>
<div align=center><big>Main Page</big></div>
<hr size=2 width=100%>
<p>Linux 2.6.28.10 for SH7706LSR</p>
</body></html>

図9 リスト1のindex.htmlに外部からブラウザでアクセスしたところ

画像

CGIスクリプトの実行

ネットワーク対応の組込み機器はWebサーバ経由で機器を設定するケースが多く,Webサーバ経由で制御を行うにはCGIスクリプトの実行が不可欠となります。BusyBoxのhttpdはCGIスクリプトの実行にも対応しており,たとえばリスト2のプロクラムをコンパイルした実行ファイルを/var/httpd/cgi-bin/indexとして置いた場合は,外部のブラウザで /cgi-bin/indexのパスを指定すると図10のように表示されます。

リスト2 CGI用Cのソースコードの例

#include <stdio.h>

int main() {
	printf("Content-type: text/html\n\n");
	printf("<html><body bgcolor=peachpuff>\n");
	printf("<div align=center><big>Main Page</big></div>\n");
	printf("<hr size=2 width=100%>\n");
	printf("<p>Linux 2.6.28.10 for SH7706LSR</p>\n");
	printf("</body></html>\n");
	return 0;
}

図10 リスト2のCGIプログラムの実行例

図10 リスト2のCGIプログラムの実行例

著者プロフィール

みついわゆきお

1986年日立製作所入所,その3年後に自社ワークステーションでの開発業務をきっかけにBSDを経てLinux利用を始める。

1991年日立を退社し,その後,ボランティアでLinux関連ツールの整備と開発しながらWindows否定運動およびLinux普及運動を開始し,Linuxディストリビューション草創期にはPlamoLinuxのメンテナンスにもかかわる。

2001年ごろより非営利ベースでボードコンピュータの開発を開始し,やがて,無償によりハードとソフトを開発したH8マイコンボードの販売を秋月電子にて開始した。

現在,ボードコンピュータ用基本ソフトMES2.5や,SHプロセッサ向けLinuxパッチおよびTOPPERS/JSPパッチを無償で一般に提供しながら,ティーエーシーやエムイーシステムより原価率100%を目標(ただし,販売店の営業・販売費用や開発・製造の際の差損を除く)としたSuperHボードコンピュータを販売中。

また,現在でも頑固にMS社否定及びWindows撲滅運動に邁進中。

コメント

  • busyboxでのCGIスクリプトの実行について

    現在、温度・湿度をsh7706lsrのマイコンボードで測定し、そのデータをwebに表示をしようとしています。そのためにCGIを用いようと考えています。

    BusyBoxのhttpdはCGIスクリプトの実行にも対応しているとのことですが、上記の方法で外部のブラウザからCGIを表示しようとしましたができませんでした。ただのhtmlのファイルは表示できました。CGIを実行するには、上記の「ネットワークの設定」には書かれていないhttpdか何かの設定が必要なのでしょうか。
    ちなみにbusyboxは、バージョン1.17.1です。

    分かりにくい文章ですみません。回答お願いします。

    Commented : #1  関東職業能力開発大学校 電子情報技術科 菊地 (2012/10/26, 09:49)

コメントの記入