Armadillo上でのPPP通信について説明します。
PPP通信の実現にはpppdというアプリケーションを使用します。
最新のatmark-distには、pppd-2.4.4が組み込まれていますので、それを用いて、pppdをカーネルに静的に組み込みます。
ローダブルモジュールとして組み込む方法は、pppdを使ってppp通信を行う(Armadillo)を参考にしてください。
おおまかな手順は下記のようになります。
- Linuxカーネルにpppの機能を組み込む
- イメージの書き込み
- 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の設定を含め有用な情報が多く記述してあります。