- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于ARM9的嵌入式Linux代码移植
摘要:介绍了嵌入式Linux移植的方法和过程,给出了嵌入式开发环境下基于硬件平台ARM9的bootloader、Linux内核移植的实现方案,该方案可为嵌入式系统的应用研究提供操作系统层面的支持。
关键词:嵌入式系统;ARM;vivi;Linux移植
O 引言
随着计算机技术、通信技术以及Internet的飞速发展。嵌入式系统已得到越来越广泛的应用。与此同时,嵌入式系统的复杂性也在不断增加,嵌入式操作系统已经成为其中最重要的组成部分。目前,市场上存在着众多的嵌入式操作系统,而在这些系统之中,兼有Linux和嵌入式优点的嵌入式Linux操作系统,凭借其在结构清晰、源代码开放性、裁剪性好,开发与使用均易实现等方面的优势,拥有巨大的市场前景和商业机会。当前嵌入式Linux的一个热点应用就是将Linux内核移植到一些典型的微控制器和微处理器上,提供操作系统层面支持,以实现嵌入式系统用软件的开发。
此研究基于Linux 2.6内核的嵌入式Linux系统,分析了所面临的理论问题、关键技术,实现了Linux内核在ARM9平台上的运行。
1 开发环境介绍
嵌入式IJnux移植是嵌入式系统开发的重要组成部分,它需要相应的软件组件支持,同时又与目标硬件平台关系密切。因此,在正式移植前,首先应明确嵌入式系统开发的流程与开发环境,再根据目标硬件平台的特点和所选择的软件组件,正确搭建功能完善的交叉开发环境,最后制定出合理的移植方案,从而使移植工作可以顺利的进行。
1.1 ARM9硬件平台
本次移植采用斯道ARM9开发板作为硬件平台,其基本构成为核心板和底板(外设板或基本板),核心板上集成了SamsungS3C2410处理器、64 M的FLASH和64M的SDRAM,为应用研发提供了足够的空间,基板则提供了丰富的外围接口。其硬件平台结构如图l所示。
此完整的应用系统具有体积小、耗电低、处理能力强等特点,能够装载和运行嵌入式Linux操作系统。用户可以在这个系统平台上自主进行软件开发。
1.2 Linux内核及处理器
目前用于嵌入式Linux系统的内核大多数使用2.4.x版,然而,随着嵌入式微处理器性能的不断增强及其应用范围的日趋扩大,Linux-2.6版内核由于其针对嵌入式系统应用的显著特点,必将会越来越多的被应用于嵌入式系统移植与开发Linux系统之中。文中采用的是Linux-2.6版内核。
vivi是韩国mizi公司开发的bootloader,适用于ARM9处理器,支持S3C2410X嵌入式ARM-Linux移植的应用处理器。和所有的bootloader一样,vivi也有两种工作模式,即启动加载模式和下载模式。启动加载模式指在一段时间后(这个时间可更改)自行启动Linux内核,它是vivi的默认模式。下载模式则是指vivi为用户提供一个命令行接口,用户可通过接口使用命令。
2 系统移植方案
在硬件方面,为支持NAND Flash引导模式,S3C2410A处理器在芯片内集成了4 KB的被称为steppingstone的SRAM。NAND Flash引导模式下,系统复位后NAND Flash中的前4位内容首先被复制到steppingstone,接着将steppingstone映射到nGCSO,即内存BankO起始她址为Ox00000000,随后系统开始正常引导。
同样,在软件方面,bootloader程序应被烧写到NAND Flash最前面的部分。通常bootloader程序大于4 KB,因此,在bootloader的前4 KB程序段中,必须先完成内存SDRAM的初始化,并将自身完全复制到SDRAM中,同时设置必要的堆栈,然后跳转到SDRAM中去执行这一系列工作。这样方可完成后续的初始化系统资源及装载操作系统内核的任务。
本次移植使用ARM9开发板,通过跳线方式设置OM[1:0]引脚来支持NAND Flash启动模式,因此,移植方案使用NAND Flash+SDRAM的存储模式,bootloader放在SDRAM中,内核和文件系统都放在NAND Flash中,根据选用的方案,整个系统移植要做的工作包括两方面:
Bootloader:为装载操作系统内核,支持NAND Flash及网络下载和串口通信,从而方便嵌人式ARM.Linux移植以开发调试。
Linux系统:支持NAND Flash,并移植Cramfs+Yaffs混合文件系统;支持NFS文件系统及网络通信、串口等。
3 Linux内核移植
在同一硬件平台上可以嵌入不同的嵌入式操作系统,这就好比PC既可以安装Windows又可以安装Linux一样。同样,有些操作系统经过移植后即可运行在不同的硬件平台上。通常情况下,如果一个系统可以在不同硬件平台上运行,那么这个系统便是可移植的。将某一个平台的代码运行在其他平台上的过程称作移植。嵌入式系统是"硬件可裁剪"的,因此工程师们设计的硬件电路会有所不同,从而使这些代码可能无法正确运行,因而要实现移植就应结合自己的硬件电路,对已有的内核代码进行修改。
3.1 内核移植难点
Linux系统的内核是多层次结构的单体内核,其可移植性比微内核要差一些,但是,这种内核具有较高的效率。从操作系统发展的趋势来看,微内核作为一种先进的操作系统结构,是操作系统发展的一个潮流。但是,微内核结构较低的系统通信效率大大的降低了系统的性能。所以,从系统效率和性能的角度来考虑,Linux并没有采用先进的微内核结构而是选择了传统的单体内核机构。
3.2 内核移植的基本策略
在Linux2.6内核支持下,Linux已经在许多典型的硬件平台上实现移植,其中包括:I386、ARM、MIPS、ALPHA、PowerPC、SPARC、SH等。但是对于基于特定硬件体系设计的硬件平台,需要从头对Linux进行移植。此外还有部分体系的硬件平台,Linux只对其中部分的CPU或目标板提供了支持,如果使用了Linux尚未支持的CPU或目标板,也需要对Linux内核进行移植工作。通常可以采用以下两种方法进行Linux内核移植工作:
(1)从头设计。即采用"自底向上"的设计方法,从硬件的需求考虑逐步的采用分析、设计、编码、测试。这种方法比较适合针对一种全新的硬件平台开展移植工作。
(2)修改已有的代码。如前所述,Linux已经可以在多种体系结构中运行,那么,我们可以参考相近的体系结构的代码,只修改与我们的目标硬件平台不同的部分即可。这种方法的难点在于开发人员除了要了解目标硬件平台外。还必须对已支持的软硬件有一个较好的理解。本次研究的移植工作就是采用了这种开发方法。
作者:徐 源,黄大勇 南阳理工学院 来源:电子元器件应用
上一篇:自制式嵌入式系统RTOS
下一篇:FPGA/CPLD状态机的稳定性设计