随着CPU制造工艺的飞速发展,越来越多的高性能、低功耗的嵌入式微处理器应用到我们生活中的各个方面,ARM11采用ARM公司新一代的指令架构ARMv6,其主频最高可达到1GHz,功耗低至0.4mW/MHz,采用8级流水线技术。另一方面,它对存储器系统进行改善,使其更加适用于操作系统对硬件上的需求。
Linux是在Unix的基础上发展起来的,它是一种安全、稳定、免费并且能移植到多种架构的处理器平台。Linux分为多个模块,可裁剪一些次要的模块以减小程序量,从而更好地满足微处理器对功耗和成本的要求。
1 嵌入式Linux 软件开发环境的搭建
1.1 嵌入式Linux 开发环境简述
嵌入式Linux驱动程序的开发需在以Linux为内核的操作系统系统下进行,为方便开发时的数据传输及信息反馈,安装VMware虚拟机软件,并且在其中安装Ubuntu 10.10操作系统。需要注意的是,操作系统的版本不能太低,因为版本过低,很多工具都无法找到对应的支持包,导致一些软件的失效。
Ubuntu是以Linux为内核的操作系统,在Ubuntu安装之初,系统会要求你输入要新建的账户和密码,这个新建的账户用于Ubuntu第一次启动时的默认登录账户。Ubuntu10.10支持图形用户界面,但Linux中还有很多功能都不能以图形界面的形式表达。
因此,要学好Linux,就必须对Linux的命令行有比较深入的了解。
Ubuntu10.10会自动安装VMware工具,用于虚拟机系统与宿主机之间的文件传输等,即用户可以直接拖动宿主机的文件到虚拟机中。若没有自动安装,则选择VM项下的Install VMware Tools进行安装。
Linux对普通用户有一定的权限限制,如安装一些支持包时就必须以根用户的权限才能进行操作。为方便每次启动Linux时都以根用户登陆,可在第一次登陆时进入超级终端,并打开/etc/gdm目录下的用户配置文件:custom.conf.即每次登陆时都以root的权限进行登陆。
1.2 交叉编译器
交叉编译器是一种计算机环境中运行的编译程序,能编译出可在另外一种环境下运行的代码,我们就称这种编译器为交叉编译器。该文中,我们要在CISC X86架构的普通个人电脑中编写代码,编译后的程序在RISC ARMv6架构的ARM11微处理器中运行。
1.3 网络文件系统
NFS是Network File System的简写,即网络文件系统。NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。在嵌入式开发中,NFS使得开发时硬件平台和电脑间文件的传输极为方便。
1.4 网络编程实验
实现典型的客户机/服务器程序。客户机、服务器模式要求每个应用程序应由两部分组成:一个部分负责启动通信,另一个部分负责对它进行应答。他们通常运行在不同的主机上,分别被称为客户机和服务器。服务器是指能在网络上可提供服务的任何程序。客户机是指用户为了得到某种服务所需要运行的应用程序。一个服务器接受网络上客户机的请求,完成服务后将结果返回给客户机。
2 嵌入式Linux硬件平台的搭建
2.1 linux 引导程序
嵌入式linux引导程序一般选用u-boot,全称Universal Boot Loader ,是遵循GPL条款的开放源码项目。首先设置拨码开关配置ARM11从SD卡中读取u-boot,再通过超级终端,将读取到的u-boot拷贝到ARM11板载的NAND Flash中,再设置启动方式配置ARM11从Flash中启动,至此,完成嵌入式linux在ARM11平台下引导程序的加载。
2.2 linux 内核
完成u-boot的加载后,内核文件可以直接通过超级终端从PC中传输到嵌入式开发平台中。通常是把内核文件传输到nandflash特定的地址中暂存起来,再通过烧写命令将该内核文件烧写到特定的内核地址中去即完成嵌入式linux内核的烧写。
2.3 嵌入式Linux 文件系统
嵌入式Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有文件系统的结构,所有Linux 用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。常用的文件系统为yaffs2文件系统和cramfs文件系统。Yaffs是第一个专门为Nandflash存储器设计的嵌入式文件系统,适用于大容量的存储设备,并且是在GPL协议下发布的。Cramfs文件系统是专门为NorFlash设计的只读压缩的文件系统,采用实时解压缩方式,小巧且快速。
3 结束语
基于ARM11在Linux平台下网络通信程序的流程图总结如图2所示。
本文就目前对于嵌入式linux及其网络通信进行阐述,以嵌入式为知识背景,该设计主要由六个过程(NFS、交叉编译器、网络编程实验、linux引导程序、linux内核、嵌入式Linux文件系统)组成。其他嵌入式Linux应用程序的编写过程也与此类似。