37
ユビキタスコンピューティング用 ソフトウェアプラットフォームとしての Unix OS の検討と実践 株式会社シーワーク

ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

ユビキタスコンピューティング用

ソフトウェアプラットフォームとしての

Unix 系 OS の検討と実践

株式会社シーワーク

Page 2: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

1 概要................................................................................................................................................ 3

2 設計目標........................................................................................................................................ 3

3 OS の選定...................................................................................................................................... 4

4 RTLinux の概要 ............................................................................................................................ 5

5 ディストリビューションの選定................................................................................................ 6

6 CFLinux の特徴 ............................................................................................................................ 7

(1) ファイルシステム.................................................................................................................... 7

(2) RAM ディスク上で動作 ......................................................................................................... 7

(3) RTLinux ..................................................................................................................................... 7

(4) ユーザプログラムへのアクセス............................................................................................ 8

(5) 基本部分と拡張部分に分離.................................................................................................... 8

7 開発環境........................................................................................................................................ 9

8 Plamo Linuxのインストール .................................................................................................... 12

9 CF への書き込み方法................................................................................................................ 12

(1) 書き込み準備作業.................................................................................................................. 12

(2) 基本的なイメージの作成方法.............................................................................................. 16

(3) プログラム作成時の注意...................................................................................................... 17

(4) RTLinux のリアルタイムタスク作成時の注意 .................................................................. 17

(5) プログラムの設置.................................................................................................................. 17

10 拡張部分の設定方法.............................................................................................................. 18

(1) sysmgr ...................................................................................................................................... 19

(2) Web カメラ ............................................................................................................................. 22

(3) usbserial ................................................................................................................................... 28

(4) 有線 LAN ................................................................................................................................ 29

(5) 無線 LAN ................................................................................................................................ 30

11 拡張・変更の手引き.............................................................................................................. 32

(1) カーネルのカスタマイズ...................................................................................................... 32

(2) 拡張部分の作成方法.............................................................................................................. 34

(3) システム起動スクリプト(rc*) .............................................................................................. 35

12 今後の課題.............................................................................................................................. 36

13 参考文献、URL...................................................................................................................... 37

Page 3: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

1 概要

ユビキタスコンピューティングの実現プラットフォームとして、UNIX 系 OS のカーネル

(Linux)を使用した AT 互換組み込みボード用 OS・CFLinux の開発を行った。この報告書

では以下のことについて報告する。

・ 組み込み向けの UNIX 系 OS の検討

・ 組み込みプログラムの設定方法

・ コンパクトフラッシュ(以下 CF)への構築方法(添付のシェルスクリプトの使い方)

・ カスタマイズ方法

CFLinux の最大の特徴は CF での動作に特化したシステムとしたところである。CF で動

かすことを意識して開発したが、IDE 互換ドライブとして使用可能なデバイスであれば、

どのようなデバイスでも起動可能と思われる。

この報告書では、UNIX の基本的な操作と概念があることを前提とする。これらの知識の

無い読者は適当な入門書を読むことを薦める。

さらに、このシステムを改良する場合、make、shスクリプト、Linuxのカーネル構築方

法の知識を必要とする。boot について知識があると尚良い。

今回作成したスクリプト及び makefile は GPLに基づき利用・再配布可能である。

インストールのみ行いたい読者は「開発環境」、「Plamo Linuxのインストール」、「CF

への書き込み方法」を参照すること、アプリケーションの追加、デバイスの追加を行いた

い場合は「拡張部分の設定方法」、「拡張・変更の手引き」を読むこと。 2 設計目標

設計する上で以下のことを目標とした。特にリアルタイム制御を行えることに重点が置

かれている。

・ CF 上から起動すること

・ 小容量の CF でも動作可能であること(4MB あれば十分動作)

・ リアルタイム制御に対応すること

・ USBカメラ・無線 LAN などの多様な外部デバイスが使えること

・ 簡単な Web サーバとして動作すること

・ 接点入力などのハードウェアの開発が容易に行えること

・ 安価でかつ入手しやすいこと

・ x86 系のプロセッサで動作すること(他のプロセッサで動作することが望ましい)

Page 4: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

3 OS の選定

OS を選定する上で、我々の経験や入手しやすさ(情報の入手性も含む)を考慮した上で

Linux、FreeBSD、NetBSD を候補とした。他の UNIX 系 OS(Solaris,HP-UX,UnixWare)は

経験がなかったり、情報が入手しにくいことなどもあり見送った。

これらの候補のうち、決定的な差となったのがリアルタイム制御と多様な外部デバイス

への対応である。リアルタイム制御は Linuxの場合 RTLinux があるが、FreeBSDでは存在

しなかったり、NetBSDでは存在しても有償だったりと Linux に優位性がある。

多彩なデバイスへの対応ということでは、今回 USBカメラへの対応を行ったが Linux の対

応がもっとも良いものであった。他のデバイスにおいても Linuxがもっとも対応が良い。

今回は Linuxの対応を行ったが、Linux のライセンスは GPLであるため商用利用するに

あたっては考慮しなくてはならない。自分でデバイスドライバを書けるような場合は制限

の緩い BSDライセンスが適用される FreeBSDや NetBSD を考慮するべきである。

Page 5: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

4 RTLinuxの概要 CFLinux ではリアルタイム制御が必要な場合は RTLinux を使用することが出来る。

