1回答

0收藏

基于LPC2210的uClinux嵌入式系统的应用研究

其他 其他 5410 人阅读 | 1 人回复 | 2007-08-03

作 者 :辽宁科技大学?电子与信息工程学院??王??卉?吴庆洪
关键词: 关键词:?LPC2210??????嵌入式系统??????uClinux??????内核
?
1? 引言
??? uClinux(Micro-control-Linux)即“微控制器领域中的Linux系统”。当Linux内核还是2.0时,uClinux就产生了。uClinux的内核始终与主流Linux内核保持同步。到现在为止,uClinux已经可以支持2.6.x版本的内核。? uClinux是专为无存储器管理单元(MMU)的微控制器打造的嵌入式Linux 操作系统。嵌入式uClinux有以下的优点:完全开放源代码,使得学习、修改、剪裁成为可能,从而降低整个系统开销与能耗;性能好,为全世界的自由软件开发者提供技术支持,网络性能强大,软硬件移植容易,稳定性较好;开发周期短,因为有许多公开的代码可以参考和移植。为了与硬件体系结构兼容,本文采用稳定的内核版本2.4.24[1]的源代码进行系统内核的研究,并介绍了内核和文件系统的配置与移植过程。
??? uClinux嵌入式系统的硬件平台,选用由周立功单片机发展有限公司开发的一款嵌入式系统开发平台SmartARM2200。平台上使用PHILIPS 公司生产的无MMU的ARM微控制器LPC2210[2],主要功能单元描述如下:(1)处理器内核为32位高级RISC微处理器,可实现最大为 60MHz的CPU操作频率;(2)内部控制模块有:144个通用GPIO端口,2个32位定时器(带4路捕获和4路比较通道)以及9个外部中断;(3)可通过个别使能/禁止外部功能来优化功耗;(4)双电源:CPU操作电压范围:1.65~1.95V;I/O操作电压范围:3.0~3.6V;(5)外部控制模块有一个LCD控制器,2个16C550工业标准UART、高速I2C接口(400 Kbps)和2个SPI接口,2M字节的NOR FLASH(可用于存放bootloader)、8M字节的SRAM和16M字节NAND FALSH(用于存放uClinux内核映像以及文件系统映像文件)等。lpc2210的这些特点能满足移植uClinux嵌入式系统的要求。

2? 系统结构
??? uClinux是一个单一内核的操作系统。但是也具有微内核的一些特点,如:模块化设计、支持内核线程和动态装载内核模块等特点[3]。系统主要由硬件设备、操作系统内核和用户程序三部分组成。根据编译后内核目录下的文件组织形式及与用户和硬件之间的关系,可将操作系统内核分成内核初始化、系统调用接口、文件系统、内存管理、进程间通信以及设备驱动程序、网络等几个主要组成部分。系统各部分的基本结构如图1所示。

?


图1? 系统基本结构图

?
2.1 系统调用接口
??? 系统调用接口是用户程序与操作系统内核之间的接口。当uClinux系统启动以后,内核对整个系统的运行不再进行直接控制。如果用户程序要与内核进行交互,只能通过内核提供的系统调用接口。通常用户程序先调用C库函数,再由C库函数通过系统调用接口访问硬件设备和其他系统资源。本文使用的C库函数是经过裁减后的适用于嵌入式设备的uClibc库,它由GNU glibc库移植而来。
2.2 驱动程序
??? 设备驱动程序是操作系统内核与机器硬件之间的接口,是内核代码的一部分。首先设备驱动程序完成设备的初始化。当硬件设备要与内核进行交互时,就会产生一个中断信号,通过设备驱动程序所预定义的入口点进入内核。入口点将这个信号保存在栈中并保存被中断任务的寄存器的值。内核提取保存在栈中的中断信号,再由内核调用相应的中断处理程序。这样就可以把数据从内核传送到硬件或从硬件读取数据。实现设备与内核的数据交换。应用程序可以像操作普通文件一样对硬件设备进行操作[4]。
2.3 文件系统
??? uCLinux支持多种文件系统,建立在Flash上的文件系统通常有romfs,Ext2,Ext3,JFFS和NFS等。其中romfs是 uClinux的默认根文件系统,是最简单的只读文件系统。内核支持romfs文件系统比支持其它文件系统需要更少的代码,而且romfs文件系统相对简单;同时因为romfs是只读文件系统,还可防止根文件系统被意外修改。
??? 但是,romfs文件系统并不支持动态擦写保存。对于系统需要动态保存的数据采用Ramdisk的方法进行处理。Ramdisk最好的文件系统实现就是 Ext2。在内存中起缓存作用,具有高速和简单优点,且uClinux系统每次启动都是从已知的文件系统状态开始的,所以对于嵌入式存储空间来说,也是一种优势。如果希望在掉电时,信息仍然可以保持,那么就要把它写到Flash中。这时,就可以使用JFFS这一文件系统。网络文件系统NFS使目标机能够共享宿主机的目录,为交叉编译提供方便。
2.4 内存管理
??? uClinux针对没有内存管理单元(NOMMU)的嵌入式处理器采用实存储器管理策略(real memory management)。uClinux仍然采用存储器的分页式管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。系统对内存地址的操作都是直接对物理内存进行的,所有程序中访问的地址都是实际的物理地址。
2.5 进程管理
??? uClinux的进程调度沿用了Linux的传统,系统每隔一定时间挂起进程,同时系统产生快速和周期性的时钟计时中断,并通过调度函数(定时器处理函数)决定进程什么时候拥有它的时间片。然后进行相关进程切换,这是通过父进程调用fork函数生成子进程来实现的。uclinux的fork等于 vfork。uclinux系统fork调用生成进程后,要么子进程代替父进程执行(此时父进程己经sleep)直到子进程调用exit退出,要么调用 exec执行一个新的进程,这个时候将产生可执行文件的加载。

