Armadillo上でのPPP通信について説明します。
PPP通信の実現にはpppdというアプリケーションを使用します。
1. armadillo-linux カーネル機能の調整
pppdを使用するためには、armadillo-linuxのカーネルに次の機能が必要です。
- PPP (point-to-point protocol) support
- PPP support for async serial ports
機能を有効にするためにカーネルの調整を行います。
上記の機能を使うためには以下の2通りの方法があります。
- カーネルの内部機能として組み込んで使用
- ローダブルモジュールとして使用
今回は、b. の方法で行います。
[PC ~/linux]$ <span class="input">make menuconfig</span>
設定の変更後、内容を保存してカーネル(モジュールファイル)のコンパイルを行います。
(カーネルのコンパイルについては「カーネルを再構築してみる」を参照下さい。)
[PC ~/linux]$ <span class="input">make modules </span>
作成された以下の3つのモジュールファイルをarmadillo上へコピーします。
(今回、各ファイルをarmadillo上の「/lib/modules/2.4.16-rmk2-armadillo/」ディレクトリに保存します。)
- ppp_generic.o
- slhc.o
- ppp_async.o
各ファイルは /usr/arm-linux/src/linux/driver/net/ に作成されます。
(armadillo-linuxのカーネルソースは /usr/arm-linux/src/下に展開しているものとします。)
2. pppdソースファイルの取得と展開
pppdのソースファイルを取得します。
今回は以下のサイトから入手したpppdのソースファイル
(ppp-2.4.1.tar.gz)を使用します。
https://ftp.samba.org/pub/ppp/
ソース(圧縮)ファイルの入手後、任意のディレクトリで展開します。
[PC ~/src]$ <span class="input">tar xzf ppp-2.4.1.tar.gz</span>
3. pppdプログラムソースの改修(パッチの導入)
Armadillo上でpppdを使用するためにpppdのプログラムソースに対して、 次のような改修を行う必要があります。
- ストリップ処理は arm-linux-strip で行う
(installコマンドのストリップオプション指定(-s)は使わない)
ソースファイルの展開後、上記の改修を加えます。
(今回は、改修内容をパッチ(pppd_on_armadillo.patch)にまとめ、導入します。)
[PC ~/src]$ <span class="input">patch -p0 < pppd_on_armadillo.patch</span>
4. クロスコンパイルを行うための環境変数の設定
クロスコンパイルを行うために環境変数を変更します。
export CROSS_COMPILE=1
export CC=arm-linux-gcc
※ クロスコンパイルを行うホストPCのシェルに「bash」を使用している場合の設定です。
5. pppdのコンパイル
pppdのコンパイルを行います。
[PC ~/ppp-2.4.1]$ <span class="input">./configure</span>
[PC ~/ppp-2.4.1]$ <span class="input">make</span>
コンパイルの終了後、ホストPC上にインストール用の任意のディレクトリを作成し、 インストールを行います。
[PC ~/ppp-2.4.1]$ <span class="input">mkdir ppp_inst_dir</span>
[PC ~/ppp-2.4.1]$ <span class="input">su</span>
[PC ~/ppp-2.4.1]# <span class="input">make DESTDIR=/usr/arm-linux/src/ppp-2.4.1/ppp_inst_dir install</span>
上記の「make install」コマンド発行時のオプションについて説明します。
- DESTDIR=...
インストールディレクトリの指定、作成した「ppp_inst_dir」を指定します。
6. インストールイメージの圧縮・コピー・展開
インストール先のディレクトリに移動し、インストールされたファイルを圧縮します。
[PC ~/ppp-2.4.1]# <span class="input">cd ppp_inst_dir</span>
[PC ~/ppp-2.4.1/ppp_inst_dir]# <span class="input">tar czf pppd_on_armadillo.tgz *</span>
作成した圧縮ファイルをarmadilloへコピー、展開します。
展開の際にはルート権限を持つユーザで作業を行います。
必ず「/ (ルートディレクトリ)」に圧縮ファイルを展開して下さい。
[armadillo /]# <span class="input">pwd</span>
/
[armadillo /]# <span class="input">tar xzf pppd_on_armadillo.tgz</span>
7. ノードの作成
pppdが使用するデバイスノード(/dev/ppp)をarmadillo上に作成します。
[armadillo /]# <span class="input">mknod /dev/ppp c 108 0</span>
8. モジュールファイルのロード
- で作成したモジュールファイルをロードします。
ロードには insmod コマンドを使用します。
[armadillo /]#cd <span class="input">/lib/modules/2.4.16-rmk2-armadillo/</span>
[armadillo 2.4.16-rmk2-armadillo/]# <span class="input">insmod shlc.o</span>
[armadillo 2.4.16-rmk2-armadillo/]# <span class="input">insmod ppp_generic.o</span>
[armadillo 2.4.16-rmk2-armadillo/]# <span class="input">insmod ppp_asycn.o</span>
9. pppdの起動
pppdを起動して pppのネゴシエーションを開始します。
起動はルート権限を持つユーザで行います。
又、pppのネゴシエーションが開始されるように、対向機器での設定(アプリケーションの
起動等)をすませておきます。
以下のコマンドにてarmadillo上でpppdが起動した場合、
- armadilloから対向機に対して接続要求開始する(クライアント動作)
- armadilloに対して接続要求を行う(サーバ動作)
どちらの動作の場合もpppのネゴシエーションが完了し、pppの通信が可能になります。
[armadillo /]# <span class="input">/usr/sbin/pppd /dev/ttyS1 -detach lock \</span>
<span class="input">192.168.100.20:192.168.100.25 \</span>
<span class="input">netmask 255.255.255.0 115200 local crtscts</span>
上記の各オプションについて簡単に説明します。
- -detach
pppdデーモン自体がバックグラウンドで実行されないように指定 - lock
シリアルポート使用時の排他ロックの制御方法にUUCPタイプを使用 - 192.168.100.20:192.168.100.25
IPアドレスの設定
コロン(:)の前に自機IPアドレス、後に対向機IPアドレスを指定します
- netmask 255.255.255.0
ネットマスクの設定 - /dev/ttyS1
使用するシリアルポートの指定 - 115200
ボーレートの指定 - local
モデム制御線を使用しない(CD信号の無視、DTR信号は非制御) - crtscts
ハードウェアフロー制御を使用する
PPPのネゴシエーションが開始され、数秒後にPPPの接続が完了します。
10. pppd の終了
pppdを終了させる場合は、kill コマンドを使ってpppdのプロセスを指定して 終了を行って下さい。