RTLinux は Victor Yodaikenらによって開発され、現在は FSMLab 社で開発されている商用

のソフトである。元々は Free だったので Free 版も存在し、今回はそれを適用した。

RTLinux は最新版のカーネルをサポートしていない場合があるので新しい機能を使う場合

注意が必要である。 RTLinux 以外にも幾つか Linuxでリアルタイム実現するシステムは存在するが、RTLinux

が一般的である。 RTLinux は通常の Linuxにパッチを当ててリアルタイム機能を提供する。

リアルタイムカーネル上にリアルタイムタスクと呼ばれる一種のドライバと実際の Linux

を配する。リアルタイムカーネル上ではリアルタイムタスクが最も優先順位の高いプロセ

スとして動作するので、リアルタイムタスクのみがリアルタイム制御を行うことができる。

そこで、クリティカルな部分をリアルタイムタスクとして実装し、他の部分(ネットワー

ク通信部分など)は通常の Linuxプログラムとして作成する。リアルタイムタスクと通常

の Linuxとの通信は専用の FIFO を通して行われる。

リアルタイムタスク Linuxカーネル

Linuxプロセス

図 1 RTLinuxの概要

リアルタイムカーネル

FIFO

Page 6: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

5 ディストリビューションの選定

Linuxのディストリビューションは、現在主流である RedHat 社が開発した(RedHat を使

用した)RedHat Linux系や他に Debian系などがある。これらのディストリビューションは

PC などにインストールしてワークステーションやサーバなどに使用されることを前提とし

ており、ユビキタスコンピューティングのような組み込みを考慮した構成になっていない。

ユビキタスコンピューティング用の Linuxのシステムをスクラッチで開発することも可能

だが、既存のディストリビューションの不要な部分をカスタマイズすること事の方が早い

ので既存のディストリビューションを利用することにした。 RedHat Linuxや Debianはブートシーケンスやシステムの構成が複雑なため、カスタマイ

ズのしやすさを考慮してシンプルなディストリビューションの Slackware3.Xから派生した

PlamoLinux2.2.5(以下 PlamoLinux 参考文献・URL①)をベースにカスタマイズを行った。 PlamoLinuxは日本人が開発しているので Web や雑誌から日本語での情報を入手しやすい。

Page 7: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

6 CFLinuxの特徴

ここでは CFLinux の特徴を紹介する。

(1) ファイルシステム

一般的なディストリビューションでは ext2 や ext3 をファイルシステムとして採用されて

いるが、CFLinux ではカーネル上のメモリ消費量の少ない minix fs を採用している。

(2) RAM ディスク上で動作

圧縮されたイメージを RAM ディスク上で展開し、それを実行する。

このような構成としておくことで小容量の CF や ROM ディスクからの起動も可能となる。 RAM ディスクで動作するために、ブートシーケンスは通常のものとは少し違う。起動は、

CF 上に設定されている lilo からカーネルイメージ bzImage を起動する。(ここまでは普通

の UNIX と同じ)

カーネルを起動した後は普通の UNIX と同じように init が動き出すが、そのファイルを読

み出す先として、圧縮された root イメージを RAM ディスクに展開して通常の/ディレクト

リとして RAM ディスクをマウントする。(図 2)

図 2 CFと RAMディスクの分担

(3) RTLinux

組み込み向けシステムではリアルタイム制御は欠かすことは出来ない。幾つか Linux で

使用可能なリアルタイムシステムは存在するが、今回は Linuxでは一般的に使われている

RTLinux(v3.1)を採用している。RTLinux の機能を使ったプログラム開発を行う場合カーネ

ルは 2.4.18 にアップグレードしなくてはならない。また、PCMCIA で CF を認識できるよ

う PCMCIA-cs をセットアップする必要がある。(pcmcia-cs-3.1.34.tar.gz を使用してい

る。)

CF 上のファイル

bzImage lilo.conf /boot /prog/UserProgram.sh /conf/…

RAM ディスク /usr /lib /var /etc… /flash

Page 8: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(4) ユーザプログラムへのアクセス

起動されたシステムの核の部分は RAM ディスク上にある。ユーザのプログラムの開発

のしやすさを考えると、RAM ディスク上へユーザのプログラムを置くことになると逐一イ

メージを作成しなくてはならない。CF 上からプログラムを実行することが出来ることが必

要である。特定のディレクトリにシェルスクリプトを置いておくことで起動時に自動的に

実行される。(図 2 の矢印部分)

ファイルシステムの頑丈である必要であるが CF にファイルを蓄積していくような使い方

も可能である。

(5) 基本部分と拡張部分に分離

CFLinux は、基本部分と拡張部分に分けて構築を行っている。カーネルなどの OS として

成立するのに必要なファイルの部分が基本部分で、基本部分の Add-inとして拡張機能とし

て構築を行う。

拡張機能として現在以下の機能を用意している。

① 無線 LAN によるネットワーク接続

② 有線 LAN によるネットワーク接続

③ USB カメラ(2 系統)

④ USB シリアルアダプタ

⑤ 有線 LAN、無線 LANIP アドレス変更 CGI

多くの UNIX 系 OS では EtherNet によるネットワーク接続は基本機能としているが、組

み込みをメインターゲットとしているため、あえて拡張機能としている。 …

図 3 CFLinuxの構成イメージ

