嵌入式linux实现pppoe拨号上网
一.交叉编译内核
创新互联专注于轵城网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供轵城营销型网站建设,轵城网站制作、轵城网页设计、轵城网站官网定制、成都微信小程序服务,打造轵城网络公司原创品牌,更为您提供轵城网站排名全网营销落地服务。
make menuconfig -> Device Drivers -> Network device support -> PPP (point-to-point protocol) 中,选中所有ppp选项。退出,保存配置,修改Makefile重新执行make zImage. 将arch/mips/boot/下的zImage下载到开发板上重启系统。
二.交叉编译pppoe server
下载ppp-2.4.5.tar.gz 、rp-pppoe-3.10.tar.gz 在 /opt 目录下。
tar -zxvf ppp-2.4.5.tar.gz
cd ppp-2.4.5
[root@root ppp-2.4.5 ]# ./configure CC=mipsel-linux-gcc AR=mipsel-linux-ar BANLIB=mipsel-linux-ranlib --host=mipsel
-------------------------------------------------------------------------
Configuring for Linux
Creating Makefiles.
Makefile <= linux/Makefile.top
pppd/Makefile <= pppd/Makefile.linux
pppstats/Makefile <= pppstats/Makefile.linux
chat/Makefile <= chat/Makefile.linux
pppdump/Makefile <= pppdump/Makefile.linux
pppd/plugins/Makefile <= pppd/plugins/Makefile.linux
pppd/plugins/rp-pppoe/Makefile <= pppd/plugins/rp-pppoe/Makefile.linux
pppd/plugins/radius/Makefile <= pppd/plugins/radius/Makefile.linux
pppd/plugins/pppoatm/Makefile <= pppd/plugins/pppoatm/Makefile.linux
pppd/plugins/pppol2tp/Makefile <= pppd/plugins/pppol2tp/Makefile.linux
-------------------------------------------------------------------------
再直接 make CC=mipsel-linux-gcc
编译成功后在pppd目录下会生成pppd把这文件拷贝到usr/sbin目录下。
cd /opt
tar -zxvf rp-pppoe-3.10.tar.gz
cd rp-pppoe-3.10/src
[root@root src]# ./configure CC=mipsel-linux-gcc AR=mipsel-linux-ar BANLIB=mipsel-linux-ranlib --host=mipsel
-------------------------------------------------------------------------
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether /opt/crosstool/mipsel-linux/bin/mipsel-linux-gcc accepts -g... yes
checking for /opt/crosstool/mipsel-linux/bin/mipsel-linux-gcc option to accept ISO C89... none needed
checking for mipsel-ranlib... no
checking for ranlib... ranlib
configure: WARNING: using cross tools not prefixed with host triplet
checking how to run the C preprocessor... /opt/crosstool/mipsel-linux/bin/mipsel-linux-gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/wait.h that is POSIX.1 compatible... yes
checking for Linux 2.4 kernel-mode PPPoE support... cross-compiling, default:
no
checking packing order of bit fields... no defaults for cross-compiling
-------------------------------------------------------------------------
解决方法:进入src下直接./configure,然后修改下面的makefile和libevent下的makefile,gcc为mipsel-linux-gcc
直接 make
编译成功后configs目录下是rp-pppoe所需的配置文件,把这些文件全部复制到目标机的/etc/ppp目录下(没有就自己建一个)。
src目录下会产生pppoe,pppoe-server,pppoe-sniff,pppoe-relay。把这些程序下载到目标机/usr/sbin目录下。
三.配置
1)rp-pppoe-3.10/configs目录下是rp-pppoe所需的配置文件,把这些文件全部复制到目标机的/etc/ppp目录下(没有就自己建一个)。
2)拨号相关的脚本程序共有6个,在rp-pppoe-3.10/scripts中。
pppoe-setup:配置程序,把输入的帐号密码等信息存入配置文件。
pppoe-start:拨号程序,连接网络。
pppoe-stop:断开。
pppoe-status:查看连接状态。
pppoe-connect:连接网络,被pppoe-start所调用。
pppoe-init:初始化,被其他程序调用。
把这些脚本也放到/usr/sbin目录下。
四.测试
./pppoe-setup (下面是一些说明供参考)
>> Enter your PPPoE user name: ——此处输入拨号帐号的用户名
>> Enter the Ethernet interface connected to the ADSL modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethn, where n is a number. (default eth0): ——输eth0(视情况而定)
>> Enter the demand value (default no): ——输no
>> Enter the DNS information here: ——输IP(eg:69.45.45.34)(视当地运营商的DNS服务器IP而定)
>> Please enter your PPPoE password: ——输网通用户口令
>> Choose a type of firewall (0-2): ——输0 (0为不要防火墙)
>> Accept these settings and adjust configuration files (y/n)? ——输y
执行pppoe-start后。如果这个时候就使用pppoe-start开始连接的话,很大情况下你会得到timeout的提示,那我们该怎么做呢?需要在dev目录下创建一个pts的文件夹,进入pts,创建节点mknod 0 c 136 0; mknod 1 c 136 1。每次链接都需要建立,蛮麻烦的吧,所以还是把这几条指令写进启动脚本吧。相信这样的话,一般您都会得到一个connected!的提示,说明ADSL已拨号成功,可以ping 下baidu看通不。
五.修改脚本
为了方便不用pppoe-setup,自己写一个脚本pppoe.sh为传参形式,把参数写入到指定的文件内 例如:
[root@root scripts]# ./pppoe.sh pppoe-name eth3 pppoe-passwd
#!/bin/sh
U="$1"
E="$2"
PWD1="$3"
PPPD="/usr/sbin/pppd"
CONFIG="/etc/ppp/pppoe.conf"
if [ ! -r "$CONFIG" ] ; then
echo "Oh, dear, I don't see the file '$CONFIG' anywhere. Please"
echo "re-install the PPPoE client."
exit 1
fi
# Must have pppd
if [ ! -x $PPPD ] ; then
echo "Oops, I can't execute the program '$PPPD'. You"
echo "must install the PPP software suite, version 2.3.10 or later."
exit 1
fi
sed -i "s/USER=.*/USER=$U/" $CONFIG
sed -i "s/ETH=.*/ETH=$E/" $CONFIG
sed -i "s/FIREWALL=.*/FIREWALL=NONE/" $CONFIG
sed -i "s/DNSTYPE=.*/DNSTYPE=SERVER/" $CONFIG
sed -i "s/PIDFILE=.*/PIDFILE=/var/run/pppoe-$E.pid/" $CONFIG
sed -i "s/DEMAND=.*/DEMAND=no/" $CONFIG
sed -i "s/DNS1=.*/DNS1=""/" $CONFIG
sed -i "s/DNS2=.*/DNS2=""/" $CONFIG
sed -i "s/PEERDNS=.*/PEERDNS=yes/" $CONFIG
cp $CONFIG $CONFIG-bak
if [ -r /etc/ppp/pap-secrets ] ; then
cp /etc/ppp/pap-secrets /etc/ppp/pap-secrets-bak
else
cp /dev/null /etc/ppp/pap-secrets-bak
fi
if [ -r /etc/ppp/chap-secrets ] ; then
cp /etc/ppp/chap-secrets /etc/ppp/chap-secrets-bak
else
cp /dev/null /etc/ppp/chap-secrets-bak
fi
egrep -v "^$U|^\"$U\"" /etc/ppp/pap-secrets-bak > /etc/ppp/pap-secrets
echo "\"$U\" * \"$PWD1\"" >> /etc/ppp/pap-secrets
egrep -v "^$U|^\"$U\"" /etc/ppp/chap-secrets-bak > /etc/ppp/chap-secrets
echo "\"$U\" * \"$PWD1\"" >> /etc/ppp/chap-secrets
[root@root scripts]#/usr/sbin/pppoe-connect /etc/ppp/pppoe.conf
Using interface ppp0
Connect: ppp0 <--> /dev/pts/13
Warning - secret file /etc/ppp/chap-secrets has world and/or group access
CHAP authentication succeeded: Access granted
CHAP authentication succeeded
local IP address 192.168.2.2
remote IP address 192.168.2.1
primary DNS address 8.8.8.8
secondary DNS address 4.4.4.4
[root@root scripts]#/usr/sbin/pppoe-status
pppoe-status: Link is up and running on interface ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:192.168.2.2 P-t-P:192.168.2.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:7 errors:0 dropped:0 overruns:0 frame:0
TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:61 (61.0 B) TX bytes:1447 (1.4 KiB)
[root@root scripts]#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0
0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 ppp0
-----------------------------------------------------------------------
分享文章:嵌入式linux实现pppoe拨号上网
链接URL:http://azwzsj.com/article/pcsghi.html