Linux发行版自带PPP拨号需要的pppd和chat命令,以2.6.18内核的Linux虚拟机为例,在/usr/sbin目录下,/etc/ppp目录也已自动创建。参考模权创建拨号脚本ppp-on,ppp-off,ppp-on-dialer三个文件,on&off放在/usr/sbin目录下,ppp-on-dialer放在/etc/ppp目录下,执行ppp-on脚本,如果设备已连接并成功驱动,即可获得IP地址。ppp-on脚本也可以定义传用参数,如拨号串口、电话号码、用户名、密码等。
Arm开发板中要实现ppp拨号:首先要确认内核提供了ppp协议的支持;然后下载ppp-2.4.4b1.tar.gz进行交叉编译,得到pppd、pppdump、pppstats、chat四个必需的拨号程序,下载到开发板;然后编写脚本,与虚拟机上的流程相同,执行拨号脚本即可连接网络。
开发板中实现拨号需要注意的问题:
1、内核配置
执行 #make menuconfig 添加如下内核选项:
Device Drivers ---> Network device support
--->
PPP (point-to-point protocol)
support
[*] PPP multilink support
PPP support for async serial
ports
PPP support for sync tty
ports
SLIP (serial line) support
[*] CSLIP compressed
headers
添加完成后保存并退出,执行 # make uImage。将成功生成的uImage烧入开发板。
2、交叉编译
进入ppp-2.4.4.tar.gz的目录执行解压命令 #tar zxf ppp-2.4.4.tar.gz,解压后出现
ppp-2.4.4 文件夹,进入该目录( #cd ppp-2.4.4 ),执行配置命令 #./configure,然后执行 #make
CC=arm-linux-gcc (后面的CC表示交叉编译器目录)。
编译完成后,复制如下文件到开发板对应目录。
以下$(PPP)为 计算机上ppp-2.4.4 的目录 ,$(EMB_BIN)代表 开发板中的 /bin
目录,$(EMB_ETC)代表开发板中的 /etc 目录
#cp $(PPP)/chat/chat $(EMB_BIN)
#cp $(PPP)/pppd/pppd $(EMB_BIN)
#cp $(PPP)/pppdump/pppdump $(EMB_BIN)
#cp $(PPP)/pppstats/pppstats $(EMB_BIN)
#mkdir $(EMB_ETC)/ppp
#cp $(PPP)/etc.ppp/* $(EMB_ETC)/ppp
#cp $(PPP)/scripts/ppp-on $(EMB_BIN)
#cp $(PPP)/scripts/ppp-off $(EMB_BIN)
#cp
$(PPP)/scripts/ppp-on-dialer $(EMB_ETC)/ppp
注意,后三项为脚本文件。可根据模板手动编写。
3、注意事项
我在调试过程中,完成这些步骤,成功驱动模块,并在/dev下创建了ttyUSB0~2三个串口,但调用[./ppp-on
/dev/ttyUSB0 “#777” card card]拨号时提示需要调用“mknod ppp c 108
0”创建ppp结点,由于自己的失误,以为应该创建为188,结果再次拨号提示不能绑定到ppp通道,查看pppd源代码也未找到问题的的原因,后来发现/proc/devices下有ID号为108的ppp设备,所以应该以108为主设备号创建节点,然后成功连接到网络并获得IP地址。