基于ARM9

更新时间:2024-02-28 作者:用户投稿原创标记本站原创 点赞:2057 浏览:7506

[摘 要]本文重点研究了嵌入式操作系统Linux基于ARM9微处理器的移植技术,通过交叉编译环境的建立、启动代码Bootloader的实现、制作嵌入式Linux内核以及建立一个据实情需要的根文件系统,成功实现了嵌入式操作系统Linux在三星S3C2410A微处理器的目标板ARM9_2410EP上的移植.

[关 键 词 ]嵌入式操作系统Linux ARM 移植

[中图分类号]TP399[文献标识码]A[文章编号]1007-9416(2010)02-0024-02

1.引言

嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统极为重要的组成部分.免费型的实时嵌入式操作系统目前主要有嵌入式Linux和μC/OS,μC/OS仅是一个实时内核,它只能提供给用户一些API函数接口.而嵌入式Linux的最大的特点是源代码公开并且遵循GPL协议,且其运行所需资源少,十分适合嵌入式应用.

三星公司的嵌入式微处理器S3C2410A是基于ARM920T开发的低功耗系列芯片,本文实现了嵌入式Linux在基于三星S3C2410A微处理器的目标板ARM9_2410EP上的移植,为用户建立了一个嵌入式开发简易平台,更好的促进嵌入式系统的推广应用.

2.从Linux到嵌入式操作系统Linux

与传统的操作系统不同,Linux操作系统的开发一开始就在F(自由软件基金会组织)的GPL(GNU Public License)的版本控制之下,Linux内核的所有源代码都采用开放源代码的方式,其诸多特性都非常适合嵌入式的应用.但Linux最初并不是为嵌入式系统而设计的,要想把Linux应用于嵌入式系统,必须将Linux实时化、嵌入式化,这正是目前嵌入式开发的新热点.

嵌入式Linux就是在嵌入式系统中使用的Linux.通常是将标准Linux进行相应的改造,再用作嵌入式计算机的操作系统.Linux的嵌入式改造主要围绕体积和实时性展开.与目前市场上的众多商业的实时系统相比,嵌入式Linux的内核稳定、功能强大、支持多种硬件平台并且拥有完全开放源代码、丰富的实用软件,可以提高用户的开发效率并提供丰富的资源保障.

3 基于ARM9_2410EP的嵌入式Linux的研究和移植

基于ARM9_2410EP的嵌入式Linux的移植过程主要分为以下几个重要步骤:

(1)嵌入式Linux主机开发环境的建立,(2)启动程序Boot loader的实现,(3)内核kernel的移植,(4)根文件系统的实现,(5)烧写以上各部分到目标板ARM9_2410EP.

3.1 嵌入式Linux主机开发环境的建立

3.1.1 嵌入式Linux软件开发环境

绝大多数Linux软件开发都是以native方式进行的,即本机(HOST)开发、调试、本机运行的方式.这种方式由于没有足够的资源在本机运行开发工具和调试工具,通常不适合于嵌入式系统的软件开发.于是交叉开发模式应运而生[2].交叉开发模型如图1所示.

这种在主机环境下开发,在目标板上运行的开发模式叫交叉开发.开发时使用开发主机上的交叉编译、汇编以及连接工具形成可执行的二进制代码,然后把可以执行文件下载到目标机上运行.

建立交叉编译环境是进行嵌入式Linux移植的第一步,环境的建立需要许多软件模块协同工作.开发环境安装完成后会在根目录下生成两个目录:

/s3c2410_linux/*嵌入式系统开发工作目录*/

/opt/*交叉编译环境目录*/

交叉编译环境建立后,需要对系统进行配置MINICOM、配置TFTP、配置NFS怎么写作等工作.

3.1.2 搭建基于ARM9_2410EP的嵌入式Linux硬件运行环境

本文所使用的硬件平台是革新ARM9_2410EP试验箱.ARM9_2410EP的CPU是基于ARM920T内核的S3C2410.移植的移植工作的硬件环境如图2所示.

开发主机端的PC使用COM1和ARM9_2410EP的串口直接相连接,完成对目标板的控制功能.通过交叉网线把试验箱连接到开发主机端PC的以太网接口,从而建立了原始IP连接,使得用链路层完成大批量数据的传送.

3.2 启动程序Boot loader的实现

