Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1298702
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类:

2011-12-08 20:38:58


最近在我的mini2440开发板上试了友善新发布的linux2.6.29和qtopia2.2。确实不错。可惜,友善还是没有提供u-boot。不过,我
移植好的u-boot可以正常引导友善的新内核。友善在qtopia2.2内集成了konqueror浏览器,可以实现mini2440上网浏览,我有电信
的ADSL宽带,但qtopia2.2好象没有提供ADSL拨号的功能,于是,决定自已移植一个,以实现ADSL拨号上网。
我的adsl猫是电信给的带有无线路由的猫,是中信公司的

移植需要ra-pppoe和ppp。我用的是rp-pppoe3.8和ppp-2.4.4的组合。
下载ra-pppoe3.8后,解压源码。进入源码目录。再进入src目录。
然后,要进行交叉编译。根据经验,使用./confiugre --host=arm-linux的命令进行配置,但不能通过,confiuge执行后,报
checking for Linux 2.4.X kernel-mode PPPoE support... cross-compiling, default:
no
checking packing order of bit fields... no defaults for cross-compiling
的错误,然后退出了confiugre程序。
configure程序其实是一sh脚本,用编辑器打开,仔细查看后,原来此脚本根本没对cross_compiling提供支持,当检测到你要进行
交叉编译后,就自动退出了。解决方法一是自已在脚本中加入相关代码,一是用./configure生成非交叉编译的makefile,然后再手
工修改其中的gcc为arm-linux-gcc。我对sh脚本的编写不熟,因此决定采用第二种方法。
执行./configure后,程序报生成两个makefile文件,一是在src 下的,一是在libevent下的。我直接替换这两个makefile文件中的
gcc为我用的arm-linux-gcc。我用的是友善公司提供的arm gcc 4.3.2 eabi版。 编译成功完成。
编译完成后,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.4.tar
解压。进入源码目录。
执行configure。
完成后。执行make,这里要进行交叉编译。因此,我在这里指定CC为arm gcc,整个命令为
make CC=arm-linux-gcc
编译完成后,进入pppd目录,将生成的pppd可执行文件拷贝到mini2440文件系统的/usr/sbin下。
试运行一下pppd,假如出现如下提示
pppd: pppd is unable to open the /dev/ppp device.
You need to create the /dev/ppp device node by
executing the following command as root:
        mknod /dev/ppp c 108 0
那么就应该按照提示执行命令mknod /dev/ppp c 108 0,再运行一次pppd,假如有乱码出现就说明安装pppd成功了。
我在按上面的方法做了后,出现下面的信息。
./pppd: This system lacks kernel support for PPP.  This could be because
the PPP kernel module could not be loaded, or because PPP was not
included in the kernel configuration.  If PPP was included as a
module, try `/sbin/modprobe -v ppp'.  If that fails, check that
ppp.o exists in /lib/modules/`uname -r`/net.
See README.linux file in the ppp distribution for more details.
这是因为友善的新内核linux2.6.29在编译配置时,没有加上对ppp的支持。重新配置编译内核
在 -> Device Drivers -> Network device support  -> PPP (point-to-point protocol)  中,选中所有ppp选项。
退出,保存配置,重新执行make uImage.
将uImage下载到开发板上重启系统后。再执行pppd,等一会,出现乱码,说明pppd工作正常了。
执行pppoe-setup,根据提示拨号所需的参数。要确定rp pppoe的配置文件所在的目录即/etc/ppp是可写的。否则,参数不能保存。
我的pppoe配置为
Ethernet Interface: eth0
User name:          njkd*********
Activate-on-demand: No
DNS addresses:      Supplied by ISP's server
Firewalling:        NONE
执行pppoe-start后。出现connected!的提示,说明ADSL已拨号成功。
但又发现问题,那就是不能ping通外网。只能ping通本地IP和pppoe服务器的IP。pppoe服务器的IP是网络服务网提供的。可以使用
ifconfig ppp0查看到。在我的机子上信息如下:
ppp0      Link encap:Point-to-Point Protocol
          inet addr:222.94.249.222  P-t-P:221.231.205.94  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:218 errors:0 dropped:0 overruns:0 frame:0
          TX packets:242 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:187984 (183.5 KiB)  TX bytes:20730 (20.2 KiB)
在这里可看到开发板获得外网地址是222.94.249.222。pppoe服务器的地址是221.231.205.94。
能ping通pppoe服务器,说明连接已能正常工作。于是使用route命令查看linux路由表,信息如下
estination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         UG    0      0        0 ppp0
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
可以看到默认路由的网关没有设置,于是试着删除这个路由
route del default
再增加路由route add default gw 221.231.205.94
完成后查看路由表,执行route
路由表如下。其中,默认路由的网关为pppoe服务器的IP地址。
estination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         221.231.205.94  0.0.0.0         UG    0      0        0 ppp0
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
再次ping 。终于ping通了。打开友善发布的qtopia2.2中的浏览器,可以上网了。不过,中文不能正常显示。
至此,rp-pppoe3.8的移植工作完成。
另,我又尝试了,用wifi无线网上是否可以连接。结果证明,在无线网卡与adsl的猫正常连接的情况下,可以连接,也能上网。
但要重新用pppoe-setup配置参数。
补充说明一下,关于wifi无线网卡的移植,我的博客上有文章详细说明。
其中说明的在我移植的linux2.6.27中移植无线网卡的方法
,经我试验,在linux2.6.29上也完全可用。
 
欢迎朋友与我交流:qq:945685172
阅读(378) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~