基本部分

拡張

有線

LAN

拡張

カメラ

httpd

Page 9: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

7 開発環境

組み込みプログラムを開発するうえで、表 1 の環境は必須である。拡張を行うには適宜別

途機材を用意する。(表 2)

表 1 基本開発環境

機材 備考 PlamoLinuxが動作する i80386SX 以上

の CPU を搭載する AT 互換パソコン

(以下開発機)

OS のイメージを CF に書き込むため、

CF をマウント出来る PCMCIA スロッ

トを有することが必須。一部の USB

に接続する CF スロットは SCSI 接続

の HDD として Linux は認識するよう

である。

コンパクトフラッシュ 4MB 以上のもの。ターゲットボード

で動作する OS イメージを書き込む

ターゲットボード 株式会社ピノー(参考文献・URL③)

の PNCGLE シリーズを想定してい

る。AT 互換のボード(80386SX以

上)であれば多少の変更で動作すると

思われる。

表 2 拡張開発環境

機材 備考

CREATIVE Video BLASTER USB接続の WebCam

メルコ WLI-PCM-L11G 無線 LAN PCMCIA カード

I・O データ USB-RSA2 USB接続のシリアル変換装置

Page 10: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

図 4 に開発のイメージを示す。AT 互換のパソコンで、ターゲットボードで動作するイ

メージを作成し、それを CF へ書き込みターゲットボードブートさせ開発を進めた。 ①CF へイメージ・プログラム書き込み 開発機

③フィードバック ②ボードへ搭載・起動・テスト ターゲットボード

図 4 開発のイメージ

CF

Page 11: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

拡張部分には以下の機材を使用した。

機材 備考 PlamoLinuxが動作する i80386SX 以上

の CPU を搭載する AT 互換パソコン

(以下開発機)

OS のイメージを CF に書き込むため、

CF をマウント出来る PCMCIA スロッ

トを有することが必須。一部の USB

に接続する CF スロットは SCSI 接続

の HDD として Linux は認識するよう

である。

コンパクトフラッシュ 4MB 以上のもの。ターゲットボード

で動作する OS イメージを書き込む

ターゲットボード 株式会社ピノー(参考文献・URL③)

の PNCGLE シリーズを想定してい

る。AT 互換のボード(80386SX以

上)であれば多少の変更で動作すると

思われる。

Page 12: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

8 Plamo Linuxのインストール

以降の作業において開発機に PlamoLinuxがインストールされていることが前提となる。

参考文献・URL①のリンク先や Ringサーバなどから PlamoLinux をダウンロードしてき

て、PC にインストールする。

インストール方法は添付 CD の/AT/docs/euc/HTML/plamo-HOWTO.html や参考文献・URL

の④を参考のこと。

以下のプログラムは標準のインストールでは入らないが、インストールや CFLinux 起動

に必要なのでインストールしておくこと

・ gmake

・ pcmcia

・ ash

・ gcc CF に書き込むために PCMCIA(pcmcia-cs-3.1.34.tar.gz)を認識できるように環境に合わ

せ設定を行う。 PlamoLinuxには 3.1.25 が標準で添付されるが必要に応じアップデートすること。 9 CF への書き込み方法

CF 作成用の Makefile やスクリプトを使っての CF の作成方法を述べる。

既に開発機に PlamoLinuxがインストールされ PCMCIA スロットから書き込みが出来るこ

とを前提とする。作業は全て root で行うこととする。

(1) 書き込み準備作業

実際の CF の書き込みを行う前に次の作業が必要となる。

① 配布される CFLinux.tar.gzを展開 #tar xvfz CFLinux.tar.gz

展開が終わると CFLinu というディレクトリが作成される。(表 3)

このディレクトリのことをインストールディレクトリと呼ぶ。

Page 13: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

② CFLinux生成スクリプトディレクトリファイル一覧

展開された結果として以下の表のファイルが作成される。

表 3 CFLinuのインストールディレクトリファイル一覧

ファイル名・ディレクトリ名 概要

Makefile CFLinux作成 Makefile

cleanup.sh 作業ディレクトリの Clear(Makefile の補助スクリプト)

flash.sh CF に書き込みとルートイメージの作成スクリプト

setup.sh 基本的な設定とスクリプト

net.sh ネットワークの設定スクリプト

compact.net 有線 LANの定義ファイル

fstab fstab

group group

termcap vt100 のみの設定

hosts localhostのみの hosts ファイル

bzImage カーネルイメージ

inetd.conf ftp,telnet を適用するときに inetd.conf

lilo.conf CF を書き込むときのための lilo.conf

login.defs コンソールから login するときの条件

nsswitch.conf パスワードなどを、何を使うかの設定ファイル

passwd 擬似的な passwd ファイル

pwoff 自動電源オフ

rc.6 システム起動スクリプト

rc.M システム起動スクリプト

rc.S システム起動スクリプト

rc.inet2 システム起動スクリプト(ネット用)

rc.local システム起動スクリプト

rtl.o

rtl_fifo.o

rtl_posixio.o

rtl_sched.o

rtl_time.o

RTLinuxのコアシステムのバイナリ

cu0/ USB Serialのアプリケーション

pcmcia0/ PCMCIA の設定ファイル

sysmgr0/ SYSMGR アプリケーション、Web から IP アドレスを更

usbserial0/ USB Serialドライバの設定

