Howto

PPxPを使ってppp通信を行う(Armadillo)

Armadillo上でのPPP通信について説明します。

PPP通信の実現にはPPxPというアプリケーションを使用します。
(PPxPは真鍋敬士氏作のPPP実装系です。)

1. armadillo-linux カーネル機能の調整

PPxPを使用するためには、Armadillo-linuxのカーネルに次の機能が必要です。

  • Universal TUN/TAP device driver support

機能を有効にするためにカーネルの調整を行います。

上記の機能を使うためには以下の2通りの方法があります。

  1. カーネルの内部機能として組み込んで使用
  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のプロセスを指定して終了して下さい。