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の設定を含め有用な情報が多く記述してあります。