也是参考了很多文章,其实当初考虑这个课题不是很复杂,因为pppoe是在操作系统上层的,可以说和处理器平台都没有关系的,因此无论是arm7(sep4020),还是arm9,都是一样的,而且已经看到网上有很多人顺利的在2440之类的arm9处理器上移植,所以后面出现的意外着实把我郁闷了一下。
先讲正确的整个移植过程:
整个pppoe的移植主要分成3个部分,内核,pppd,pppoe
第一部分内核:其实这部分准确的来说应该是内核的配置,因为要使用pppoe,首先要内核选项的支持,我用的是linux 2.6.16的内核版本。需要在 -> Device Drivers -> Network device support -> PPP (point-to-point protocol) 中,选中所有ppp选项。
一个非常需要注意的:一定要将Character device,在Character device下选择以下选项:
[*] Unix98 PTY support
一些老版本的内核可能还需要加上Universal TUN/TAP device driver support的选项(和ppp同级的)。
第二部分pppd:这部分相对来说还是很简单的,只需要下载ppp-2.4.1-ppp-2.4.4中的任一版本即可。解压,在终端中输入./configure,然后执行make CC=arm-linux-gcc。进入pppd目录下将已经编译好的pppd文件拷贝至开发板端的文件系统的/usr/sbin目录下,这里有一个测试pppd移植正确与否的判断,在版子上输入pppd,看是否有乱码出来,如果有乱码,恭喜这一步ok了。
第三部分pppoe:类似pppd的交叉编译,先下载rp-pppoe开发包,最好用3.7或3.8版本。进入src目录,先执行./configure,然后对src下生产的Makefile文件进行修改,替换makefile 中的所有gcc为arm-linux-gcc,ar为arm-linux-ar,对src目录下的libevent目录下的Makefile也作此修改,两个makefile改完之后,依次执行make,make install,把在pc主机下的/usr/sbin目录下生成的关于pppoe的所有文件(pppoe,pppoe-server,pppoe-sniff,pppoe-relay,pppoe-setup, pppoe-start,pppoe-stop,pppoe-status,pppoe-connect)拷贝到开发板的/usr/sbin目录下(我使用的是网络文件系统,所以是/nfs/usr/sbin)。在开发板端文件系统的etc目录下新建一个ppp文件夹,再把rp-pppoe文件夹下的configs文件夹下的所有文件拷贝至刚新建的ppp中。
开发板端的配置:接好网线后,直接输入pppoe-setup,安装提示输入你的信息,在dns那儿可以暂时选择server(这会使接下来ping的时候只能用ip ping不能直接跟网址,如果你知道你所在网络的接入商的dns的话就填进入),防火墙我是选的0,ok,如果这个时候就使用pppoe-start开始连接的话,很大情况下你会得到timeout的提示,那我们该怎么做呢?需要在dev目录下创建一个pts的文件夹,进入pts,创建节点mknod 0 c 136 0; mknod 1 c 136 1。每次链接都需要建立,蛮麻烦的吧,所以还是把这几条指令写进启动脚本吧。相信这样的话,一般您都会得到一个connect信息。
正事说完,谈谈我碰到的那个“意外”吧!我那个意外不是刚才提到的pts文件夹,还是可恶的学校宽带,宿舍宽带是使用pppoe的,至少我是这么认为的(因为在创建连接的时候的确是选择pppoe的),但是事实上不是的,的确宿舍宽带也不是dsl的,我傻愣愣的每天都拿着开发板到宿舍去调试,结果得到一大堆莫名其妙的错误,连google大仙都无法解决,比如:
Connect: ppp0 <--> /dev/pts/0
Warning - secret file /etc/ppp/pap-secrets has world and/or group accespppoe: read (asyncReadFromPPP): s
Warning - secret file /etc/ppp/pap-secrets has world and/or group access
Remote message: Limit Users Err
PAP authentication failed
Connection terminated.
pppoe: read (asyncReadFromPPP): Session 11215: Input/output error
LCP: timeout sending Config-Requests
Connection terminated.
还害我浪费N多时间穿梭在实验室和宿舍中,35度的南京天可不是一般的郁闷。呵呵,最好一怒之下决心一定要在实验室建一个pppoe服务器,建好pppoe服务器一连,原来我的arm pppoe移植已经ok,只是学校网络的关系让我两天都在苦思冥想一个根本就不存在的伪命题。
事实上建pppoe服务器是很简单的,非常适合工作场所没有adsl拨号的环境,下一个raspppoe的软件就可以了。贴一下步骤:
1.下载RASPPPOE( 0.99版)
2.安装RASPPPOE协议
本地连接-->属性-->常规-->安装-->协议-->添加-->从磁盘安装-->浏览-->“找到自己RASPPOE所在的目录下的那个winpppoe.inf” -->打开-->继续……………即可
3.新建拨入的链接
新建连接向导-->选择高级连接-->接受传入的连接-->选择你的网卡(如果不安装PPPOE协议这里就看不到网卡)-->不允许虚拟专用连接(其实都无所谓,如果你需要建立vpn服务器的话自然不能选这个)-->选择允许拨入的用户(这个用户列表就是本机的用户列表,你可以在管理工具,计算机管理,用户和组来设置)-->在网络软件这一步选中Internet协议,设置指定的IP地址池,用于给拨入用户分配IP
4.有条件的话可以找另一台机器测试下PPPoE拨号是否成功(建立新连接-->连接到Internet-->手动设置我的连接-->用要求用户名密码的宽带连接来连接-->然后一直下一步就可以了;建立成功后运行新建的这个连接,在属性框中的常规选项卡填入服务器的IP地址,确定后即可用允许的那个用户名和密码来拨入,之后在dos-shell下用ipconfig 就可以看到新连接所获得的IP地址)
注意:这个验证的PPPOR拨号是服务器、客户机在同一个VLAN里面完成的,因为PPPOE请求是二层广播。
有这个需求的人可以参考一下这篇博客,图文并茂,非常good!
http://hi.baidu.com/haoqianga/blog/item/cb02e419ea4d5a4343a9ad8c.html