张伟杰 李明理
(1:吉林建筑工程学院计算机科学与工程学院,长春 130118;2:大连理工大学软件学院,大连 116000)
近些年,嵌入式系统开发已经成为信息产业的研究热点.基于ARM硬件平台及Linux操作系统的嵌入式产品应用开发已成为主流.而在嵌入式的开发过程中,针对目标平台的操作系统移植成为影响嵌入式产品开发进度的一个关键因素.
嵌入式Linux系统的软件结构如图1所示[1];嵌入式Linux系统开发流程如图2所示.
图1 嵌入式Linux系统的软件结构平台
图2 嵌入式Linux系统开发流程
由于一般嵌入式开发系统存储大小有限,所以在裁剪和定制Linux运用于嵌入式系统之前,通常都要在PC上建立一个用于目标机的交叉编译环境,完成嵌入式系统的开发.如图3所示,建立一个交叉编译工具链是一个相当复杂的过程,网上有一些编译好的可以下载.
图3 交叉编译环境
2.1.1 Linux系统的抽象结构
Linux操作系统的内核结构从层次上来说,是整体式的结构.其主要组成结构如表1所示[2].
表1右边是从操作系统的层次结构进行分层,左边是从基本功能模块的角度来对Linux系统进行分层.
2.1.2 Linux内核子系统与系统移植
Linux内核功能有进程管理、内存管理、中断和异常处理、设备控制、文件系统和网络接口.从典型的ARM平台的系统移植实例的分析来看,系统移植的工作主要集中在中断异常处理、文件系统、设备控制部分.主要是由于这几个部分和ARM平台的系统之间关系密切,相对来说,设备控制是移植中工作量最大的部分[3].
表1 Linux操作系统结构
2.2.1 分层结构
Linux内核的设计吸取了层次结构和对硬件抽象层的思想,对内核进行分层,以便将硬件相关部分和操作其它上层实现分离开来,从而增强了系统的可移植性,具体分为硬件直接相关层、硬件抽象层和操作系统内核层.其中硬件直接相关层主要包括由于处理器体系结构和指令集不同而需要进行相应实现的部分;硬件抽象层是为了屏蔽底层的硬件细节,并为上层提供一个逻辑上统一的硬件环境接口及各种硬件平台上操作系统的代码重用而引入的机制;硬件无直接相关的操作系统内核层主要包括进程、内存和设备管理,文件系统及其它和底层设备不直接相关的较高层实现[4].
2.2.2 面象对象思想
Linux内核主要是用非面向对象的C语言编写而成,但是Linux内核中大量的借鉴和使用了面向对象的思想.虽然C语言本身没有提供面向对象的语法支持,但是在Linux中通过使用结构体和函数指针实现了面向对象机制的部分模拟.
本次移植目标系统采用的是Intel Xscale系列处理器PXA255(ARM核),该处理器具有体积小、耗电低、处理能力强、可靠性高等特点,非常适合工业现场控制产品的开发.主要部件:处理器:32位RISC结构400 MHz INTEL PXA 255;FLASH:E 28 J 3 A-150 X 2,32 MB;SDRAM:K 4 S 561632 CX 2,64 M;液晶显示器:6.4寸STN;串口:PXA 255内置2个串口;网口:一个10 BASE-T以太网接口[5].
具有的软件平台:采用的内核版本是linux-2.4.18,交叉工具链是arm-linux-Xscale-gcc-3.2.
(1)建立自已开发板的目录PXA 255,并将u-boot/board/xaeniax/目录中的所有文件拷贝到u-boot/ board/PXA255目录下,针对目标平台文件做相应的修改;
(2)建立自已的配置文件:在include/configs目录中添加头文件PXA 255.h,这个文件是PXA 255开发板的配置文件,它包括开发板的CPU、系统时钟、RAM,GPIO及其它相关的配置信息;
(3)建立自已的开发板的CPU目录cpu/cpu255,并将cpu/PXA中所有文件拷贝到该目录下,针对目标硬件特性和需求进行各文件的修改;
(4)修改u-boot-1.1.0/Makefile,以便在其中加入对目标板的编译支持,并根据实际情况修改交叉编译器的路径:PXA255-config:unconfig;@./mkconfig$(@:_config+)arm cpu255 PXA255.其中“Arm”代表CPU的种类,cpu2 55是ARM CPU对应的代码目录,PXA 255是自已开发板对应的目录;
(5)依次过运行命令:$make clean,$make PXA 255-config,$make.生成3个文件:u-boot:ELF格式的文件,可以被大多数Debug程序识别;u-boot.bin:二进制bin文件,纯粹的U-BOOT二进制执行代码,不保存ELF格式和调试信息.这个文件一般用于烧写到用户开发中;u-boot.srec:motorola S-Record格式,可以通过串行口下载至开发板中.
通过JTAG口将u-boot.bin烧写至Flash的零地址,复位后就可以启动系统了.
本文针对嵌入式Linux系统移植在存在的普遍问题,并结合工业现场控制的需求,对嵌入式Linux移植就嵌入式Linux系统开发流程和交叉开发环境的建立、Linux的内部组织结构及其对系统移植的影响、目标硬件平台和现有的软件基础以及系统移植实现进行了探讨,将为在此硬件、软件平台的开发工作奠定基础.
[1]陈莉君,康 华,张 波.Linux内核设计与实现[M].北京:中国机械工业出版社,2006:22-25.
[2]陈 颐.嵌入式技术原理与应用[M].北京:北京航空航天大学出版社,2011:272-280.
[3]华清远见嵌入式培训中心.嵌入式Linux应用程序开发[M].北京:人民邮电出版社,2009:99-112.
[4]任桥伟.Linux内核修炼之道[M].北京:人民邮电出版社,2010:37-50.
[5]钱连举.基于ARM的嵌入式Linux系统移植技术研究与应用[D].成都:电子科技大学,2006.