近期做了点mips方面的linux嵌入式移植工作。这是第一次在硬件上进行这样的操作。记录下来,跟大家一起分分享分享。
首先,虚拟机操作系统用的xubuntu,板上内核是linux-2.6.22.19,使用CC=mipsel-linux-gcc。
前期的工作的前大部分来自于 http://linux.chinaunix.net/techdoc/net/2009/05/04/1109997.shtml 的参考。感谢这位大侠的分享。
1、移植首先需要内核对ppp协议的支持
#cat /proc/devices|grep ppp 查看是否支持ppp
若无,重新配置编译内核在 -> Device Drivers -> Network device support -> PPP (point-to-point protocol) 中,选中所有ppp选项。
2、移植需要要rp-pppoe和ppp。我用的是rp-pppoe3.10和ppp-2.4.5的组合
下载rp-pppoe3.10后,解压源码。进入源码目录。再进入src目录。.configure没对cross_compiling提供支持,故只可重新修改Makefile。执行./configure后,程序报生成两个makefile文件,一是在src 下的,一是在libevent下的,手工将其中的CC全修改成mipsel-linux-gcc,make完成。
src目录下会产生pppoe,pppoe-server,pppoe-sniff,pppoe-relay。把这些程序下载到目标机/usr/sbin目录下。
复制配置文件,rp-pppoe-3.8/configs目录下是rp-pppoe所需的配置文件,把这些文件全部复制到目标机的/etc/ppp目录下。
拨号相关的脚本程序共有6个,在rp-pppoe-3.8/scripts中。
pppoe-setup:配置程序,把输入的帐号密码等信息存入配置文件。
pppoe-start:拨号程序,连接网络。
pppoe-stop:断开。
pppoe-status:查看连接状态。
pppoe-connect:连接网络,被pppoe-start所调用。
pppoe-init:初始化,被其他程序调用。
把这些脚本也放到/usr/sbin目录下。
ra-pppoe需要ppp,下载ppp-2.4.5
解压。进入源码目录。
执行
#./configure
#make CC=arm-linux-gcc
编译完成后,进入pppd目录,将生成的pppd可执行文件拷贝到目标板的文件系统的/usr/sbin下。
pppoe-steup.
按照提示输出你的ADSL的信息。其中DNS我都采用google的8.8.8.8。
目标板上执行pppoe-start。出现connected!提示,说明ADSL拨号成功。
#pppoe-status
pppoe-status: Link is up and running on interface ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:114.249.164.177 P-t-P:114.249.160.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:3 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:30 (30.0 B) TX bytes:37 (37.0 B)
#ping 114.249.160.1可以通。
但是#ping g.cn不通。
#route
estination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
221.231.205.94 * 255.255.255.255 UH 0 0 0 ppp0
default 192.168.1.0 255.255.255.0 UG 0 0 0 eth0
可以看到默认路由是错的。
route del default
删除默认路由。
然后
#pppoe-stop
#pppoe-start
#route
estination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
221.231.205.94 * 255.255.255.255 UH 0 0 0 ppp0
default * 0.0.0.0 UG 0 0 0 ppp0
可以看到现在默认路由已变为ppp0
ping g.cn成功。
最后,将上述所有生成的可执行文件全放在一个bin文件夹内,配置文件放在conf文件夹内。
在两个文件夹同级目录下写一批处理文件adsl_link.sh,如下:
cp $PWD/bin/* /usr/sbin
rm -rf /etc/ppp
mkdir /etc/ppp
cp $PWD/conf/* /etc/ppp
pppoe-setup
pppoe-start
route del default
pppoe-stop
pppoe-start