wavelan0/ 無線 LANの設定

webcam0/ USBカメラの設定

Page 14: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

③ イメージ作成作業ディレクトリとして/mnt が使用されるので、それを作成する。また、

CF をマウントするディレクトリ/flashの作成を行う。

④ ターゲットボードで CF が IDE ディスクとして認識されるドライブ名を調べて、それ

を lilo.conf の boot 行と disk 行に設定する。ドライブ名は製品によって変わるので一概

には言えない。 # LILO configuration file # generated by 'liloconfig' # # Start LILO global section boot = /dev/hde install=/boot/boot.b map=/boot/map vga = normal # force sane state disk=/dev/hde bios=0x80 linear ramdisk=8192 append= "apm=on" # Linux bootable partition config begins image = /bzImage label = compact # root = /dev/ram1 initrd=root.img.gz read-only # Non-UMSDOS filesystems should be mounted read-only for checking

Page 15: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

⑤ ネットワークの設定(使用する場合のみ) LAN に接続するときインストールディレクトリの compact.net ファイルにネットワークの設

定を行う必要がある。shスクリプトで解釈されるの=の前後に空白をいれないこと

以下の例では IP アドレス 192.168.0.120、NETMASK255.255.255.0、NETWORK アドレス

192.168.0.0、ブロードキャストアドレス 192.168.0.255、GATEWAY は 192.168.0.3 である。 IPADDR="192.168.0.120" NETMASK="255.255.255.0" NETWORK="192.168.0.0" BROADCAST="192.168.0.255" GATEWAY="192.168.0.3"

⑥ 作業ディレクトリや CF のマウント先を変更したい場合は Makefile の以下の部分を変

更する。

INSTD=/mnt #作業ディレクトリ FLASHD=/flash #CF のマウント先 NETFILE=compact.net #有線 LAN の設定ファイル FLASHDEV=/dev/hde #CF のデバイスファイル名

Page 16: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(2) 基本的なイメージの作成方法

インストールディレクトリで make コマンドを使って CFLinux の構築を行う。

以下に make のコマンドを記す。実際にはシェルスクリプトが呼び出されそれにしたがって

構築が行われる。

先にも説明した通り基本部分と拡張部分に分かれているので、それに対応した操作が必

要となる。ここでは基本部分について述べ、拡張部分については 10 拡張部分の設定方法で

述べる。

・ 基本部分

基本部分を CF に書き込むためには #make clean setup flash

と行う。これを実行した場合にはプログラムを実行する環境しかないので LAN 接続はでき

ない。拡張を設定しなければならない。

表 4 基本部分の makeコマンド

make のコマンド 動作 clean 作業ディレクトリの全消し

setup 作業ディレクトリに最小限のシステムに必要なファイ

ルをコピー

flash CF にイメージを書き込む

Page 17: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(3) プログラム作成時の注意

プログラムを作成する場合、PlamoLinuxの開発環境を必要に応じてインストールする。 RTLinux を使う場合、PlamoLinux から gcc2.95.3 をインストールし C コンパイラを使える状

態にしなくては成らない。 gcc3 以降については確認していない。また、C++や ObjectiveC の動作実績も無い。 RTLinux のサンプルはパッケージのサンプルを参考にするか、以下のページに簡単なサン

プルが存在する。 http://www.fsmlabs.co.jp/website/documents/example_frame1.htm

(4) RTLinux のリアルタイムタスク作成時の注意

コンパイルオプションとして以下のように指定する。CFLAGS で指定されるフラグ類を

foo_mod に与えることが重要である。

制御用の通常 Linuxプログラムは、CFLAGS で指定されるようなフラグを指定する必要は

無い。 INCLUDE= -I/foo/rtlinux /include/compat -I/foo/rtlinux/include/posix → -I/home/c-box/rtlinux/rtlinux-3.1/include/ CFLAGS = -Wall -O2 -D__RTL__ -D__KERNEL__ -DMODULE foo_mod.o: foo_mod.c gcc ${INCLUDE} ${CFLAGS} -c foo_mod.c -o foo_mod.o

→は次の行に続く

(5) プログラムの設置

/flashにイメージの書き込まれた CF が存在するとすると、開発機でこの CF を mount する

と/flash/progというディレクトリが存在するはずである。ここに開発したプログラムと、自

動起動スクリプトファイルを置く。

たとえば foo というプログラムがあった場合、自動起動スクリプト foo.shは #mount –t minix /dev/hde /flash #cd /flash/prog #cat foo.sh #!/bin/sh foo&

のように記述する。(他に foo で何か設定が必要な場合はそれも記述する。)

動的に設定が必要となる場合は/flash/conf ディレクトリに設定用のシェルスクリプトを置く。

Page 18: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

10 拡張部分の設定方法

拡張部分を設定するには PlamoLinuxに付属していないプログラムやライブラリを必要とす

る場合がある。

別途開発機にプログラムをインストールする必要がある。拡張で有線 LAN または無線

LAN を使用する場合デフォルトでは以下のとおり、有線 LAN と無線 LAN は別ネットワー

クにつながる場合同居可能である。

有線 LAN IP アドレス 192.168.0.120

ネットマスク 255.255.255.0

ネットワークアドレス 192.168.0.0 BROADCAST 192.168.0.255 GATEWAY 192.168.0.3

無線 LAN IP アドレス 192.168.0.93

