Howto

pppdを使ってppp通信を行う(Armadillo, カーネル組込み)

Armadillo上でのPPP通信について説明します。
PPP通信の実現にはpppdというアプリケーションを使用します。
最新のatmark-distには、pppd-2.4.4が組み込まれていますので、それを用いて、pppdをカーネルに静的に組み込みます。
ローダブルモジュールとして組み込む方法は、pppdを使ってppp通信を行う(Armadillo)を参考にしてください。


おおまかな手順は下記のようになります。

  1. Linuxカーネルにpppの機能を組み込む
  2. イメージの書き込み
  3. pppdを使用してppp通信をおこなう


この Howto の例では、以下の環境を想定しています。
ご利用の環境に合わせて適宜読みかえてください。

  • 対象製品:Armadillo-220
  • atmark-dist:v20080314
  • linux-kernel:linux-2.6.12.3-a9-13

1.Linuxカーネルにpppの機能を組み込む

カーネルに、以下のデバイスドライバを組み込みます。

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

また、ユーザランドのアプリケーションとして、pppdを組み込みます。


make menuconfigを使用した場合の設定は下記のようになります。

[PC ~/atmark-dist]$ make menuconfig

Main Menuでは、下記のように設定してください。
Productは、使用するArmadilloの種類に応じて適切に選択してください。

Main Menu
 
Vendor/Product Selection  ---> 
--- Select the Vendor you wish to target
(AtmarkTechno) Vendor
--- Select the Product you wish to target
(Armadillo-220.Base) AtmarkTechno Products 
 
Kernel/Library/Defaults Selection  --->
--- Kernel is linux-2.6.x
(default) Cross-dev
(None) Libc Version
[*] Customize Kernel Settings (NEW)
[*] Customize Vendor/User Settings (NEW)

次に、カーネルの設定をおこないます。
デバイスドライバの組込みの際、必ず「*」を選択してください。
「M」にすると、モジュールとしてビルドされ、必要な機能が静的に組み込まれません。

Linux Kernel Configuration
 
Device Drivers  --->
Networking support  ---> 
<*> PPP (point-to-point protocol) support
<*>   PPP support for async serial ports

最後に、ユーザランドの設定をおこないます。

Userland Configuration
 
Network Applications  --->
[*] pppd

makeします。

[PC ~/atmark-dist]$ make dep all

2.イメージの書き込み

ppp通信を行う際に使用するTAやモデムでは、シリアルポートにハードウェアフローコントロール(RTS/CTS)が必要な場合がほとんどなので、今回は、シリアルポートにシリアルインターフェース1(ttyAM0)を使用します。
シリアルインターフェース1は通常gettyに割り当てられているため、inittabを変更して開放します。
シリアルインターフェース1の開放については、COM1の解放のページも参考にしてください。


また、pppdの動作に必要な設定も併せて行います。


inittabを変更します。

[PC ~/atmark-dist]$ vi romfs/etc/inittab

下記のように、シリアルインターフェース1(ttyAM0)をgettyに割り当てている行をコメントアウトしてください。

#::respawn:/sbin/getty -L 115200 ttyAM0 vt102

pppdが使用する/var/lockディレクトリを作成します。

[PC ~/atmark-dist]$ mkdir romfs/var/lock

最後に、pppのデバイスノードを追加します。
変更するext2_devtable.txtは、make menuconfigの際に選択したProductのものとなります。

[PC ~/atmark-dist]$ vi vendors/AtmarkTechno/Armadillo-220.Base/ext2_devtable.txt

下記の1行を追加してください。

/dev/ppp           c      660    0     0     108     0       0       0     -

変更したら、イメージを作成し、Armadilloに書き込みます。 カーネルも書き換えるのを忘れないようにしてください。

[PC ~/atmark-dist]$ make image
[PC ~/atmark-dist]$ hermit download -i images/linux.bin.gz -r kernel
[PC ~/atmark-dist]$ hermit download -i images/romfs.img.gz -r userland

3.pppdを使用してppp通信をおこなう

今回は、2台のArmadillo同士をシリアルケーブルで直接接続して、動作確認をおこないます。
シリアルケーブルは、クロスケーブルを使用します。
(通常、TAやモデムと接続する場合はストレートケーブルを使用します。)


それぞれのArmadilloのIPアドレスは以下のようになっているものと仮定します。

Armadillo-A IPアドレス 192.168.1.10
Armadillo-B IPアドレス 192.168.2.10

2台のArmadilloのシリアルインターフェース1(Armadillo-220の場合CON16)を、クロスケーブルで接続し、それぞれのArmadilloで下記のコマンドを実行します。
(シリアルインターフェース1をppp用に使用しているため、シリアルインターフェース2を使うか、sshまたはtelnet経由でログインしてください。)

Armadillo-A

[armadillo ~]$ su
[armadillo ~]# pppd -d -detach crtscts lock 192.168.1.10:192.168.2.10 netmask 255.255.250 /dev/ttyAM0 115200 &

Armadillo-B

[armadillo ~]$ su
[armadillo ~]# pppd -d -detach crtscts lock 192.168.2.10:192.168.1.10 netmask 255.255.250 /dev/ttyAM0 115200 &

正常に接続できた場合、下記のような実行結果が表示されます。

using channel 1
Using interface ppp0
Connect: ppp0 <--> /dev/ttyAM0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x95ca4c48> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4eabb75c> <pcomp> <accomp>]
sent [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x4eabb75c> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x95ca4c48> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x95ca4c48> <pcomp> <accomp>]
sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 192.168.1.10>]
rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 192.168.2.10>]
sent [IPCP ConfAck id=0x1 <compress VJ 0f 01> <addr 192.168.2.10>]
rcvd [IPCP ConfAck id=0x1 <compress VJ 0f 01> <addr 192.168.1.10>]
local  IP address 192.168.1.10
remote IP address 192.168.2.10

ネットワークインターフェースにppp0が追加され、相手先のIPアドレスにpingが通ることを確認してください。

[armadillo ~]#  ifconfig
...
ppp0      Link encap:Point-Point Protocol
          inet addr:192.168.1.10  P-t-P:192.168.2.10  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:2 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:32 (32.0 B)  TX bytes:32 (32.0 B)
 
[armadillo ~]#  ping 192.168.2.10
PING 192.168.2.10 (192.168.2.10): 56 data bytes
64 bytes from 192.168.2.10: icmp_seq=0 ttl=64 time=25.8 ms
64 bytes from 192.168.2.10: icmp_seq=1 ttl=64 time=20.0 ms

4.その他の情報

下記に示すリンクも参考にしてください。
特に、Linux PPP HOWTOには、pppdの設定を含め有用な情報が多く記述してあります。