Howto

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

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

PPP通信の実現にはpppdというアプリケーションを使用します。

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

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

  • PPP (point-to-point protocol) support
  • PPP support for async serial ports

機能を有効にするためにカーネルの調整を行います。
上記の機能を使うためには以下の2通りの方法があります。

  1. カーネルの内部機能として組み込んで使用
  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. モジュールファイルのロード

  1. で作成したモジュールファイルをロードします。
    ロードには 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のプロセスを指定して 終了を行って下さい。