ネットマスク 255.255.255.0

ネットワークアドレス 192.168.0.0 BROADCAST 192.168.0.255 GATEWAY 192.168.0.3

Page 19: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(1) sysmgr

有線 LAN・無線 LAN の IP アドレス情報などの簡単な設定を Web で行える。

通常は http://192.168.0.120/でアクセス可能である。

図 5 Sysmgr トップ画面

図 6 認証用パスワードの設定・変更

図 7 有線 LANの設定・変更

Page 20: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

図 8 無線 LANの IP アドレスの設定・変更

図 9 無線 LANの設定の変更

Page 21: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

httpd は mini_httpd を採用しており、シェルスクリプト httpd.shを変更することで設定を変

更可能である。mini_httpd の詳細は、mini_httpd のドキュメントを参考にすること。 /flash/prog以下に通常配置される。ファイル一覧は表 5 sysmgr ファイル一覧 に示す。 /flash/prog/sysmgr/cgi-bin の*.cgi が CGI プログラムである。実態は shスクリプトである。

基本的にインストールディレクトリの sysmgr0/に設定ファイルは置かれる。

表 5 sysmgr ファイル一覧

ディレクトリ ファイル名 詳細

httpd.sh httpd 起動スクリプト

mini_httpd httpd プログラム

/flash/prog/

sysmgr/ ディレクトリ

index.html sysmgr の入り口となる htmlファイル

auth.html パスワード変更(初期値はパスワード無し)

ipchg.html IP アドレスの変更

/flash/prog/sysmgr

cgi-bin/ ディレクトリ

auth.cgi パスワードの変更プログラム

ipchg.cgi 有線 LAN の IP アドレス変更プログラム

wlcnf.cgi 無線 LAN の IP アドレス変更プログラム

wlnetform.cgi 無線 LAN の IP アドレス変更の Form 表示

ipchgform.cgi 有線 LAN の IP アドレス変更の Form 表示

wlchgform.cgi 無線 LAN のチャンネルと Mbps 変更 Form 表示

wlnet.cgi 無線 LAN のチャンネルと Mbps 変更

uncgi GET を解析する補助プログラム

/flash/prog/sysmgr/cgi-bin

htpasswd パスワード設定プログラム

Page 22: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(2) Web カメラ

Web カメラ(USB接続のカメラ)のうち、OV511 シリーズを搭載するカメラをサポートし

ている。CREATIVE Media の Video BLASTER WEBCAM PLUS のみ動作を確認している。

カーネルで

・ USBドライバ(UHCI,OHCI いずれか)

・ OV511 ドライバ

・ Video For Linux

が設定されていることを前提とする。(USB2.0 については未確認である。)

また、開発機の PlamoLinuxに libgr と freetype がインストールされている必要がある。

インストールディレクトリの webcam0/にインストールに必要なファイルは基本的に置かれ

る。

今回は 3 系当の WebCamプログラムを搭載している。 A) Web ブラウザでリアルタイム表示 B) 静止画として Web ブラウザで閲覧 C) CF に蓄積しそれを Web ブラウザで閲覧

同時に実現するのは未確認。

Page 23: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

① Web ブラウザでリアルタイム表示 camserv(参考文献・URL⑩)を使って実現している。

たとえば、有線 LAN 上の 192.168.0.120 に CFLinux がインストールされているとすると、

ブラウザから 192.168.0.120:8080 に接続をすると、 camservie.cgi camservwave.cgi camserv.cgi camserviewave.cgi

の4つのファイルが見えるはずである。camserv.cgi(Netscape,mozilla),camservie.cgi(IE)を選

ぶと動画で被写体が見えるはずである。camservwave.cgi(Netscape,mozilla), camserviewave.cgi(IE)は無線 LAN の場合のスクリプトである。Netscape/Mozilla ではスムー

ズに表示されるが、IE は JavaScript を使ってリロードすることで実現している。 make からインストールを行う場合は #cd CFLinux #make camserver

で行う。他の無線 LAN などとあわせて使いたい場合は適宜コマンドを組み合わせてインス

トールする。表 6 は camserver 関連の make のコマンドである。表 7 はインストールされ

たファイル一覧を示す。

表 6 camserver 使用時の makeコマンド

make のコマンド 動作 camserver camserver を CF に書き込む

camserverlib Web ブラウザでリアルタイムに表示するプログラムの

ライブラリ

camserverprog プログラムの起動スクリプトをコピー

Page 24: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

表 7 camservのファイル一覧

ディレクトリ ファイル名 詳細

camserv camserv プログラム本体

camserv.cfg Config ファイル

webcam.sh httpd の起動と camserv 起動スクリプト

/flash/prog/

userprog ディレクトリ

camserv.cgi Netscape,Mozilla で閲覧するときの CGI

camservwave.cgi Netscape,Mozilla で閲覧するときの CGI(無線

LAN)

camservie.cgi IEで閲覧するときの CGI

/flash/ prog/userprog

camserviewave.cgi IEで閲覧するときの CGI(無線 LAN)

Page 25: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

② w3Cam w3cam(参考文献・URL⑪)は、「静止画として Web ブラウザで閲覧」(w3cam)、「CF に蓄

積しそれを Web ブラウザで閲覧」(vidcat)を提供する。 CF に構築するときには表 8 のコマンドで実現できる。基本的にライブラリは同じものを使

