第35卷(2007)第8期 计算机与数字工程 ‘179 U—Boot在S3 CEV40上的移植分析与实现 陈华锋吕杨 (昆明理工大学信息工程与自动化学院昆明650051) 摘要介绍功能完善的嵌入式Boot L0ader—u—Boot,详细描述了它的运行原理,着重阐述其在¥3CEV40开发板 上的移植过程,并对移植结果进行了测试。 关键词Boot Loader U—Boot S3CEV40¥3C44B0x移植 中图分类号TP31 1 引言 工具,特别支持Linux,为板级移植做了大量的 工作。 系统引导程序Boot Loader是在系统复位后执 U—Boot压缩包中主要目录结构如下: 行的第一段代码,相当于Pc上的BIOS以及商业 board一与开发板相关的文件。 实时操作系统中的板级支持包BSP。-Boot Loader common一存放独立于处理器体系结构的通用 首先完成系统硬件的初始化,包括时钟的设置、存 代码,如内存大小探测与故障检测等等。该目录下 储区的映射等,设置堆栈指针,然后跳转到操作系 main.C可以看作shell程序,负责接受用户输入并 统内核的入口,将系统控制权交给操作系统。Boot 送给相应的处理函数执行。 Loader的实现高度依赖于硬件,包括处理器的体系 cpu—CPU相关文件,其下子目录都是以u— 结构、具体型号、硬件电路板的设计。U—Boot是 Boot所支持的CPU命名。主要是针对特定处理器 当前功能较为完善的Boot Loader,它操作简便,支 的初始化和操作代码,启动代码start.S文件存放 持多种体系结构的处理器,同时提供了完备的命令 在这里。 体系。Embest¥3CEV40开发板是英蓓特公司制作 drivers一通用设备驱动程序。 的基于Samsung S3C44B0x处理器的全功能ARM fs—U—Boot所支持文件系统的相关文件。 开发板,其硬件系统包括存储器,I/O,数码管,液晶 include一各种头文件和配置文件。 显示屏,触摸屏,键盘,音频输出,通讯接口包含串 lib—xxx一与某一处理器体系结构相关的文 口、以太网接口,USB接口,I2C接口,高级扩展包 件,如lib—arm目录中包含着与ARM处理器相关 括IDE硬盘、CF卡、Flash电子硬盘,是一款应用和 的文件。 接口非常全面的开发板。 2.2 U—Boot运行过程分析 2 U—Boot U—Boot的运行过程如图1所示。U—Boot编 译后的代码定义一般在100kB左右,分成两个阶 2.1 U—Boot简介 段来执行。第一阶段的代码在start.S中定义,它 U—Boot是由开源项目PPCBoot发展起来的, 包括从系统上电后在OxO0000000地址开始执行的 ARMboot并入PPCBoot后,和其他一些arch的 部分。这部分代码运行在Flash中,包括对 oLader合称U—Boot。U—Boot的支持是持续性 S3C44B0x的一些寄存器的初始化和将U—Boot的 的,其发布网址为:hnp://sourceforge.net/projects/ 第二阶段代码从Flash,拷贝到SDRAM中。第二阶 U—boot/。U—Boot最新版本为U—Boot一1.1.4。 段的起始地址是在第一阶段代码中指定的,被复制 u—Boot支持的处理器构架包括PowerPC, 到SDRAM后,就从第一阶段跳到这个入口地址开 ARM,MIPS和x86等等。U—Boot提供大量外设 始执行剩余部分代码。第二阶段主要是进行BSS 驱动,支持多个文件系统,附带调试、脚本、引导等 段设置、堆栈的初始化等工作,然后转入board.C 收到本文时间:2006年10月16日 作者简介:陈华锋,男,硕士研究生,研究方向:嵌入式技术。吕杨,女,教授,研究方向:计算机控制与嵌入式技术。 维普资讯 http://www.cqvip.com 180 陈华锋等:U—Boot在¥3CEV40上的移植分析与实现 第35卷 文件中的start_armboot函数进行各种初始化设置, 3.2建立¥3CEV40开发板的编译空间 主要有:CPU相关的设置、板子相关的设置、中断 在U—Boot包中已有B2板与开发板 设置、初始化环境变量、设置baud参数、串口初始 S3CEV40同是使用S3C44B0x处理器,所以可以在 化、控制台设置、显示标题、可用内存配置、lfash初 B2板基础上进行移植。使用如下命令建立 始化等等。最后会跳转到main—loop函数中,接受 S3CEV40开发板的编译空间: 命令并进行命令处理。 (1)board目录下 系统复位,进入管理模式 #cd U—boot一1.1.4 3 U—Boot的移植 #cd board 调用epu init—erit, 进行硬件设备初始化 3.1建立交叉编译环境 #cp~R dave embest U—Boot的编译工作 #ed embest 调用lowlevel~init, #mv B2 s3cev40 设置内存控制寄存器 是在Linux操作系统下完 #cd s3Ieev40 成的,所以首先要建立 #mv B2.e s3eev40.e 复制U-Boot到RAM Linux操作系统环境。可 修改Makefile文件中的“B2”为“s3eev40”。 以在机器上安装一个真实 设置堆栈 (2)inelude/eonfigs目录下 的Linux操作系统,也可 #cd U—boot一1.1.4 转入函数start_armboot 以在Windows操作系统下 #cd inelude/eonfigs 完成初始化 安装并启动仿真软件VM- ‘#cp B2.h s3eev40.h 转入函数ma 一loop, ware Workstation后,在其 3.3修改与开发板相关文件 接受并处理命令 中安装虚拟Linux操作系 (1)epu/s3c44bO/start.S 图1 U—Boot运行过程.巩。 start.S是U—Boot复位启动执行的第一段代 编译U—Boot可选用 码,主要根据开发板例程44binit.S修改。重点要 交叉编译器arrrl—linux—gcc(U—Boot默认的编译 修改的是PLLCON寄存器的值,在“epu—init—erit:” 器)。启动Linux操作系统后,在网上下载cross一 之前添加如下代码: 2.95.3.tra.bz2文件,解压 ̄1]/usr/loeal/arm目录下 #define M_DIV56//Fin=8MHz Fout:((56+8)/8) 得到2.95.3版本的交叉编译工具,并在/etc/ 8=64MHz bashre文件中添加一项:export PATH=/usr/loeal/ #define PDIV2 _arm/2.95.3/bin:¥PATH,以保障在任何目录中都 #define S_DIV1 能进行编译工作。 在“cpu—init—erit:”代码中添加如下代码: #elif CONFIGs3 C44B0__CLOCK_SPEED=:64 —若选用arm—elf—gcc来编译U—Boot,则下载 Idrr0,=((M—DIV<<12)+(P—DIV<<4)+S— arrrl—elf—tools一20030314.sh,然后执行命令:sh DIV)//Fin=8MHz.Fout=64MHz alTll—elf—tools一20030314.sh,这个命令会在 (2)cpu/s3e44bO/seria1.e Linux操作系统中自动建立一个alTll—elf—gcc的 seria1.e包括对串口进行初始化及串口数据通 交叉编译环境。因为U—Boot默认的编译器为 信的一些函数。要修改的是串口初始化函数serial arrrl—linux—gcc,所以还要将U—boot一1.1.4/ —setbrg(),在每一种波特率下添加如下两行: Makefile中的CROSS—COMPLILE由arln—linux一 #elif CONFIG_¥3 C44BO_CLOCK—SPEED=:64 改为arln—elf—o divisor=xx; 下载并解压U—boot一1.1.4.tar.bz2。用 其中divisor与时钟频率为66的大致相同(波 make distclean、make B2一eonfig、make三条命令试 特率为115200时,divisor=34)。 编译,出现编译错误。将U—boot一1.1.4/epu/ (3)board/s3eev40/s3eev40/s3eev40.e s3e44bO/eonfig.mk倒数第二行代码PLATFORM— s3cev40.e程序执行对开发板I/O端口的初始 CPPFLAGS+:¥(call ca—option,一mapcs一32, 化工作。在¥3C44BOx处理器中,I/O端口引脚都 一mabi=apes—gnu)改为PLATFORM—CPPFLAGS 是多功能复用引脚,在复位后这些引脚的定义是不 +=¥(call ca—option,一mapcs一32,¥(call ca 确定的,所以在这里要进行明确。该文件的修改依 —option,一mabi=apes—gnu))。再次进行试编 照例程44blib.e中的函数Port—Init()进行。 译,编译通过则表明U—boot包能正确编译。 (4)inelude/eonfigs/s3eev40.h 维普资讯 http://www.cqvip.com
第35卷(2007)第8期 计算机与数字工程 #make s3eev40eonfig 181 s3cev40.h中是与开发板相关的一些常量定 义,这些常量要根据开发板手册进行修改,主要需 要修改的常量如下: #define CONFIG/ —#make 正确编译后会在U—boot一1.1.4目录下生成 四个文件: s3eev40 1/ 定义¥3CEV40开发板 U—boot—ELF格式的文件,可以被大多数De— #define CONFIGs3C44B0CLOCKSPEED64/ CPU 一—bug程序识别; U—boot.bin一二进制文件,纯粹的U—Boot 的频率是64MHz / #define CONFIGDRIVER—RTL8019/ 以太网使用 二进制执行代码,不保存ELF格式和调试信息,这 RTL8019芯片 / #define RTLS019一BASE 0x02180000/ RTL8019芯片 的寄存器基址 / #define CFGLOAD——ADDR 0xOe008000/ 默认的内 核加载地址 / #define CONFIG—NR—DRAM—BANKS 1/ 一块 SDARAM / #define PHYS—SDRAM一1 0xOeO00000/ SDRAM的起 始地址 / #define PHYSSDRAM1SIZE 0x00800000/ SDRAM _一的大小是8MB / #define PHYSFLASH一1 OxO0000000/ Flash的起始 地址 / #deftBe PHYSFLASH—SIZE 0x00200000/ 2MB Flash / #define CFGFL ̄SH—BASE PHYS—FLASH1/ 定义 别名 / #define CFG—MAX—FLASHSECT32/ Flash SST39VF160共32个扇区 / 棚efine CFG—FLASHADDR0 0x5555 #define CFG——FLASH——ADDR1 0x2AAA #define CFGENV_Is_IN—FLASH1/叫哿环境变量保存 在FLASH中 / #define CFG_ENVADDR 0x20000/ 保存环境变量的 起始地址 / ‘ #define CFG_ENV—SECTSIZE 0xlO000/ 保存环境变 量的扇区64K / #define CFGMONITOR——BASE 0xc0(O)O(03 3.4修改Makfile文件 修改U—boot一1.1.4/Makefile文件,在B2一 config之后添加如下两行代码: s3 eev40config:unconfig @./mkconfig¥(@:一config=)arnl s3c44b0 s3cev40 embest s3c44bO是指处理器对应目录cpu/s3c44bO, 两个s3cev40分别指示开发板目录board/s3cev40/ s3cev40和board/s3cev40。 3.5生成目标文件 在U—boot一1.1.4目录下依次使用以下三条命令: #make diste】ean 个文件一般用于烧录到用户开发板中; U—boot.map一编译连接后程序的符号表。 U—boot.srec—Motorola S—Record格式,可 以通过串行口下载到开发板中。 4 U—Boot的烧写与运行 用Flash烧写程序Flash Programmer将生成的 U—boot.bin文件烧写到¥3CEV40开发板上的 Flash芯片上。复位开发板,U—Boot运行起来后, 通过串口与主机通信,在主机上运行超级终端程 序,能看到图2所示的运行结果。其中S3CEV40= >是命令提示符,可以输入U—Boot命令查看相关 环境变量或下载文件到Flash等等。 U-Boot 1.1.4(Jun 28 2006—19:37:Oh) U-Boot code:OC100000一>OcIIgEBC BSS:一>OClIEOIO RnH C0nfigurati0n: Bank H0:OcOOOOO0 8 HB Flash: 2 HB ***Warning—bad CffC using default environment In: serial Out: serial Err: serial Hit any kek,to stop autoboot: }I}I Boot ing image at OOO3ggOO Bad Magic Number S3CEV ̄8=>.. 图2由串口输出的运行结果 5 结束语 至此,将U—Boot移植到开发板S3CEV40的 工作完成了。在U—Boot运行起来后,通过串口或 以太网口将编译好的嵌入式操作系统(如uC/OS —II、uCLinux等)传送并烧写到Flash当中,可以很 方便地调试操作系统内核。 参考文献 [1]马忠梅,李善平,康慨等.ARM&Linux嵌入式系统教程 [M].北京:北京航空航天大学出版社,2004 [2]田泽.嵌入式系统开发与应用实验教程(第2版)[M]. 北京:北京航空航天大学出版社,2005. [3]曾宏安,齐尧,焦振强等.用U—Boot构建嵌入式系统 的引导装载程序[J].单片机与嵌入式系统应用.2005, 2.45~47
因篇幅问题不能全部显示,请点此查看更多更全内容