7Linux操作系统在ARM9处理器上的移植.pdf
研究与应用?化工自动化及仪表,2010,37(2):67 69?Control and Instruments in Che m ical IndustryLinux操作系统在 ARM9处理器上的移植王晓宁,王振臣,张少兵,姚?帆(燕山大学 西校区电院 工业计算机控制工程河北省重点实验室,河北 秦皇岛 066004)?摘要:?嵌入式系统在工业生产和日常生活中的应用已经越来越广泛,基于 ARM 的 Linux嵌入式系统更是因其各个方面的优良特性成为当前嵌入式研究的热点。结合实例阐述了 Linux内核移植到 ARM 9芯片 S3C2410的具体实现过程,重点论述了移植过程中的具体方法及需要修改的文件,其中 L inux操作系统选用 Red H at9.0版本,交叉编译工具为 ar m?linux?gcc3.4.1,移植主要内容为:交叉环境的建立,引导程序(BootLoader)移植,内核的移植,最后,将编译好的内核代码通过已经移植好的 BootLoader下载到开发板上,Linux系统就成功的移植到了ARM 处理器中。?关键词:?嵌入式;移植;内核;L inux?中图分类号:TP316?文献标识码:A?文章编号:1000?3932(2010)02?0067?031?引?言随着信息科技和微电子技术的迅速发展,嵌入式系统已经越来越广泛被用于社会、经济的各个领域,从复杂的工业设备、精密的医疗仪器,到随处可见的手机、PDA,嵌入式系统已经与我们现代化的生活息息相关。嵌入式系统发展初期任务较少,功能单一,所以并不需要操作系统的支持。但是,随着其承担的功能的增多且日趋复杂,对系统的要求也越来越高,在这种情况下,像普通计算机一样将操作系统引入到处理器中已成为大势所趋 1。操作系统的引入,可以尽可能有效利用处理器的有限资源,实现CPU 在各个进程之间的最优化切换,必会将嵌入式系统引入到一个前景更加广阔的领域。?2?软硬件平台结构一般来说,嵌入式系统由硬件和软件两部分组成,硬件包括 CPU 及其各种外设的接口,软件则包括嵌入式操作系统和相关的嵌入式应用软件。嵌入式系统的设计开发首先涉及到的即是处理器(CPU)的选择,这是嵌入式系统的基础。目前,市场上的 CPU种类繁多,包括 X86系列、ARM 系列及其他一 些 专 用 的 CPU。本 文 所 用 到 的 CPU 为S3C2410,是 SAM SUNG 公司生产的 ARM9 系列芯片。S3C2410主频为 203MHz,带有 MMU(内存管理单元),支持 Linux系统的移植嵌入。除此之外,该处理器拥有:独立的 16KB的指令 Cache和 16KB数据 Cache、支持 TFT的 LCD控制器、NAND闪存控制器、三路 UART、四路 DMA、四路带 PWM 的 Tm i er、I/O口、RTC、Touchscreen接口、两个 USB主机、一个USB设备、SD主机和 MMC接口、两路 SPI O 1。操作系统也是嵌入式系统的重要组成部分。当今的嵌入式操作系统各种各样,有 Vx W orks、QNX、Pal m OS、W indows CE、Linux、?Clinux、?C/OS?II、Nu?clues等,每种操作系统都有其与众不同之处。本文选用的将要移植的嵌入式操作系统为如今在各领域中广泛应用的 Linux。Linux是以 Unix为基础而发展起来的操作系统,其最大优点是源代码公开,可以任意剪裁和修改后将其移植入自己的硬件平台上,因此可以说是嵌入式操作系统的最佳选择。3?移植过程分析嵌入式 L inux系统的开发是一个庞大的工程,在硬件搭建完毕之后,主要是下面几个基本的步骤:?系统引导程序 BootLoader编写(用于设备加电后的系统定位引导);L inux微内核的编译(内存管理、程序管理);!进程的初始化。除此之外,如果要成为完整的操作系统并继续保持小型化还必须加上硬件驱动程序、硬件接口程序和应用程序等。可见,嵌入式 Linux操作系统开发具有一定的层次性,应按其结构自下而上逐层进行,如图 1所示。图 1?嵌入式系统的体系结构图?收稿日期:2009?12?28(修改稿)?Boot Loader(引导装载器)是嵌入式系统移植的第一个环节。Boot Loader是操作系统内核启动前运行的一段小程序,其主要任务为初始化目标板硬件,给嵌入式系统提供板上的硬件资源信息,并进一步装载、引导嵌入式系统的固件,其作用相当于我们普通电脑中的 BIOS 2。因此,嵌入式系统移植的第一步就是要移植一个适合硬件系统的 Boot Loader。实验中所使用到的 Boot Loader为 V ivi。V ivi是韩国 M izi公司开发的一种针对 ARM9处理器的 BootLoader。在进行移植以前,必须先对 L inux的启动过程加以了解,通常 L inux的启动过程为:一个不隶属于任何操作系统的加载程序将 Linux部分内核调入内存,并将控制权交给内存中 Linux内核的第一行代码,加载程序的工作就完成了。此后 L inux将自己的剩余部分全部加载到内存,并初始化所有设备,在内存中建立好自己所需的数据结构(有关进程、设备、内存等)。内核加载设备并启动 in it守护进程,init守护进程会根据配置文件加载文件系统,配置网络、服务进程、终端等。初始化完成以后,系统启动,就可以看到系统的欢迎界面了。简而言之,内核部分初始化并控制大部分硬件,为内存管理、进程管理设备读写等工作做好一切准备;系统部分加载必须的设备,配置各种环境以便用户可以使用整个系统。可见,Linux移植过程的关键是其内核的移植,内核移植出现问题的话,后面的工作就将无法展开,Linux内核启动就是通过调用一系列的内核函数来实现的,其启动流程图如图 2所示。图 2?L inux启动流程图?由以上的分析可知,L inux的内核是 L inux的心脏,是操作系统的内部核心程序,因此,移植过程中的主要内容就是对 Linux内核的修改和编译。4?移植过程实现4.1?交叉开发环境的建立移植前应当确保在宿主机上已经正确安装了Linux操作系统和 GCC交叉工具编译链,目标板上的 USB接口、串口和 JTAG 已经连接好并且驱动程序安装成功。本实验中宿主机上安装 RedHat9.0版本的 L inux操作系统,交 叉编译工具为 ar m?linux?gcc3.4.1。4.2?引导程序的移植V ivi已经直接提供了对 S3C2410的板级支持和对 ARM 920T 内核的支持,对移植的工作量来说减轻了不少。在移植时,首先应修改 V ivi的工程管理文件 makefile文件中有关编译时要用到的函数库和交叉工具编译链的选项,主要是 CROSS_CMPILE、LI NUX_I NCLUDE_D I R、ARM _GCC _LIBS 这三个文件,其中 CROSS_CMPILE和 LI NUX_ I NCLUDE_DIR的路径要改为其在交叉工具编译链中对应的目录;LI NUX_I NCLUDE_D I R 的路径要设置为/ho me/ker?nel/include3。在对 V ivi进行必要的修改和重新配置后,就可以对其执行 make#命令进行编译,编译通过后,用JTAG将编译好的 V ivi烧写至 Flash中。4.3?内核的移植移植前,首先在 Linux的/home下建立存放内核源 码 的 文 件 夹,实 验 中 为/home/jesfei/Linux?2.6.12。在宿主机 L inux系统下把要移植的内核源码解压至目标 文件夹,采用 的 Linux内 核版本为2.6.12。在 L inux内核移植的初始阶段,应尽量构造一个最小内核,使嵌入式的 L inux系统保持小型化和开发、应用所需要的基本功能即可,这样内核支持的选项尽可能少,可以减少移植过程的工作量和避免出现开发后期某些功能无法实现的问题。在确保己经进行的内核移植操作正确后,即可逐步地添加相应的硬件支持和功能支持。移植过程中,首先要进行的也是最主要的工作是修改 L inux操作系统中和 CPU体系结构相关的代码,这些代码主要存储在 Linux内核目录中的/arch目录下,其中绝大部分与 ARM 相关的代码存储在/arch/ar m中,它所 需要的 头文件 存储在/include/asm?ar m中,所以,移植过程的重点也就集中在此文件夹中,移植过程中需要修改和添加的文件大致如表 1所示 3。68化工 自动化及 仪表?第 37卷?表 1?部分需要修改的内核源码表需要修改文件路径需要修改文件列表/m akefile/arch/ar m/m akefile;configure.in/arch/ar m/tools/m ath?types/arch/ar m/boot/m akefile/arch/ar m/boot/co mpressedhead?s3c2410.s;makefile/arch/ar m/kernel/debug?ar mv.s;entry?ar mv.s;head?ar mv.s;m akefile;sesetup.c/arch/ar m/mm/mm?ar mv.c;makefile/arch/ar m/m atch?s3c2410/Irq.c;arch.c;mm.c;tm i e.c,m atch?amdk2410.c,devs.c;/include/as m?ar m/arch?s3c2410/s3c2410.h;irq.h;seria.l h;io.h;syste m.h;tm i e.h;tm i ex.h;cpu_s3c2410.h等这些文件的具体功能为:/makefile指定系统框架和交叉工具编译链,组织内核的各个模块,记录各个模块的相互联系;/arch/ar m/config.in对系统平台的选项以及处理器进行配置;/arch/ar m/makefile定义系统平台编译选项和内容;/arch/ar m/mm对内存页表内存管理映射进行初始化;/arch/ar m/match?s3c2410添加 s3c2410平台的初始化函数;/include/asm?arm/arch?s3c2410添加 s3c2410寄存器和板子的定义;/arch/ar m/kernel/makefile添加对 s3c2410处理器的支持;/arch/ar m/kernel/debug?ar mv.s定义串口打印函数;/arch/ar m/kernel/entry?ar mv.s定义中断处理子程序;/arch/ar m/kernel/head?ar mv.s定义内核代码入口;/arch/ar m/tools/match?types定义系统号;/arch/ar m/boot/co mpressed/head?s3c2410.s 添加引导代码;/arch/ar m/boot/co mpressed/makefile添 加编 译选项;/arch/ar m/boot/makefile添加内核映像生成选项。例如 根目 录下 的 makefile 文件 中需 要 修改ARCH:=(shell uname?m/sed?e s/.i 86/%)为ARCH:=ar m,修改 CROSS _COMPILE=为 CROSS _COMPI LE=arm?linux,这表示 Linux所基于的硬件平台为 ARM,因为 make是用来自动编译、链接程序的实用工具,make命令将根据 makefile文件的规则来决定如何编译和连接程序。makefile文件描述程序之间的依赖关系,以及提供更新文件的命令。make?file文件贯穿内核代码目录,所有 makefile中的 cross_co mpile关键字用于指定要进行交叉编译工具链。将系统的框架定义为 ar m结构,将系统的交叉工具编 译 链 修 改 为ar m?linux,将/arch/ar m/mm/mm?ar mv.c中的 init_maps&bufferable=0修改为init_maps&bufferab le=1,表示修改掉 init_maps的缓冲器状态,使 其可用。将/arch/ar m/boot/compressed/makefile中添加以下语句:?ifeq($(CONFI G_ARCH_S3C2410),y)?obj+=head?s3c2410.o?endif语句中的 head?s3c2410.o是由 head?s3c2410.s文件经过编译产生的,主要用来初始化处理器。在/arch/ar m/match?s3c2410/devs.c中还应当添加 Flash分区的信息,目标板中的 F lash采用 NANDFlash,存储空间为 64M,划分为四个分区,分区 1存放 Boot Loader本 身,占用 1 M 空 间;分区 2 存放Linux kerne,l 占用 3 M 存储空间;分区 3存放 roofs文件系统,占用 40M 空间;分区 4存放用户程序,占用剩余的 20M 空间4。所以应该添加函数:?static structmtd_partition partition_info =?na m e:bootloader#,size:0X00100000,offse:t 0X0,?na m e:kernel#,size:0X00300000,offse:t 0X00100000,?na m e:roofs#,size:0X02800000,offse:t 0X00400000,?na m e:user#,size:0X01400000,offse:t 0X02c00000,?其中:size表示分区的大小,offset表示分区的起始地址。将 Linux内核修改之后接着就要对已修改好的内核进行配 置,配置内核的命令有以下几 种:make xconfig(用于 X W indow 下的配置,将配置选项以图形菜单的形式显示出来。);makemenuconfig(下转第 77页)69?第 2期?王晓宁等.Linux操作系统在 ARM 9处理器上的移植 4?罗荣桂.排队模型及其应用 M.武汉:华中理工大学出版社,1990.5?郭?辉,周敬利,余胜生.附网存储体系中的 I/O性能分析 J.小型微型计算机系统,2003,24(2):280-284.6?孟玉珂.排队论基础及应用M.上海:同济大学出版社,1989.7?张柏生,任剑锋,孟相如.基于排队论的网络通信系统的建模与分析 J.空军工程大学学报:自然科学版,2002,3(3):59-62.Test and Analysis ofComputerHDD I/O OperationCHEN Fei?yun1,LONG Feng2(1.Shanghai Institute of Technology,Shanghai 200235,China;2.Institute of Plas ma PhysicsChineseAcademy of Science,H efei 230031,China)Abstract:Co mputerHDD I/O operation was abstracted as anM/M/1 queuingmodel and the running perfor mance ofHDD I/O operation was analyzed by using queu ing syste m correlation theory.Some parameters computing for mulaswere derived such asmean tasks in whole syste m,mean tasks in a queu ing and mean response tm i e.Used those for?mulas,some data acqu ired by experm i entswere computed and analyzed.Proved by some experm i ents,HDD I/O oper?ation is a high cost operation,which w ill influence running perfor mance of a control system.Finally,a resolvedmeth?od is given to reduced the influencewh ich made byHDD I/O operation.K ey words:realtm i e control system;queu ingmode;l HDD I/O operation;syste m perfor mance analysis(上接第 69页)(用于菜单方式);make config(用于文本方式),一般来说,图形方式和文本方式配置方法较为常用。配置过程中,选择 Linux运行的选项时应当保证其与 S3C2410开发板的配置一样才行,实验中采用的是文本方式。内核配置完之后,接着要通过 make或者 makezI mage进行编译选项的配置,经过 make dep#建立内核依赖关系,make zI mage#建立内核镜像文件,makemodule#创建内核模块这三个步骤,内核编译即可完成。最后,将编译好的内核代码通过已经移植好的 BootLoader下载到开发板上,Linux系统就成功的移植到了 ARM 处理器中。接下来就可以在此基础上进行驱动程序和应用程序的开发了。5?结束语嵌入式系统中引入操作系统是目前嵌入式设计与应用的一个热点,嵌入式操作系统在优化系统设计、提高系统设计效率、减少系统设计中重复劳动和提高移植性的方面起到了非常积极的作用。嵌入式操作系统中的引导、加载和启动是其中最基本也是最重要的一个步骤。本文结合嵌入式 Linux系统和相应的硬件平台,研究和实践了 Linux操作系统向S3C2410平台上移植的过程,为后续的驱动程序和应用程序的开发奠定了基础。参考文献:1?于?明,范书瑞,曾祥烨.ARM9嵌入式系统设计与开发教程M.北京:电子工业出版社,2006:108-116.2?李亚峰.ARM 嵌入式 linux 设备驱动实例开发 M.北京:中国电力出版社,2008:150-171.3?潘伟森,邓胡滨.嵌入式 Linux 在 S3C2410上的移植分析 J.仪器仪表用户,2008,15(2):121-122.4?师娟娟,彭?迪.基于 ARM 9的嵌入式 L inux移植 J.武汉理工大学学报,2008,30(2):205-208.TheTransplanting ofL inux Operating Syste m to ARM9 ProcessorWANG X iao?ning,WANG Zhen?chen,ZHANG Shao?bing,YAO Fan(Key Lab of Industrial ComputerControl Engineering of H ebeiProvince,Yanshan University,Qinhuangdao 066004,China)Abstract:The realized process of transplanting L inux into the S3C2410 of the Advanced RISCM achine with exa m?ples and the documents need to be amended in transplanting process and revised methods were elaborated,wh ichused RedHat9.0 version of the Linux operating syste m,cross?compilation tools ar m?linux?gcc3.4.1.Transplantationmain contentswere:the establishment of cross?environment,BootLoader transplantation and kernel transplantation.Fi?nally,the compiled kernel code has been adopted for a good transplant BootLoader downloaded to the developmentboard,Linux syste m is successfullym igrated to theARM processor.K ey words:embedded;transplantation;kerne;l L inux欢迎来稿?欢迎订阅?欢迎刊登广告77?第 2期?陈飞云等.计算机硬盘 I/O 操作性能测试与分析