用する。

表 8 w3cam使用時の makeコマンド

make のコマンド 動作 webcam 静止画として Web ブラウザで閲覧するプログラムを CF

に書き込む

vidcat CF に蓄積しそれを Web ブラウザで閲覧するプログラム

を CF に書き込む

webcamlib Web カメラを動かすため tiff,JPEG,PNGを扱うライブラ

リをコピー。webcamcgi,vidcatcgi いずれを使うにしろ必

須 webcamcgi Web カメラで撮影した画像を静止画として Web ブラウ

ザに表示

vidcatcgi Web カメラで撮影した画像を CF に JPEG(Default)とし

て蓄積

Page 26: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

・ 静止画として Web ブラウザで閲覧

静止画を閲覧する場合、有線 LAN 上の 192.168.0.120 に CFLinux がインストールされてい

るとすると、ブラウザから 192.168.0.120:8080 に接続し w3cam.html を開くと閲覧できる。

デフォルトは JPEG で出力されるが、w3cam.html でパラメータを設定することで PNG,PPM

を出力することが可能である。(詳しくは w3camのドキュメント参照) CF に書き込むときには、make で表 8 に示した webcam コマンドを指定することで CF に作

成される。具体的には #cd CFLinux #make webcam

とする。他の拡張もあわせて実現するには webcamlib と webcamcgi を適宜コマンドとして

与える。 CF 上に書き込まれるファイルの一覧は表 9 に示す。

表 9 w3camのファイル一覧

ディレクトリ ファイル名 詳細

w3cam.sh httpd の起動 /flash/prog/

userprog ディレクトリ

w3cam.html この htmlファイルを開くことで静止画を取得

できる。

/flash/ prog/userprog

cgi-bin/ webcam.cgiが存在するディレクトリ

/flash/ prog/userprog/cgi-bin w3cam.cgi w3cam.cgi プログラム、HTTP リクエスト

がある度に Web カメラで撮影した画像

を静止画としてリプライする。

Page 27: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

・ CF に静止画を蓄積しそれを Web ブラウザで閲覧 CF に静止画を蓄積し閲覧する場合、有線 LAN 上の 192.168.0.120 に CFLinux がインストー

ルされている。ブラウザから 192.168.0.120:8080 に接続すると JPEG ファイル名の一覧が表

示されるので、それを閲覧する。ファイル名は YYYYMMDDHHSSmm.jpgとなる。

この拡張は vidcat(参考文献・URL⑪)を使って実現している。 CF に書き込むときには表 8 に示した vidcatコマンドを make に与える。 #cd CFLinux #make vidcat

他の拡張と一緒に使う場合は、make の webcamlib、vidcatcgi コマンドを適宜呼び出して CF

に書き込む。

核となるのは vidcat プログラムとそれを呼び出す prdwebcam.shである。 prdwebcam.shは、画像を取得する周期(秒)と最大記録容量(KB)を指定し、Web カメラ

が撮影した JPEG 形式の画像データを vidcatコマンドで与えられた周期で、最大記録容量ま

で保管する。最大記録容量を越えた部分は古いデータから削除される。

インストールディレクトリの webcam0/にインストールに必要なファイルは基本的に置かれ

る。

ディレクトリ ファイル名 詳細

prdrun.sh httpd の起動と vidcat 起動スクリプト(実際には

prdwebcam.shを起動)

/flash/prog/

userprog ディレクトリ

prdwebcam.sh 一定周期で vidcat を起動し JPEG 形式でデータ

を CF に蓄積するためのシェル

vidcat vidcat プログラム。指定されたファイル名で

JPEG ファイルを出力する。

date

du

sleep

prdwebcam.shを構成するためのコマンド

/flash/ prog/userprog

data/ JPEG データの蓄積ディレクトリ

Page 28: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(3) usbserial

USBシリアル製品を使用する拡張。現在のところ I・O データの USB-RSAQ2 のみ動作を確

認している。CF に書き込むとき make の usbserialコマンドを実行する。 #cd CFLinux #make usbserial

この拡張を使用するには、カーネルで pl2303 ドライバがモジュールとして使用できるよう

になっていることを前提とする。他の拡張とあわせて使用する場合、usbseriallib と

usbserialprogを適宜組み合わせて使用すること CF には、/flash/prog/usbseriallib.shがインストールされ insmod で pl2303.o がロードされる。

インストールディレクトリの usbserial0/にインストールに必要なファイルは基本的に置かれ

る。

表 10 USB シリアル使用時の makeコマンド

make のコマンド 動作 usbserial USBSerialのプログラムを CF に書き込む

usbseriallib USBシリアルの LIB をインストール

usbserialprog USBシリアル機能を Enable にするスクリプトをコピー

Page 29: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(4) 有線 LAN

有線 LAN は、単体でどうにかできるわけではないが LAN 機能が不要な場合 CF に余計な

プログラムをインストールしないためにあえて拡張という扱いにしている。

有線 LAN 拡張を使う場合には、9(1)⑤「ネットワークの設定(使用する場合のみ)」で示

した compact.net の設定を行っておく必要がある。 make でコマンドを与えて CF に書き込みを行う場合、 #cd CFLinux #make net

とやる。ただこれは有線 LAN を使えるようにするだけなので、別途アプリケーションが必