3? 建立目标平台
??? 本文选用PHILIPS公司生产的无MMU的ARM微控制器lpc2210,将uClinux内核和文件系统移植到Flash中,创建出一个基于uClinux的目标系统。过程如下:
3.1 建立交叉编译环境
??? 由于目标平台处理器是ARM,因而首先需要安装GCC针对ARM的编译器。适用于uClinux的编译器为arm-elf-gcc。
??? 接下来安装uClinux。将uClinux源码包uClinux-dist-20040408.tar.gz拷贝到目录如/home/src下,并解压。
??? 然后,为LPC2210芯片打补丁。在uClinux平台内核配置的时候将会有LPC2200的选项。将微控制器芯片的补丁文件uClinux-dist-20040408-lpc-??? chy-cmj.patch拷贝到当前目录下,并执行:
??? # cat uClinux-dist-20040408-lpc-chy-cmj.patch|patch-pl-d-uClinux-dist
??? 打过补丁之后,将分别在uClinux-dist文件夹的linux-2.4.x/arch/armnommu/、linux- 2.4.x/include/asm-armnommu/arch-lpc/、linux-2.4.x/、user/gdbserer/目录下多了许多配置文件的源代码,在配置内核过程中这些代码就是增加的关于ARM和LPC2200系列的配置选项。
3.2 配置uClinux内核
??? 采用文本菜单配置方式。执行make menuconfig后,就可以根据需要对内核进行裁减:
??? Vendor/Product Selection选项中厂商/产品选择PHILIPS/lpc2200。? Kernel/Library/Defaults Selection内核版本选择与ARM体系结构兼容的版本linux-2.4.x,库版本选择适用于嵌入式设备uClibc。
??? 如果要定制自己的内核和文件系统,就选择进行如下配置。在选项??? Customize Kernel Settings中根据需要定制内核。基本的uClinux内核大小只有不到600MB。在内核定制选项中,用户可以根据需要选择其中的许多功能,但这样会增加编译后的内核大小。因此,通常根据所选的Flash和sram大小来删减定制内核,以满足实际需要。
??? 选项Customize Vendor/User Settings用来定制厂商和用户设置。在这里选中的程序将会出现在romfs映像文件中。用户自己填加的程序也将出现在这里,被选择后编译进映像文件中。所以也要根据系统资源是否充足来选择。
??? 定制完内核和文件系统后,退出并保存。之后,建立源代码文件依赖关系:
??? #? make? dep
??? 编译uClinux内核:
??? #? make
??? 编译结束在linux-2.4.x目录下会有一个linux.bin文件,是编译好的内核映像文件,为elf格式,romfs.img是RAM盘映像文件,用来创建内核使用的根文件系统。
3.3 创建文件系统
??? 创建文件系统要使用设备loopback device。假定在uClinux-dist目录下,首先,生成文件名为init.img,大小为500k的虚拟盘设备,执行:
??? # dd if=/dev/zero of=init.img bs=1024 count=500
??? 创建init.img块设备的文件类型为ext2:
??? # mke2fs-m0-F init.img
??? 在当前目录下建立ram和rom两个目录,并将romfs.img拷贝到当前目录下。通过loopback device将init.img和romfs.img分别挂载到ram和rom目录下。然后在ram目录中建立ramfs中需要的根文件目录,如图2所示。

