目前嵌入式技术已经广泛应用于各个领域,设计采用S3C2440处理器和Linux系统实现的无线拨号上网终端在各个领域有着广泛的应用空间。例如在视频监控方面,结合无线网络技术,使监控的方式更加多元化,使监控的面积和距离都得到了大幅提高,摆脱了物理通道的约束,可以说是未来监控系统的发展方向。终端采用ARM9嵌入式处理器,主频最高可达400 MHz,而且其内部集成了LCD控制器、内存控制器、Flash接口电路以及双通道的USB总线,处理器也支持Linux操作系统,而Linux操作系统也拥有现代操作系统所具备的内容:抢先式多任务处理、内存保护、虚拟内存并支持TCP/IP的众多协议。因此,将它们用于无线拨号上网终端中时,可以利用ARM9低功耗,高性能的特点和Linux良好的网络支持功能完成拨号上网和进一步的具体应用。
1 终端硬件平台
硬件部分采用核心板加底板的结构,核心板是以S3C2440作为处理器,并配有64 MB的SDRAM,256 MB/1 CB的Nand Flash和2 MB的Nor Flash;底板上添加了串口、USB接口、100 Mbit·s-1以太网RJ-45接口和SD卡等基本外围电路。另外,单独开发了3G模块的电路板,目的是把3G模块的miniPCI接口通过硬件转化为USB接口,这样不仅方便3G模块与核心板的连接,而且也方便了对3C模块在Linux系统下驱动的处理,3G模块采用华为EM770W。
2 软件平台
2.1 PC机软件平台
系统软件平台以Linux操作系统为基础,在PC机上安装虚拟机,然后在VMware Workstation上安装Redhat Enterprise 5,内核采用Lin ux-2.6.32.2,然后在Red hat5的Linux上建立ARM—Linux—gcc的交叉编译环境,ftp以及samba服务器等。
2.2 终端的系统移植
系统移植包括:配置Linux内核,向内核中添加3G模块的驱动和PPP协议的支持,并重新编译和下载。
在内核配置之前,首先要进入内核目录,执行make distclean命令将以前相关的临时文件、配置文件、中间文件和路径文件等清除。再开始配置内核:第一步,cp config_mini2440_w35.config;第二步,make menu config进入基于文本模式的菜单型选项,添加USB转串口的驱动和PPPD协议支持的选项;第三步,对内核进行编译,执行命令make zImage,编译成功后在/arch/arm/boot目录下将生成zImage烧写文件;第四步,制作目标板的文件系统映像,在mini2440的目录下执行命令mkyaffszimage-128M rootfs-qtopia-qt4 rootfs-qtopia-qt 4.img,这样在当前目录下就生成了相应的文件系统映像;第五步,烧写文件,连接好串口和USB电缆,打开超级终端和DNW软件,硬件上电并选择为NOR Flash启动,进入BIOS功能菜单。首先选择功能号[f]开始对Nand Flash进行分区;然后选择功能号[v]开始下载supervivi,下载完毕,BIOS会自动烧写supervivi到NAND Flash分区中,并返回主菜单;安装Linux内核,在BIOS主菜单中选择功能号[k],开始下载Linux内核zlmage;安装根文件系统,在BIOS主菜单选择功能号[y],开始下载ysffs根文件系统映像文件rootfs—qtopia—qt4.img,此过程大概需要2 min,下载的文件越大,烧写的时间就会越长;下载完毕后,拔下USB连接线,在BIOS主菜单选择功能号[b],启动系统,进一步进行屏幕校正和相关设置。
3 拨号程序分析
3.1 PPPD拨号程序的简要分析
PPPD是一个用户空间的后台服务进程(Daemon),负责与3C模块进行通信会话来进行必要的初始化设置,然后开始按照协议要求的步骤进行拨号。初始化设置是由PPPD自带的辅助工具CHAT完成,这个程序利用AT指令和3G模块进行通信,主要是交互一些拨号的参数设置、进行拨号的用户名和密码、是否采用数据加密等连网参数。
拨号流程和主要函数如下:
(1)主程序pppd_start(),这个函数首先是做初始化工作,对几个所使用的协议进行初始化,这里所用到的分别是lcp_protent,chap_ protent,ipcp_protent。
(2)完成初始化后,正式开始进行协议的协商,PPPD协议协商流程,如图1所示。
(3)接下来开始发起lcp通信,start_link->lcp_lowerup(),这个函数首先和内核的PPP协议进行协商,主要是MTU等链路参数,协商后设置LCPDE-LAYED_UP标志,把lcp_delayed_up函数设置给一个定时器,这个定时器会根据DELAYED_UP标志周期执行前赋给lcp_delayed_up,在这里函数将主动发起lcp协议请求,之后等待对方回应。start_link函数结束返回到pppd_start()主函数继续执行。
(4)主函数pppd_start会进入一个无限循环,这个循环主要执行函数handle_events()和get_input()。handle_events主要处理接收到的信号,get_input负责处理接收到的数据包。
3.2 配置拨号脚本
(1)需要配置的拨号脚本文件有3个,分别是:wcdma,chat—wcdma—connect和chat—wcdma—disconnect。把它们存放在/etc/PPP /peers目录下。注意要在wcdma中添加persist命令,保证3G网络在一段时间断开后能自动再连接。
(2)设置开机自动拨号上网,在系统的开机启动脚本中添加shell命令:/etc/PPP/rmlock,判断并删除无效的串口的lock文件,保证成功拨号。/usr/bin/pppd call wcdma,使其自动拨号。/usr/bin/sleep 15,保证15 s的拨号时间。
4 测试
4.1 驱动检测
将电路板的启动模式设置为Nand Flash启动,则Linux系统会在通电后自动运行。系统启动后,会在/dev目录下生成PPP设备节点,可用ls/dev/PPP-1命令查看是否存在。在电路板的USB HOST口连接3C模块的电路板,若超级终端上有如图2所示的信息输出,则可知3G模块的驱动已经正确添加到内核中了。
4.2 拨号测试
在超级终端命令行下,输入命令:pppd call wcdma&,结果如图3所示,说明拨号成功。
然后记录出现的两个DNS地址,找到/etc目录下的resolv.conf文件,将分配得到的两个DNS服务器地址:202.102.224.68和202. 102.227.68添加到文件中,这样就可以进行域名解析了。Ping外网测试,ping119.75.217.56检查是否能够正常访问网络。结果如图4所示,说明网络连接正常。
5 结束语
设计和实现了基于S3C2440和Linux的无线拨号上网终端,对其中3G拨号上网所用到技术进行了探讨和分析。利用ARM高速的实时数据处理能力和Linux的网络支持功能,保证了终端设备工作的稳定性和实时性,具有一定的实际意义。有待注意之处:(1)硬件3G模块的电路板有必要集成到底板上,这样可以简化系统设计,降低成本。(2)Linux系统内核要根据具体的实际应用情况进行裁剪,这样不仅节省了存储资源,而且还提高了系统的处理速度。