要となるので、現実的には netbase,netflashを使うことになろう。

表 11 有線 LAN 使用時の makeコマンド

make のコマンド 動作 net TCP/IP で有線 LAN の設定

netall sysmgr プログラムもインストール

netbase LAN の基本設定 netflash 有線 LAN によるネットワークを追加し CF にイメージ

を書き込む

Page 30: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(5) 無線 LAN

無線 LAN を使用するには WirelessTools をインストールしている必要がある。(参考文

献・URL⑫)また、PCMCIA スロットに刺せる無線 LAN カードを使えるようにするために

PCMCIA スロットを使えるようにしなくてはならない。

① PCMCIA の設定

ターゲットボードの PCMCIA コントローラの種類によって、インストール shスクリプト

pcmcia0/pcmcia.shとターゲットボードで PCMCIA カードが刺されたときに起動するスクリ

プト pcmcia を変更しなくてはならない。現在は pcmcia.shは i82365.o を指定し、pcmcia ス

クリプトの PCIC は i82365 を指定している。

もし、違う PCIC を使用することになった場合 pcmcia-cs をダウンロードしてきて開発機に

設定する必要がある。 #make config #make install pcmcia.shで指定している i82365.o を変更する。

表 12 PCMCIA 使用時の makeコマンド

make のコマンド 動作 pcmcia PCMCIA の設定(無線 LAN カードを使う場合必須)

表 13 無線 LAN 使用時の makeコマンド

make のコマンド 動作 netbase LAN の基本設定

wavelanbase 無線 LAN の LIB などをコピー

wlconf 設定ファイルを CF にコピー

Page 31: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

② WirelessTools の設定 WirelessTools はパッケージを取得して、展開し #make install

でインストールされるはずである。

インストールディレクトリの wavelan0/にインストールの設定スクリプトが置かれる。

動的に無線 LAN の設定を変更するために、設定ファイル wlconf.shを読み込むようにカス

タマイズされた wireless.opts を、通常の無線 LAN 設定に上書きするように設定される。

今回はメルコの WLI-PCM-L11Gを使用した。このカードのドライバは orinoco ドライバで

動作する。

他の無線 LAN カードを使用する場合 wavelan.shをカスタマイズすること。wavelan.shはpcmcia0/network.opts の中で参照され無線 LAN ネットワークの設定が行われている。 #cat wavelan.sh

