Armadillo上でのPPP通信について説明します。
PPP通信の実現にはPPxPというアプリケーションを使用します。
(PPxPは真鍋敬士氏作のPPP実装系です。)
1. armadillo-linux カーネル機能の調整
PPxPを使用するためには、Armadillo-linuxのカーネルに次の機能が必要です。
- Universal TUN/TAP device driver support
機能を有効にするためにカーネルの調整を行います。
上記の機能を使うためには以下の2通りの方法があります。
- カーネルの内部機能として組み込んで使用
- ローダブルモジュールとして利用
今回は、b. の方法で進めます。
[PC ~/linux]$ make menuconfig
設定の変更後、内容を保存してカーネル(モジュールファイル)のコンパイルを行います。
[PC ~/linux]$ make modules
作成されたファイル(tun.o)をarmadillo上にコピーします。
(今回、各ファイルをarmadillo上の「/lib/modules/2.4.16-rmk2-armadillo/」ディレクトリに保存します。)
ファイルは /usr/arm-linux/src/linux/driver/net/ に作成されます。
(armadillo-linuxのカーネルソースは /usr/arm-linux/src/下に展開しているものとします)
2. PPxPソースファイル取得と展開
PPxP のソースファイルを取得します。
ここから入手可能です。
ソース(圧縮)ファイルの入手後、任意のディレクトリで展開します。
[PC ~/src]$ tar xzf ppxp-2001080415.tar.gz
3. PPxPプログラムソースの改修(パッチの導入)
Armadillo上でPPxPを使用するためにPPxPのプログラムソースに対して、
次のような改修を行う必要があります。
- CPUアーキテクチャの指定
- X window system を使用しない設定に変更
- ストリップ処理は arm-linux-strip で行う
(installコマンドのストリップオプション指定(-s)は使わない)
ソースファイルの展開後、上記の改修を加えます。
(今回は、改修内容をパッチ(ppxp_on_armadillo.patch)にまとめ、導入します。)
[PC ~/src]$ patch -p0 < ppxp_on_armadillo.patch
4. クロスコンパイルを行うための環境変数の設定
クロスコンパイルを行うために環境変数を変更します。
export CROSS_COMPILE=1
export CC=arm-linux-gcc
※ クロスコンパイルを行うホストPCのシェルに「bash」を使用している場合の設定です。
5. PPxP のコンパイル
PPxPのコンパイルを行います。
[PC ~/ppxp]$ autoconf
[PC ~/ppxp]$ ./configure --host=arm-linux --without-x --without-tcl
上記の「./configure」コマンド発行時の各オプションについて説明します。
- --host=arm-linux
ネイティブ(動作)環境の指定 - --without-x
X window systemを使用しない - --without-tcl
Tclを使用しない
[PC ~/ppxp]$ make
コンパイルの終了後、ホストPC上にインストール用の任意のディレクトリを作成し、 インストールを行います。
[PC ~/ppxp]$ mkdir ppxp_inst_dir
[PC ~/ppxp]$ su
[PC ~/ppxp]# make virtual_root=/usr/arm-linux/src/ppxp/ppxp_inst_dir install
上記の「make install」コマンド発行時のオプションについて説明します。
- virtual_root=...
インストールディレクトリの指定、作成した「ppxp_inst_dir」を指定します。
6. インストールイメージの圧縮・コピー・展開
インストール先のディレクトリに移動し、インストールされたファイルを圧縮します。
[PC ~/ppxp]# cd ppxp_inst_dir
[PC ~/ppxp/ppxp_inst_dir]# tar czf ppxp_on_armadillo.tgz *
作成した圧縮ファイルをarmadilloへコピー、展開します。
展開の際には、ルート権限を持つユーザで作業を行います。
必ず「/ (ルートディレクトリ)」に圧縮ファイルを展開して下さい。
[armadillo /]# pwd
/
[armadillo /]# tar xzf ppxp_on_armadillo.tgz
7. PPxP 実行時の設定ファイル
vi 等のエディタを使用して PPxPの設定ファイル(connect_sample)を作成します。
作成した設定ファイルは /usr/local/etc/ppxp/conf/ ディレクトリに保存します。
設定ファイル(connect_sample)例
source serial
set MODE active
set LOG.FILE ppxp_on_armadillo.log
set LINE /dev/ttyS1
set IP.LOCAL 192.168.100.20/24
set IP.REMOTE 192.168.100.25
set IP.SLOCAL yes
set IP.VJ no
set IP.RESOLV no
set IP.UP drouteup
set IP.DOWN droutedown
また、使用するシリアルポート(/dev/ttyS1等)に対しての操作権限(write,read)を与えておいて下さい。
8. モジュールファイルのロード
モジュールファイル tun.o をロードします。
ロードには insmod コマンドを使用します。
[armadillo /]#cd /lib/modules/2.4.16-rmk2-armadillo/
[armadillo /lib/modules/2.4.16-rmk2-armadillo/]# insmod tun.o
9. PPxP の起動
PPxPを起動します。
ppp通信自体にはクライアントやサーバといった概念は基本的にはありませんが、
便宜的に以下のように解説を進めます。
- 接続を依頼する側 -> クライアント側
- 接続依頼を受ける側 -> サーバ側
クライアント・サーバの動作を問わず、7.で作成した設定ファイル(connect_sample)を起動オプションとして指定して下さい。
又、pppのネゴシエーションが開始されるように、対向機器での設定(アプリケーションの 起動等)をすませておきます。
クライアントとして動作させる場合
PPxPコンソール の起動
PPxPコンソール(ppxp)を起動させます。
[armadillo ~]$ /usr/local/bin/ppxp connect_sample
接続動作の開始
PPxPコンソール起動後、コンソール入力画面が表示されますので、「connect」コマンドを入力してpppのネゴシエーションを開始します。
[armadillo ~]$ /usr/local/bin/ppxp connect_sample
PPxP version 2001080415
interface: tun0
ppxp>connect
サーバとして動作させる場合
PPxPデーモン(ppxpd) を起動し、対向機器からの接続依頼の要求を待ちます。
[armadillo /]# /usr/local/sbin/ppxpd -getty /dev/ttyS1 connect_sample
上記の各オプションについて説明します。
- -getty
getty(指定のシリアルポートを監視する)モードの指定 - /dev/ttyS1
使用するシリアルポートの指定
10. PPxPの終了
クライアントとして動作させている場合
PPxPコンソールより「quit」コマンドを入力します。
[armadillo ~]$ /usr/local/bin/ppxp connect_sample
PPxP version 2001080415
interface: tun0
ppxp>connect
PPXP>quit
[armadillo ~]$
サーバとして動作させている場合
kill コマンドを使ってppxpdのプロセスを指定して終了して下さい。