【VC++开源代码栏目提醒】:网学会员--在 VC++开源代码编辑为广大网友搜集整理了:基于S3C240的U-Boot移植 - 会议论文绩等信息,祝愿广大网友取得需要的信息,参考学习。
其他449 基于¥3C240的U—Boot移植 李丛’,赵恒永 (北京化工大学
网络与数据库研究室,北京,100029)摘 要:嵌入式系统中的引导
代码(BootLoader)的移植与定制是嵌入式系统开发的基础与前提条件。
本文以较为通用BootLoader源码——
开源U.Boot为例子,详细介绍了BootLoader的开发和移植,并就常见问题进行了分析和介绍。
关键词:嵌入式;Linux;U—Boot;移植引 言 嵌入式系统中的引导
代码(BootLoader)的开发和移植是嵌入式系统开发的难点之一,同时也是系统运行的基本条件。
BootLoader是嵌入式系统软件开发的第一个环节,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境。
Boot—Loader
代码与CPU芯片的内核结构、具体型号、应用系统的配置及使用的操作系统等因素有关,其功能类似于PC机的BIOS程序。
由于BootLoader和CPU及电路板的配置情况有关,往往是依据量体裁衣、定身制作的原则,以满足要求的最小化
代码存放在启动ROM或Flash中,因此不可能有通用的BootLoader,开发时需要用户根据具体情况进行移植和定制。
另外,从嵌入式系统实际开发角度讲,嵌入式操作系统的引导、配置甚至应用程序的运行状况都和BootLoader有一定的关联,可以说,掌握BootLoader移植和定制是顺利进行嵌入式系统开发的前提和基础。
虽然自行编写BootLoader未尝不可,但从可利用的资源和实际项目开发考虑,采用移植已有的Bootloader源码来解决这一问题更符合大多数项目的开发要求。
U—Boot是当前比较流行,功能强大的BootLoader,它操作简便,可以支持多种体系结构的处理器,同时提供了完备的命令体系L1〕。
本文以深圳远峰计算机技术有限公司的YF2410-II型开发板作为硬件平台,详细介绍U—Boot的移植。
1 BootLoader简介 简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境达到一个合适的状态,以便为最终调用操作
系统内核准备好正确的环境。
另外,由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stagel和stage2两大部分。
所依赖的CPU体系结构的
代码,比如设备初始化
代码等,通常都放在stagel中,为达到短小精悍的目的,通常都用汇编语言来实现。
而stage2则通常第一作者:男,1984年生,硕士生。
*通讯联系人E-mall:buctlc@gmail.corn450过程控制科学技术与应用——第19届中国过程控制会议
论文集 用C语言来实现,这样可以实现复杂的功能, 而且
代码会有更好的可读性和可移植性。
BootLoader的stagel通常包括以下步骤 (按执行的先后排序): (1)硬件设备初始化。
(2)为加载BootLoader的stage2准备RAM空间。
(3)拷贝BootLoader的stage2到RAM空间中。
(4)设置好堆栈。
(5)跳转到stage2的C人口点。
就U—Boot而言,具体启动流程图如图1所示。
qU 设置SYSCONFIG寄存器 I 初始化通用寄存器组P【5:0】,R【7:0】,DAG以及Ic〔I:01 ● 设置软件复位 I 设置内核事件向量表(除了复位器和仿真器事件) 初始化SDRAM(设置SCLK和SDRAM相关寄存器) 复制U—Boot代,码到SDRAM(大/〕x为256K) 设置堆栈 强制
软件复位以保持于监控模式 关闭看门狗 初始化外部异步存储器 利用DMA传输方式将一段看门狗复制到LI—SRAM的高地址单元 初始化BSS段 跳转到startl.s文件到一startl段调用board_init_f,进入第二阶段c
程序 图1 U-Boot第一阶段启动流程图 BootLoader的stage2通常包括以下步骤(按执行的先后排序): (1)初始化本阶段要使用到的硬件设备。
(2)检测系统内存映射(memorymap)。
(3)将kernel映像和根文件系统映像从flash上读到RAM空间中。
(4)为内核设置启动参数。
(5)调用内核。
就U—Boot而言,在第一阶段结束后,调用/U—bootl.1.4/lib—blackfin/board.c文件中 的board—init—f()函数并执行。
然后再调用board.C文件中的board—init—r()函数并按 先后顺序执行。
之后,再在board—init—r函数的最后调用/U—bootl.1.A/common/main.c中的main— 其他451loop()函数。
在执行过程中,系统会首先对自动启动内核进行倒计时,倒计时的时间由环境变量bootdelay的设定值决定。
一2 U—Boot简介 U—Boot是德国DENX小组开发的用于多种嵌入式CPU的BootLoader程序,U-Boot不仅仅支持嵌入式Linux系统的引导,还支持NetBSD,VxWorks,QNX,RTEMS,AR—TOS,LynxOS等嵌入式操作系统。
U—Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多
常用系列的处理器。
它提供启动加载和下载两种工作模式。
启动加载模式也称自主模式,一般是将存储在目标板Flash中的内核和文件系统的镜像装载到SDRAM中,整个过程无需用户的介入。
在使用嵌入式产品时,一般工作在该模式下。
工作在下载模式时,目标板往往受外设的控制,从而将外设中调试好的内核和文件系统下载到目标板中去。
U—Boot允许用户在这两种工作模式间进行切换。
通常目标板启动,会延时等待一段时间,如果在设定的延时时间范围内,用户没有按键,U—Boot就进入启动加载模式〔2J。
YF2410一Ⅱ型开发板的主要配置包括三星ARM9处理器¥3C2410、1个串口和JTAG接口,晶振为12MHz,系统主频为200MHz〔3〕。
另外,开发板上还包括1片64M×8位数据宽度的Flash,地址范围为0x01000000~0x01800000和2片32M×16位数据宽度的SDRAM,地址范围为0x30000000~0x38000000。
Flash使用了2410处理器的BANK0单元,由于2410中地址是循环映射的,因而0x01000000和OxO地址等同。
在本系统中,U-Boot的主要功能包括:建立和初始化RAM;初始化一个串口;检测机器的体系结构,传递MACH—TYPE—XXX的值(SMDK24lO)给内核;建立内核的标记
列表(tagged list);调用内核镜像等等。
3 U—Boot具体移植操作 我们为开发板取名叫crane2410,并在U—Boot中建立自己的开发板类型。
具体的移植工作主要有九个步骤: (1)修改Makefile,为crane2410建立编译项 crane24 10一eonfig:uneonfig @./mkconfig¥(@:一eonfig=)arm arm920t crane2410 NULL s3c24x0 各项的意思如下: arm:CPU的架构(ARCH) arm920t:CPU的类型(CPU),其对应于epu/arm920t子目录。
crane2410:开发板的型号(BOARD),对应于board/crane2410目录。
NULL:开发者/或经销商(vender)。
s3c24x0:片上系统(SOC)。
(2)在board子目录中建立crane2410,拷贝board/smdk2410下的文件到board/crane2410目录,将smdk2410.c更名为crane2410.c ¥cp—rf board/smdk2410/smdk2410 board/crane2410 ¥cd board/crane2410 ¥mv smdk2410.C crane2410.e (3)在include/configs/中建立配置头文件452过程控制科学技术与应用——第19届中回过程控制套议
论文集 ¥cp include/configs/smdk2410.h include/con“gs/crane2410.h (4)指定交叉编译工具的路径,在.bashrc文件中添加: export PATH=¥PATH:/usr/local/arm/2.95.3/bin ¥source.bashre (5)测试编译能否成功 ¥make crane2410一config ¥make all CROSS—COMPILE=arm-linux- (6)依照开发板的内存区的分配情况,修改board/crane2410/lowlevel—init.S 这个文件主要是修改内存参数配置,可以根据具体情况修改。
因为添加的
代码内容过 长,而且针对每个开发板的
代码都不一样,在这里就省略了。
(7)U—Boot的Nand Flash移植 首先必须在/include/configs/crane2410.h中打开CFG—CMD—NAND的注释,从而打 开U—Boot对NAND命令的支持。
由于CRANE2410的配置里没有对NAND Flash支持的 宏定义和函数,所以可以借鉴VCMA9的配置,摘取相关的宏定义和函数声明放在 crane2410.h中,同时摘取相关的函数放在cmd—nand.e中。
这里要注意的是得取消cmd二 nand.C中对NAND Flash的写校验和ECC校验,也就是必须注释掉CONFIG—MTD— NAND—VERIFY—WRITE和CONFIG—MTD—NAND—ECC—JFFS2的宏定义,否则编 译的时候链接无法通过。
(8)重新编译U—Boot ¥make distclean ¥make crane2410一config ¥make all CROSS—COMPILE=arm-linux- (9)通过JTAG口将U—Boot烧写到Flash中 这时U—Boot就可以从NAND flash中启动了,启动信息如下: U-Boot 1.1.4(Sep 9 2007—19:20:33) U—Boot code:33F80000一>33F967C4 BSS:一>33F9FD68 RAM Configuration: Bank#0:30000000 64 MB Flash:512 kB NAND:64M ***Warning—bad CRC.using default environment In:serial Out:serial Err:serial CRANE2410# 至此,就成功把
开源U—Boot移植到YF2410—11型开发板上,为后续嵌入式系统的搭建 提供了基础和前提。
4常见
问题分析 (1)make〔1-〕:***没有规则可以创建“all”需要的目标“hello—world.srec”。
停止。
这是make3.81的一个Bug,可以简单地改目录examples下的Makefile来解决。
将原 其他453文件的第58行开始的内容SREC=hello—world.srec,BIN=hello—world.bin hello—world改成SREC=hello—world.O,BIN=hello—world.O hello—world。
(2)怎样从下载模式转换成启动模式?为什么没有stop any key to stop autoboot的提示? 这是因为没有在/include/configs/crane2410.h中设置CONFIG—BOOTCOMMAND变量。
比如,可以设置成#define CONFIG—BooTCOMMAND“tftp 0x30008000 ulmage;bootm 0x30008000”。
它的意思是通过tftp协议把内核uImage下载到SDRAM中0x30008000处,并且从0x30008000处启动。
如果在提示时间内没按下任何键,那么进入启动模式,否则进入下载模式。
提示时间是由bootdelay环境变量控制,可通过setenv进行设置。
5结语 U—Boot的移植是嵌入式系统搭建的一个重要环节,本文简要而具体地介绍了Boot—Loader特别是U—Boot的移植特点和启动过程,并基于YF2410一Ⅱ型嵌人式目标板的具体硬件资源,研究了移植U—Boot的方法。
目前,笔者移植的U-Boot已经能够稳定地运行在目标板上,并在此基础上成功地加载了Linux内核和文件系统,为后续的应用程序和驱动程序开发奠定了基础。
本文的创新点在于总结和介绍了移植的步骤和方法,并就常见问题进行分析,不仅适用于¥3C2410处理器的嵌入式系统,对于开发其它类型的嵌入式系统也具有一定的参考意义。
参 考 文 献E1〕Craig Hollabaugh著,陈雷,钟书毅等译.嵌入式“nux——硬件、软件与接口〔M〕.北京t电子工业出版 社,2003.〔23章健,袁义江.U—BOOT在ARM平台上的移植及应用〔J〕.微
计算机信息,2007,1-2:137—138.〔3〕CPU:Samsung Electronics Co.Ltd USER’S MANUAL¥3C2410X 32一Bit RISC Microprocessor Revision 1.2 rz〕.2002. Transportation of U—Boot On¥3C24 1 0 Li Cong,Zhao Hengyong(Research Institute of Computer Application,Beijing University of Chemical Technology,Beijing,100029)Abstract:In an embedded system the transportation of the boot loader is the basis and pre—requisite condition of development.This paper measures the more universal open source bootloader u—boot by detailing the transportation of the u—boot and analyzing the problem we of—ten seen in the transportation.Key words:Embedded t Linux,Boot f Transportation