摘 要:对嵌入式系统的基本概念、原理和基于ARM的嵌入式Linux应用系统的设计与开发作了介绍;设计开发了一套用于投影机的嵌入式远程监控系统,利用Internet,通过对底层设备驱动编程和上层软件系统的设计开发,客户端可通过浏览器访问嵌入式系统内置的http服务器,将投影机的相关参数直观实时地在Web页面上显示出来,并且可以实现对于投影机现场相关显示参数的设置。
关键词:投影机; Linux; ARM;CGI
投影机网络化正成为投影机发展过程中的一个重要趋势,通过标配的有线及无线网络接口或选配的网络适配器,用户可以通过计算机更方便地向投影机传送显示控制信号,在投影机上显示输出内容,可通过计算机来监控管理投影机。
1 嵌入式计算机系统的特点
嵌入式计算机系统[1]同通用型计算机系统相比具有以下特点:
(1)嵌入式系统通常面向特定应用。与通用型系统的最大不同是嵌入式CPU大多工作在为特定用户群设计的系统中,它通常具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的功能集成在芯片内部,从而有利于嵌入式系统设计趋于小型化,移动能力大大增强,与网络的耦合也越来越紧密。
(2)嵌入式系统是将先进的计算机技术、开云棋牌官网在线客服技术和电子技术与各个行业的具体应用相结合后的产物。这一点决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
(3)嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。
(4)嵌入式系统与具体应用有机结合,它的升级换代也是与具体产品同步进行的,因此嵌入式系统产品一旦进入市场,一般具有较长的生命周期。
(5)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机中,而不是存储于磁盘等载体中。
(6)嵌入式系统本身不具备自举开发能力,设计完成以后用户通常不能对其中的程序功能进行修改,必须有一套开发工具和环境才能进行开发[2]。
2 嵌入式投影机系统的组成
本系统采用目前比较流行的ARM处理器和嵌入式Linux操作系统平台,对投影机进行信息采集,并向局域网中的投影机发出控制命令。在ARM处理器的NAND Flash中,固化了嵌入式Linux操作系统和http服务器,可以将投影机的投影信息及时地传输给用户,同时用户可以方便地通过浏览器修改投影机的投影参数。
首先,用户在浏览器中输入已经联入局域网的投影机嵌入式模块的IP地址,向嵌入式模块的http服务器提出连接请求,输入正确的用户名和密码之后,用户就可以登录系统进行控制。当用户登录系统之后,嵌入式模块首先会通过IPC(进程间通信)的方式和投影机的核心模块通信,投影机设备将当前投影参数读取出来,然后将参数通过IPC(进程间通信)发送给嵌入式模块,嵌入式模块通过TCP/IP协议栈将参数返回给浏览器,用户则通过Web页面直观实时地查看投影机当前的投影信息。用户也可以选择对投影机的投影信息进行修改,如增加投影机投影亮度、对比度、选择Auto Keystone方式等。
系统的整体框架如图1所示。
3 嵌入式投影机应用系统架构详细设计
3.1 硬件平台的选择
基于嵌入式微处理器在嵌入式系统中的核心地位,选择一款恰当的处理器非常重要。目前市场主流的32位微处理器主要有Power PC、68K、MIPS和ARM等。通常在选择微处理器时,需要考虑很多因素,如性能、功耗、价格、配套的开发工具以及市场的供货情况,而ARM在这些方面都具有优势。同时ARM还具有业界领先的RISC体系架构,所以,选择基于ARM核的处理器是最理想的。
本设计采用S3C2410开发板为硬件平台。该平台在尽可能小的电路板面积上集成了64 M SDRAM、64 M Nand Flash、1 M Nor Flash、RJ-45网卡、音频输入与输出、USB Host、USB Slave、标准串口、SD卡插座、,用户按键和一些用户灯等设备接口,并且引出CPU的大部分信号引脚。通过这个平台可以针对S3C2410进行系统级的硬件和软件设计,并且能够很方便地在该平台上进行相关的功能扩展,并进行所需的产品设计。
3.2 系统的软件实现
3.2.1开发平台宿主机的配置
本系统的开发平台选择ubuntu 8.04 LTS。首先从网络上下载vmware workstation的体验版,在Windows XP环境下安装配置好。从网络下载ubuntu 8.04 LTS版本的ISO镜像文件,在vmware workstation虚拟机环境下安装配置好ubuntu 8.04 LTS系统,设置虚拟机中ubuntu系统的网络连接方式为Bridged,通过apt软件包管理程序可以方便地安装配置虚拟机中的ubuntu开发环境,安装系统开发所必须的程序库,如build-essential,samba以及openssh-server等。
3.2.2 开发过程
(1)搭建交叉编译环境
当开发嵌入式Linux软件时,一般都要经过交叉编译。如果是开发PC机上的软件,只要用Linux本身提供的强大的编译器(如GCC)直接编译即可。而一般的嵌入式设备所用的CPU和PC机上的CPU有着不同的架构,这样就要求在PC机上编译出适用于嵌入式设备CPU架构的软件,这就是交叉编译的概念。图2是交叉编译环境图示。
(2)U-boot的移植
嵌入式的软件系统主要由Bootloader、Kernel、嵌入式文件系统以及应用程序等组成。其中,Bootloader是介于硬件和操作系统之间的一层,其作用就好像PC机中的BIOS。系统加电运行后,由系统自动加载,通过这段程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的硬件环境引导到一个合适的状态,以便为最终调用操作系统内核准备好环境。本系统对于bootloader的选择采用Das U-boot,由于U-boot的使用范围相当广,因此很容易找到关于U-boot移植的相关资料。U-boot引导程序分为stage1和stage 2两大部分,stage1中主要包括设备初始化、中断设置、时钟的设置以及存储器初始化等工作,并且采用汇编语言实现,而一些通用功能大多采用C语言实现,放在stage 2阶段执行。
修改cpu/arm920t/start.s文件,start.s文件是采用汇编语言编写的U-boot程序入口代码,完成对底层硬件的初始化。
修改board/smdk2410/nand_read.c中的nand_read_11函数将stage 2阶段的代码复制到ram中。
修改U-boot根目录下的makefile文件完成以后,依次在终端中执行:
Make distclean //清除生成的链接
Make smdk2410_config
Make CROSS-COMPILE=arm-linux-编译成功后,将生成三个文件,其中需要烧到开发板中的文件是二进制的u-boot.bin文件。
(3)裁剪Linux内核
修改根目录下的makefile文件,指定目标平台为ARM,ARCH:=arm,指定交叉编译器,CROSS_COMPILE=/usr/local/3.3.2/bin/arm-linux-gcc内核移植完成后,可以对内核进行配置,一般用“make menuconfig”命令即可,具体的配置要根据自己的软件平台以及应用程序的使用情况来确定,内核要尽可能小,以满足嵌入式系统资源少的特点。
(4)文件系统的选择
cramfs文件系统是专门针对闪存设计的只读压缩文件系统,其容量上限为256 MB,采用zlib压缩,文件系统类型可以是EXT2或EXT3。本系统选择的文件系统正是cramfs文件系统。可通过busybox工具集来制作根文件系统。
(5)CGI部分的设计
要实现网页的交互性和实时更新,就要用到CGI技术。公共网关接口CGI(common gateway interface)是一种服务器与浏览器信息交换的标准接口。从物理上看,CGI程序属于一个外部程序,需要编译成可执行文件,以便能够在服务器端执行,它提供客户端页面HTML代码的接口,完成无法做到的交互功能。CGI建立在C/S机制上,为外部扩展应用程序与Web服务器交互提供了一个标准接口。按照CGI标准编写的外部扩展应用程序可以处理客户端输入的工作数据,完成客户端与服务器的交互操作。因此,如果说CGI是Web能够发展如此迅猛的最大原因也不为过。本系统的CGI部分的主函数(main)中代码截取如图3所示。
(6) 镜像的烧入
通过网络烧入代码可以利用tfttp协议,在主机中开启tftp服务,同时指定镜像文件所在的目录,然后利用超级终端来控制代码的烧入,打印信息。首先需要在超级终端中设置目标板的环境,包括MAC地址、目标板的IP地址、tftp服务器的IP地址,这里需要将目标板和开发主机的IP地址设置在同一个网段,设置完成以后重启目标系统,进入待烧入模式,通过tftpboot、erase、cp.b等命令拷贝镜像文件到嵌入式设备存储设备中的指定地址段。
完全烧入完成后重启目标板上的Linux系统即可。待烧入镜像在nand flash中存放的地址空间如表1所示。
本文主要讨论了应用于投影机设备的嵌入式模块的设计与开发。包括开发平台的选择,配置嵌入式开发的环境,对于Kernel和文件系统的裁剪。最后通过tftp程序将编译生成的镜像文件烧写到嵌入式模块的存储设备中。
参考文献
[1] 孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电出版社, 2006.
[2] YAGHMOUR K. Building embedded linux systems[M]. O′Reilly, 2008.
[3] 叶欣.嵌入式Linux环境下Web页面技术的实现[J].现代商贸工业,2009(1):356-357.
[4] HENKEL J. Software development in embedded linux[M]. Wirtschaftinformatik proceedings, 2003.
[5] 汪小燕,连晓平,董燕,等. 基于TFTP协议的嵌入式系 统开发方法设计与实现[J].武汉:华中科技大学学报
(自然科学版),2006,34(12):56-58.