?


图2? 操作系统目录结构

?
??? 根据需要将rom中目录etc、bin下的文件分别拷贝到ram对应的目录中。然后在ram/dev目录下创建字符设备节点:串口和控制台设备,用于终端通信。最后卸载init.img和romfs.img,生成文件系统的映像文件init.img。
最后,将内核映像文件linux.bin和根文件系统init.img下载到目标系统中的FLASH里,以进行uClinux内核实验。

4? 应用开发实例
??? 交叉编译环境建立完成后,就可以在这个平台上进行应用程序的开发了。下面我们利用开发板上的硬件资源编写一个简单的液晶显示应用程序。
4.1 液晶模块的硬件设计
??? 系统采用带有HD66781和HD66783液晶控制驱动器的彩色液晶显示器TFT6758。该显示器模块为240×320像素,内带白光LED背光灯。可以使用8位、16位或18位总线方式与控制器连接。为了得到更高的数据传输效率,设计电路时采用了16位总线接口,16位显示数据通过 DB17~DB10、DB8~DB1接口来实现。使用LPC2210的P0.22控制液晶模块复位;液晶模块的CS、WR和RD引脚分别与LPC2210 的片选、写和读信号连接;16位总线的指令操作地址为0x83000000,数据操作地址为0x83000002。
4.2 液晶显示的软件设计
??? 在uClinux-dist/user/目录下新建应用程序目录MyDisp,并编写应用程序。
??? 首先,对液晶模块的16位总线的指令操作地址、数据操作地址和复位等寄存器进行设置。
??? 其次,初始化数据结构。定义TFT6758初始化数据结构为:
??? typedef?struct
??? {? uint16?type;
uint16?com;
uint16?dat;
uint16?dly;
??? }? STCOM_INI;
??? 其中type表示命令类型,如HD66781_COM或HD66783_COM;com表示命令字;dat表示填充到命令字中的数据;dly是命令的延时控制。 液晶初始化流程如图3所示。

?


?图3? 液晶初始化流程图

?
??? 最后,编写液晶模块的显示函数Disp_Pic()。显示数据为一个去掉文件头的565格式图片。编译这个应用程序,生成名称如MyDisp的目标文件。
4.3 应用程序的添加
??? 进入uClinux-dist/config/目录下,在config.in文件最后增加菜单,使My LCD Application出现在用户程序配置的主菜单上:
??? mainmenu_option next_comment
??? comment ‘My LCD Application’
??? bool ‘display’ CONFIG_MY_DISPLAY
??? comment “Display My Picture.”
??? Endmenu
??? 然后在Configure.help文件中为Display My Picture增加文本描述信息:
??? CONFIG_MY_DISPLAY
??? This is a program to display My picture.
??? 再次进入uClinux-dist/user/目录,在Makefile文件中增加一行源文件的路径信息:
??? dir_$(CONFIG_MY_DISPLAY)+=MyDisp
??? 最后,重新编译内核。在进行内核配置时,选择“Customize Vendor/User Settings”对用户程序进行定制。进入主界面后就会看到多出的“My LCD Application”选项,选中后保存退出。重新编译内核。编译完毕后,在uClinux-dist/romfs/bin目录下,将会有MyDisp 文件,这就是编译成功的用户程序。可以参照上面介绍的方法将其拷贝到文件系统中,作成映像文件下载到目标平台中。MyDisp程序在目标平台的bin目录下,执行这个应用程序,就会显示出指定的图片。

5? 结束语
??? 本文以LPC2210为硬件目标系统,分析了uClinux系统的基本结构,并对内核和文件系统进行了移植。最后编写一个液晶显示程序,来说明应用程序的添加过程。基于LPC2210平台的uClinux操作系统移植性好,性价比高。因此利用uClinux操作系统丰富的软件资源和LPC目标平台上的硬件资源,可以广泛地应用于控制系统中。具有很好的研究和应用价值。

分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

心轨无痕

发表于 2007-8-6 08:33:54 | 只看该作者

RE:基于LPC2210的uClinux嵌入式系统的应用研究

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条