嵌入式系统中,通常并没有像PC机中BIOS那样的固件程序,整个系统的加载启动任务就完全由Boot loader来完成.Boot loader[3]就是在操作系统内核运行之前运行的一段小程序,其主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统.

Boot loader的启动通常可以分为stage1和stage2两个阶段[4].Stage1主要包含依赖于CPU体系结构代码,比如设备初始化代码等.通常都用汇编语言来实现.stage2通常用C语言来实现,以便实现更复杂的功能,也使程序有更好的可读性和可移植性.


现今比较成熟的启动程序Boot loader有PPC Boot、vivi和U-boot[4][5]等.这里使用的是PPC Boot.对PPC Boot编译后就可以看到该目录下有新生成的ppcboot.bin,将该文件复制到/tftpboot/下,以方便后面使用.

3.3 嵌入式内核kernel的制作和移植

把Linux用于嵌入式系统,需要有针对性地对Linux内核加以裁剪、修改和补充.Linux内核由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信[7].整个代码分布如图3所示.

移植工作的重点就是移植arch目录下的文件.编译前,首先需要对内核进行配置,这与对内存的大小和要实现的功能紧密相连的.合理的配置,能使生成的嵌入式Linux内核代码最优化.

配置完成后,保存退出.依次输入如下命令,开始对上面配置好的Linux内核开始编译:

[user]# make dep/*读取生成的配置文件,创建对应于配置的依赖关系树*/

[user]# make clean/*完成删除前面步骤留下的文件,以避免一些错误*/

[user]# make zImage/*实现完全编译上面配置好的Linux内核*/

当内核编译完成后输入:

[user]# make modules /*编译模块驱动程序*/

至此内核的编译工作全部完成,我们可以看到在目录/arch/arm/boot/下有刚生成的编译文件zImage.把该文件复制到/tftpboot/目录中备用,以方便下载到目标板上.

3.4 根文件系统的制作

文件系统是Linux系统必备的部分,主要是一些系统文件和应用文件存储的地方,嵌入式系统中的文件系统是一个简化版,包括必要的目录和文件.

根文件系统可以在已有的根文件系统基础上修改得到,也可以自己重新制作.根文件系统RAMDISK的制作过程包括准备目录、创建根文件系统、创建文件系统.按我们需要的大小所设计的RAMDISK文件系统建立好后只是一个基本的文件系统,用户需要将一些应用程序和一些必要的库软件包加入进去,最终成为一个实际可应用的根文件系统,并得到了压缩的根文件系统映像文件ramdisk.image.gz.

3.5 移植各部分到目标板ARM9_2410EP

在确保以上个步骤正确的情况下,正确把开发主机和目标板用下载线连接起来.至此,软硬件开发环境建立好了,就可以经过烧写引导程序ppcboot、Linux内核以及ramdisk文件系统开始下载,连接好系统后,用上电复位或者RESET的方式重新启动Linux,通过串口端就可以看到目标板上ppcboot的检测、引导内嵌Linux操作系统启动打印到串口的信息和Linux的整个启动信息.

至此,嵌入式Linux在ARM9_2410EP的移植也基本完成.后期我们可以选定了国产优秀软件MiniGUI作为研究对象提供应用开发的友好接口.

4.结语

随着信息化、智能化、网络化的发展,嵌入式系统技术也将获得广阔的发展空间.本文在深入研究ARM体系结构及Linux操作系统的基础上,完成了嵌入式Linux在基于ARM9微处理器的三星S3C2410A的ARM9_2410EP目标板上的移植,建立了面向用户的更通用的嵌入式系统开发简易平台,提高了开发效率,促进了嵌入式系统在应用范围内的推广.

[参考文献]

[1] 张仑.32位嵌入式系统硬件设计与调试,北京:机械工业出版社,2005.

[2] 杨洁.赵刚.嵌入式系统中BootLoader的编译与移植,四川大学学报,2007.4.

[3] 陈文智等编著.嵌入式系统开发原理与实践,北京:清华大学出版社,2005.

[4] 谢蓉,巢爱棠著.Linux基础及应用,北京:中国铁道出版社,2005.1.

[5] 冯世奎.Linux嵌入式系统根文件系统地选择与制作,成都信息工程学院学报,2006,6.

[基金项目]

河南省教育厅自然科学研究项目(2007510022).


本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文