2024年4月16日发(作者:)
第23卷第4期
甘肃科学学报
Vo1.23 No.4
2011年1Z月
Journal of Gansu Sciences
Dec.2011
基于ARM9的嵌入式Linux系统分析与移植
缑新科,滕永
(兰州理工大学电气工程与信息工程学院,甘肃兰州 730050)
摘 要: 结合¥3C2440处理器和Mini2440实验平台,进行了嵌入式Linux的移植.实施了U—Boot
移植,解决了U—Boot中关于Nand'Flash启动问题.分析了Linux的内核结构,从而实现了内核移
植.测试结果证明该方法是可行的.
关键词:Linux;U-Boot;ARM9;嵌入式系统 ‘
中图分类号:TP316 文献标志码: A 文章编号:1004—0366(2011)04—0106—04
Analysis and Porting of Embedded Linux System Based on ARM9
GOU Xin—ke,TENG Yong
(Co'lege of Electrical and Information Engineering,Lanzhou University of Science and Technology.Lanzhou 730050。China)
Abstract: Based orI¥3C2440 processor and Mini2440 platform,the porting of the embedded Linux system
was carried out successfully.First,based on solving the problem of Nan&Flash,the U—Boot was ported to
the platform.Second,the kernel of the Linux was analyzed and ported too.The test results suggest that
this method iS feasible.
Key words:Linux;U—Boot;ARM9;embedded system
嵌入式系统和PC系统启动的方式类似,都需
在此基础上提出了将功能强大的U-Boot和Linux
要有一定的引导程序.在PC机启动的时候,首先 内核结合移植到特定目标板上的思路和方法.
运行BIOS(Basic Input/Output System).这个系统
可以把系统从硬件启动过渡到软件管理中,为下一
1 U-Boot分析及启动过程
步从硬盘中将操作系统调用至内存运行做好准备.
U—Boot(Das u-Boot)其含义为Universal Boot-
而嵌入式系统的这种类似于B10S的系统,我们称
Loader,是由德国DENX软件工程中心开发和维护
之为Boot—loader[1],Boot—loader与系统的硬件息 的针对嵌入式CPU的Boot—loader,是遵循GPL条
息相关.而在嵌入式系统中,不同结构的CPU其对
款的开放源码项目[2].
应的Boot-loader也都是不同的,即便开发板所选
1.1 U-Boot启动分析
用的处理器是同一型号,仅仅是外设的不同,也需
U—Boot的启动分为两个阶段.在第一个阶段主
要进行Boot—loader的移植工作.因此想要在嵌入
要完成以下工作:
式世界里建立一个通用的Boot—loader几乎是不可
(1)基本的硬件初始化;
能的.
(2)为下一阶段准备RAM空间;
Linux是源代码开放的,支持多用户、多进程、 (3)将第二阶段所需数据转移至RAM中;
多线程、实时性较好的功能强大的操作系统.它可以
(4)设置堆栈指针和存取方式,准备好第二阶
运行在x86,680x0,Po ̄verPC,MIPS,ARM等平台 段需C语言环境.
上,已经是目前运行硬件平台最多的操作系统.我们
第二阶段的主要工作:
收稿日期:2011一O4—14
第23卷 缑新科等:基于ARM9的嵌人式Linux系统分析与移植 107
(1)从汇编语言跳转到main入口函数;
(2)初始化本阶段要使用的硬件设备;
(3)检测系统内存映射;
(3)加载内核映像和文件系统.
1.2 U-Boot结构分析
添加
¥3C2440
config:unconfig@.mkconfig¥(@:
一一
config=)arm arm920t¥3C2440.
配置完成后,在board中建立S3C244Oboard目
录,并复制smdk2410目录中的内容,之后执行
make smdk2 4 1 0config.
一
为了实现U-Boot的移植,首先必须对U-Boot
中的文件结构有一定的了解.结合本平台的需要,我
们主要在ARM环境下对主要部分作一定分析.
U-Boot结构如图1所示.
其次在include/configs/中建立配置头文件,然
后指定交叉编译工具的路径以及测试编译.
以上的工作是U-Boot的移植前序步骤,不过
这里存在一个问题:代码搬运.本平台是基于Nand—
Flash启动,但U—Boot并不支持这一启动方式,这
就需要我们对这部分进行一定的修改和完善.
2.2 NandFlash中的代码搬移
(1)前4 K的问题 一旦¥3C2440配置成从
图1 U-Boot结构
NandFlash启动,前4 K数据自动复制到4 K的内
图1中Board目录为依赖于具体的平台;CPU
存RAM中,并将OxO0000000作为内部RAM的起
目录为U-Boot所支持的CPU;Lib—arm目录为针
始地址,CPU从OxO0000000的内存位置开始运行
对ARM结构体系的通用文件;Include目录为头文
汇编程序.程序员要实现的就是如何在4 K大小的
件和开发板配置文件;Common目录主要是用于实
空间中添加最核心的系统启动程序.
现各种命令的C文件.
(2)启动程序的流程在启动程序的前4 K空
间,必须完成两个任务:一是完成¥3C2440的核心
2 U-Boot移植过程
配置;二是如何把启动程序(UBOOT)的其余部分
2.1系统结构与文件配置
拷贝到RAM中.
实验平台是由三星¥3C2440微控制器、128 M
(3)NandFlash详细设置 首先在include/
NandFlash、64 M SDRAM、串口、以太网口、JTAG
configs/smdk2410.h中力Ⅱ人CONFIG一¥3C2440一
口等组成,其功能如图2所示.
NAND BO0T,如下:#define CONFIG S3C2440
NAND_B00T 1支持从NandFlash中启动.之后在
start.S中添加操作NandFlash控制器的代码,并且
在另一个C语言文件中实现NandFlash的读函数
nand
—
read().要注意的是在Makefile中添加对这
个文件的编译.这样就实现了U—Boot重定位功能,
即将U—Boot从NandFlash拷贝到SDRAMY中.程
序流程如图3所示.
2.3 NandFlash读写命令问题
在U-Boot下主要是通过命令行的方式来实现
图2开发板的组成
对NandFlash的操作.用到的主要数据结构有:
struct nand
—
flash
—
dev、struct nand
—
chip.前者包括
为了缩短开发周期,通常都是选用与自己开发
设备的信息,诸如芯片型号、存储容量、设备ID、I/0
板硬件相似,且已经获得U-Boot支持的平台为模
总线宽度等信息;后者是NandFlash工作时所支持
板来进行移植.选用SMDK2410,因此移植所要做
的信息.U—Boot支持NandFlash命令移植主要是有
的工作主要是针对¥3C2410和¥3C2440、S K2410
如下的步骤:设置配置选项、加入自己的NandFlash
和S3C2440board的外设不同做相应的修改,并添
芯片型号、编写自己的NandFlash初始化函数.以
加新的功能.
上就完成了U—Boot对NandFlash的支持,使用交
我们在执行编译之前,首先要对Makefile文件
叉工具链编译完善之后的U—Boot,生成uboot.bin
108 甘肃科学学报 2011年第4期
的二进制文件.使用Jtag将编译好的U—Boot烧写
到开发板中去.
图3 NandFlash流程
2.4移植结果
U-Boot中的Makefile文件体现了U—Boot内
部代码之间的依赖关系.而要生成相应映像文件,只
要通过使用make命令就可以实现.之后使用交叉
开发工具链arm-gcc-linux就可以生成二进制的文
件.成功移植后的串口输出U—Boot信息如图4
所示.
U-Boot1.1.6(.Tan 6 201l—Ifi:16:So)
DR^冀:64岫
Flash:2岫
N舳:l28崛
-矗rning—bad CItc.using detamt environment
In : serial
Out:serial
Err : seria1
n 24JI∞nand{nfo
图4 U-Boot烧写结果
3 Linux内核移植过程
Linux操作系统因其开放源代码、易于开发、功
能强大、稳定、成本低等优势迅速跻身于主流嵌入式
开发平台.对于Linux在嵌入式系统中的应用,都是
根据各种系统的多样性,对内核进行一定的裁剪和
修改,而不是生搬硬套.
3.1 Linux结构分析
Linux内核主要由5个子系统组成:进程调度、
内存管理、虚拟文件系统、网络接口、进程间通信.
Linux内核非常庞大,一个功能齐全,包罗万象
的内核有数百兆之多,其整体分布如图5所示.
图5 Linux内核组织结构
3.2移植过程
(1)下栽Linux内核并修改Makefile文件 ht—
tp://www. kerne1. org/pub/linux/kerne1/v2. 6/
linux-2.6.29.5.tar.bz2下载linux2.6.29.5内核,
并修改内核目录树根下的Makefile,找到ARCH和
CROSS
—
C0MPILE,修改ARCH?=arm CROSS
—
COMPILE?=arm-linux-gcc,然后设置路径环境
变量,使其可以找到对应的交叉编译工具链.
(2)指明分区信息 ①建立NandFlash分区
表:目标板计划分4个区,分别存放U—Boot,内核,
文件系统以及用户应用系统空间;②加人Nand—
Flash分区;③建立NandFlash芯片支持;④加入
支持NandFlash的驱动.
(3)指定启动时初始化 当内核启动时,我们
需要依据之前对分区的设置来进行初始化配置,主
要修改arch/arm/machS3C2410/machsmdk2410.C
文件.
(4)禁止Flash ECC校验 由于U-Boot所使
用的是由软件ECC算法产生ECC校验码,这与内
核校验的ECC码不一样,所以我们在这里选择禁止
内核ECC校验.在driver/mtd/nand/S3C2410.C这
个文件中,我们找到¥3C2410一nand—init—chip()函
数,在该函数体最后一行加上一条语句:chip>ecc—
mode ̄NANDl_ECC
NONE.
_
(5)配置并编译内核 对于内核的配置,我们
常用的方法就是在内核目录下执行:make menu—
config命令.图形化内核配置窗口见图6.在这里有
选择的选取内核的部分功能,以达到缩小内核的体
积的目的.
在对内核配置完成后,可以通过编译工具arm—
gcc—linux来编译刚刚保存的内核.这可以生成内核
映像文件.通过之前已经烧写好的U—Boot,可以将
内核也烧写到NandFlash中去.
第23卷 缑新科等:基于ARM9的嵌入式Linux系统分析与移植 1O9
是从NorFlash的原理,同时也给出了编写相关代码
f’J Enable 1oadable module support…》
一
的思路.并在此基础上根据硬件的特点,给出了
’
一
Enable the b1OCk 1ayer …
S ̄-ste=T
f s support
’
…,
Linux操作系统移植的详细思路和步骤.
参考文献:
一一
kerne l Feat ures ~一>
t ot optiONS 一'
l CPu l ower Management …' I
Sonia Thakur,J ames M Conrad.An Embedded Linux Based
Navigation Sy ̄em for an Autonomous Underwater Vehicle
I
l
} Ioattng point emulati0n——>
{serspace bi nary formats—一>
图6内,lt ̄l窗口
I
I
[J3.IEEE,2007:56—58.
田泽.嵌入式系统开发与应用[M].北京t北京航空航天大学
出版社,2005.
4 结语
Boot-loader是系统上电后运行的第一段代码,
主要完成一系列初始化工作.U-Boot是比较通用的
何景波.基于Linux的嵌入式应用系统技术研究[D].太原:
中北大学,2009.
Christopher Hallinan.Embedded Linux Primer[M].影印版.
北京t人民邮电出版社,2008.
开源Boot—loader.它功能强大,支持多种CPU架
构,多种操作系统内核.这使得U—Boot成为主流的
嵌入式Boot—loader,同时Linux操作系统因源码开
颜华.基于ARM的嵌入式Linux操作系统研究与移植[D].
北京z北京工业大学,2007.
Karim Yaghmour。Jon Master.Building Embedded Linux Sys-
放、易于开发、功能强大、稳定、成本低等优势迅速称
tems[M].2rd.0’Reilly,2008.
Michael Barr,Anthony Massa.Programming Embe dded Sys・
为嵌入式系统中的主流操作系统.将这二者相结合,
对嵌入式系统来说意义重大.在简要地介绍了
Boot-loader和Linux操作系统的基础上,比较详细
tems[M].影印版.南京:东南大学出版社,2007.
ADI.ADSP_BF561 Blackfin Processor Hardware Reference
地分析了U—Boot和Linux的性能特点.
在具体实践中将U-Boot移植到基于 20t
[z].2003.
DAVICOM Semiconductor Inc.DMg000 A Ethem et Contro1.
1et with General Processor Interface Data SheetEM].2006.
三恒心科技有限公司编著.ARM9原理与应用设计rM-I.北
京:电子工业出版社,2008.
的处理器¥3C2440上并给出了其大致过程,给出了
实现U—Boot自动识别启动Flash是NandFlash还
作者简介:
缑新科(1966一),男,甘肃省天水人,现任兰州理工大学电气工程与信息工程学院教授,硕士研究生导师.主要研究方向为
智能结构及其动力学系统控制.
发布者:admin,转转请注明出处:http://www.yc00.com/news/1713279434a2217719.html
评论列表(0条)