: libcp() { #determinate Wave lan module mkdir $INSTD/lib/modules/`uname -r`/pcmcia/ #ここを修正すること cp -a orinoco.o orinoco_cs.o hermes.o $INSTD/lib/modules/`uname -r`/pcmc ia/ cp -P -a /sbin/depmod $INSTD

#cat wlnet.sh IPADDR=192.168.0.93 NETMASK=255.255.255.0 BROADCAST=192.168.0.255 GATEWAY=192.168.0.254 DNS_1=210.232.185.98 DOMAIN=cwork.co.jp

インストールディレクトリの pcmcia0/にインストールに必要なファイルは基本的に置かれ

る。

Page 32: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

11 拡張・変更の手引き

配布したカーネルやパッケージから変更を行う場合のことを述べる。

(1) カーネルのカスタマイズ

① カーネルのバージョンアップ

本来は不要であるがカーネルのバージョンアップが必要になる。カーネルのソースは

kernel.orgや Ringサーバ(参考文献、URL⑬)からダウンロードから入手する。

今回の場合、デフォルトでインストールされるカーネル(2.2.18)では USB(OHCI)のサ

ポートが十分でなかったためデフォルトのカーネルから 2.4.18 へアップグレードした。

カーネルをインストール場合、minix-fs と LOOP-BACK デバイスのサポートを有効にして

おかなければならない。minix-fs は、CF のファイルシステムであり、LOOP-BACK デバイ

スは CF 書き込み時に必要となる。

必要に応じて、PCMCIA の設定(pcmcia-cs-3.1.34.tar.gz を使用)を行う必要がある。

② RTLinuxパッチの適用 RTLinux のパッチをカーネルに適用する。FSMLab のページからダウンロードする。

(RTLinuxのディレクトリ以下) 2.4.18 に適用をする場合 rtlinux-3.1 ディレクトリと 2.4.18 カーネルソースに rt-patch-2.4.18-rtl3.1.tgz に含まれるパッチを適用する。

以下の例では、/tmp にパッチが展開されていることを前提とする。 RTLinux へパッチ $cd rtlinux-3.1 $patch –p1 < /tmp/ patch_rtlinux-3.1 2.4.18 へパッチ #cd /usr/src/linux #patch –p1 < /tmp/patch_rtl-2.4.18

③ カーネルへのドライバ追加

添付しているカーネルはメモリを消費しないように不要なデバイスは極力外している。

CFLinuxの特徴でも書いたように、特殊な構成をしているので、minix-fs(File systems)とRam Disk Support.・Initial RAM disk(initrd) Support(Block devices)を必ず指定する。デフォル

トのカーネルの設定は付属の.config を参照すること。

④ カーネルの作成

通常のカーネル作成と同じである。カーネルのインストールは行わないこと、開発機が起

動しなくなる。

Page 33: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

#make clean;make dep;make bzImage;make modules ;make modules_install

生成された bzImage をインストールディレクトリにコピーする。

Page 34: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(2) 拡張部分の作成方法

最小限必要なコマンド、ライブラリしか入れていないので、拡張部分は必要に応じて追加

する必要がある。(最小限とは、起動に必要なファイルのみということ)

自動起動を行うには Flash上の/progに起動スクリプトを、設定が必要な場合は/conf ディレ

クトリに設定スクリプトを書き込む。スクリプトは ashとして起動される。拡張子は.shにする必要がある。

① lib の追加 CFLinux の概要でも書いた通り、/以下は基本的に RAMDisk にある。lib などの追加が必要

になる場合、Flash(または netflash)を行う前に作業ディレクトリにコピーを行う。

必要な lib は以下のように ldd コマンドを使うと調べられる。 $ ldd /bin/ls libc.so.6 => /lib/libc.so.6 (0x4001a000) /lib/ld- linux.so.2 => /lib/ld- linux.so.2 (0x40000000)

② ローダブルモジュールの適用 PCMCIA や USBなどのホットプラグされることを前提としたデバイスを追加する場合、そ

れらのデバイスドライバはローダブルモジュールとして適用される。インストールスクリ

プトで CF に適当にコピーされるように設定をしておく。また、

/lib/modules/2.4.18/modules.dep を生成するため depmod を実行しておくこと

Page 35: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

(3) システム起動スクリプト(rc*)

最低限の起動とシャットダウンを行うためには rc.S,rc.M, rc.6(rc.0 はこれのシンボリックリ

ンク)が必要となるスクリプトになる。CFLinux では単純に PlamoLinux のシステム起動スク

リプトをコピーするのではなく、以下の理由によりシステム起動スクリプトの一部を変更

している。

・ ashで動くよう変更

・ CFLinux で不要な機能の削除と追加

以下に起動スクリプトの変更概要を述べる。

① rc.S swaponを使用しない。SWAP は行わない。

② rc.M ・ コンソールの Blank 機能削除

・ crond を停止

③ rc.local ・ ユーザプログラムの自動起動

・ RTLinux の起動

ネットワーク機能の rc.inet1 は Network 機能を書き込むときに動的に生成している。

Page 36: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

12 今後の課題

・ 新しい PlamoLinuxへの適用

現在、PlamoLinux2.2.5 は FTP サイトから入手できなくなっているので 2.2.6 への適用を検

・ RAM ディスク未使用版の作成

現在 Root イメージを RAM ディスク格納しているが ReadOnly のシステムなら不要なので

RAM ディスクを使用しない版の作成。

・ 組み込み用 libC への対応 GNU glibc は組み込み向けに、まったく考慮されていないため巨大であるため組み込み向け

とは言えない。組み込み向けの libC として RedHat 社の newlib や uClibc が開発されている。

これらの適用を試みたい。

・ コマンドサイズの縮小 GNU filesutils,shellutils のうち最小限のコマンドにしか対応していないが、よりファイルサ

イズの縮小を考えたときに、よく使われるコマンドを一つのバイナリにまとめた

BUSYBOX(参考文献・URL⑦)の手法は有効である。

・ 他の RealTime 制御システム採用の検討 RTLinux は当初大学の研究と行われていたため入手が容易(Free ソフト)であったが

FSMLab 社(参考文献・URL②)設立に伴い事実上商用化されてしまった。(今回は Free

版を使用)

コストなどを考えると他の RealTime 制御システムを検討する必要があるだろう。カンザス

大学で開発されている KURT(参考文献・URL⑧)などを検討したい。

・ ファイルシステムの検討

現在 CF のファイルシステムは minix fs だが、CF 上にファイル書き込みが行うアプリケー

ションが稼動中に電源断を行われるとメタファイルの一貫性が取れなくなりファイルシス

テムにダメージが与えられることが考えられる。最近 ext3 に代表されるジャーナルファイ

ルシステムを採用するシステムが増えており検討したい。

・ PlamoLinux不要のインストーラ CFLinux は強く PlamoLinux に依存している。PlamoLinux 無しでもインストールできるよう

CD-ROM ブートインストーラの開発が必要であろう。

Page 37: ユビキタスコンピューティング用 ソフトウェアプラットフォーム … · Linux 、FreeBSD NetBSDを候補とした。他のUNIX 系OS(Solaris,HP-UX,UnixWare)は

13 参考文献、URL

① PlamoLinux http://plamo-linux.jp/

② RTLinux http://www.fsmlabs.com/ ③ 株式会社ピノー http://www.pinon-pc.co.jp/

④ Plamo Linux インストール & 種々設定あれこれ http://www2.ocn.ne.jp/~zebra/linux/plamo/index.html

⑤ The newlib HomePage http://sources.redhat.com/newlib/

⑥ uClibc -- a C library for embedded systems http://www.uclibc.org/

⑦ BUSYBOX http://busybox.net/

⑧ KURT http://www.ittc.ku.edu/kurt/

⑨ mini_httpd http://www.acme.com/software/mini_httpd/

⑩ camserv http://cserv.sourceforge.net/

⑪ w3cam http://mpx.freeshell.org/

⑫ Wireless Tools http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html

⑬ ring サーバ http://www.ring.gr.jp/

⑭ PCMCIA-HOWTO http://www.linux.or.jp/JF/JFdocs/PCMCIA-HOWTO.html

⑮ リアルタイム OS としての Linux活用法 CQ 出版社 インターフェイス 1999 年 11 月号