云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 邵林军 - 于ARM7的bootloader移植和设计 - 图文

邵林军 - 于ARM7的bootloader移植和设计 - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 18:50:55

1.在线读写Flash、DOC、IDE、IIC、EEROM和RTC 其他BootLoader

基本不支持IDE和DOC的在线读写。

2.支持串行口kermit和S-record下载代码 U-boot本身的工具可

以把ELF格式的可执行文件转换成S-record格式,直接从串口下载并执行。

3.识别二进制、elf和uImage格式的Image 对Linux引导有特别

的支持,U-boot对Linux内核进一步封装为uImage。 4.单任务软件运行环境 U-boot可以动态加载和运行独立的应用

程序,这些独立的应用程序可以利用U-boot控制台的I/O函数、内存申请和终端服务等等。这些应用程序还可以在没有操作系统的情况下进行,是测试硬件系统很好的工具。 5.监控命令集 读写I/O、内存、寄存器、外设测试功能等。 6.脚本语言支持(类似BASH脚本) 利用U-boot中的autoscr命

令,可以在U-boot中运行“脚本”。首先在文本文件中输入需要执行的命令,然后用tool/mkimage封装,然后下载到开发板上,用autoscr执行就可以了。

7.支持WatchDog、LCDlog和状态指示功能 如果系统支持splash

screen,U-boot启动时,会把这个图像显示到LCD上,给用户更友好的感觉。

8.支持MTD和文件系统 U-boot作为一种强大的BootLoader,它不仅支持MTD,而且可以在MTD基础上实现多种文件系统,比如cramfs、fat、jffs2等。

2.2.2 U-Boot的文件结构

U-Boot的版本更新速度很快,从它的官方网站可以看到目前最新发布的版本是U-Boot-2010.12.tar.bz,版本越新,支持的功能也就越多。U-Boot的版本选择跟自己目标板的硬件密不可分,U-Boot源码需要使用交叉编译工具进行编译,才能生成能在目标板上运行的文件,对于不同的U-Boot的版本,交叉编译工具并没有通用性,在综合考虑交叉编译工具选择的难易和目标板的硬件配置,选择了目前使用较多,比较稳定的U-Boot-1.1.6。从站点ftp://ftp.denx.de/pub/u-boot下载uboot1.1.6.tar.bz2的源码包。解压后,可以看到它的目录结构,在U-Boot的顶层目录共有26个子目录,U-Boot的代码采用的是一种高度模块化的编程方式,每个目录下分别存放和管理不同的模块功能的源程

16

序:

1. board 该目录存放与开发板有关的目录文件,如SMDK2410(arm920t)与开发板的具体硬件有关

2. cpu 该目录存放于cpu架构相关的目录结构,如arm720t、i386等。

3. lib_xxx 存放着某一CPU体系结构的通用函数库,以lib_ram为例,它里面存放着arm体系结构通用的文件,用来实现对arm平台的通用函数。

4. include 头文件以及开发板相关的配置文件,所有开发板的配置文件都在该目录下的configs目录下。

5. common 通用多功能函数的实现,如u-boot里许多通用的命令函数。

6. lib_generic 通用库函数的实现

7. net 存放网络的程序,如tftp、bootp等协议的实现。 8. fs 存放文件系统的程序,如cramfs、ext2、fat、jffs2等 9. post 存放上电自检程序 10. dirvers 通用的设备驱动程序 11. disk 硬盘接口程序 12. rtc rtc驱动程序

13. dtt 数字温度测量器和传感器的驱动

14. example 独立运行的程序例子,比较经典的就是hello world例子

15. tools 自作uboot映像的工具,如mkimage 16. doc 开发使用文档,如NandFlash、USB的说明 17. Nand_spl u-boot从nandflash启动的支持

这些目录存放规则的不同,可以把U-boot下的目录大致分为三类:

1) 与处理器体系结构或者开发板硬件直接相关。 2) 通用的函数或者驱动程序。

3) U-boot的应用程序、工具或者文档。

U-boot代码的这种存放方式,给U-boot的移植带来了很大的方便。与硬件相关的代码只要集中在子目录/board、/cpu、/lib_xxx下,如果需要在U-boot下增加一种目标板系统的支持,需要修改的代码主要存放在这几个目录下。 2.2.3 U-boot启动流程分析

17

U-boot的运行流程符合前面提出的典型BootLoader结构框架,也可以分为stage1和stage2两个部分,然而其也有自己的独特性。下面我们把BootLoader分为两个阶段来进行分析。

2.2.3.1 第一阶段 这部分代码在start.s文件中,用汇编语言编写,其代码重要部分有:

1.设置异常中断向量表 第一条是复位调转语句,让其进入硬件初始化程序。异常向量表是BootLoader和uClinux操作系统内核发生联系的关键之处,当操作系统发生异常时,它将进入异常中断向量表读取相应的指令。因为uClinux已经在内存中0x0c000000处建立了二级中断向量表,所以这里除了复位中断以外的其他异常中断要调到相应的二级异常中断向量表处。中断向量表如下所示:

_start: b reset ldr pc, =0x0c000004 ldrpc, =0x0c000008 ldrpc, =0x0c00000c ldrpc, =0x0c000010 ldrpc, =0x0c000014 ldrpc, =0x0c000018 ldrpc, =0x0c00001c

如果BootLoader功能要求相应中断,那么BootLoader必须在0x0c000000位置建立二级异常中断向量表,以便同uClinux保持一致,这个表存放在flash中,由BootLoader复制到RAM的0x0c000000处[3]。

2.初始化微处理器内部寄存器 /*禁止看门狗*/ ldr r0,=WTCON ldr r1,=0x0 str r1,[r0] /*禁止所有中断*/ ldrr1,=INTMSK ldrr0,=0x07ffffff strr0,[r1]

/*设定时钟控制寄存器*/ ldrr1,=LOCKTIME ldrbr0,=2000

18

strbr0,[r1]

/*设置CPU速度和时钟频率:调整时钟,由低速运行进入高速运行阶段*/

ldrr1,=PLLCON

ldrr0,=(0x58<<12)|(0x6<<4)|0x1 strr0,[r1]

初始化内存寄存器(board/lowlevel_init.s),指定每个bank的总线宽度和数据格式(大端或小端),提升系统的可移植性。存储器的配置数据都存储在MEMORY_CONFIG为起始地址的数据表中,将预先配置好的初始化数据存入与存储器控制相关的13个寄存器[6],这些寄存器是以0x01c80000为起始地址的13个连续的32位寄存器,相应寄存器中需要写入的值,是根据自己开发板上的设备片选和SDRAM来设置。

3.拷贝读写区域数据 系统需要将读写的数据和变量从ROM拷贝到RAM里,_armboot_start、_bss_start这些符号是用来定位程序各个段的参考信息,在编译连接的时候,把它们转换成用来对各个段定位的地址信息。

将text和data段重定位到SDRAM的_TEXT_BASE处,其值为0x0c700000,在board/micetek/ev44b0/config.mk中定义。Text段既可以在Flash中运行,也可以在RAM中运行,U-boot的功能中有烧写Flash,而烧写时处理器无法从Flash中读取指令,因此text和data复制到RAM中,跳转到RAM中运行,若不考虑烧写Flash,BootLoader不必复制text,程序始终在Flash中运行即可。

4.建立堆栈 堆栈指针的设置是为了执行C语言代码做好准备,堆栈的位置在malloc函数分配空间和全局数据的后面,由于堆栈为满递减型栈,栈指针指向栈底。

5.跳转到C语言代码函数 Ldrpc,_start_armboot

如下图2-3是U-boot运行第一阶段的流程

19

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

1.在线读写Flash、DOC、IDE、IIC、EEROM和RTC 其他BootLoader基本不支持IDE和DOC的在线读写。 2.支持串行口kermit和S-record下载代码 U-boot本身的工具可以把ELF格式的可执行文件转换成S-record格式,直接从串口下载并执行。 3.识别二进制、elf和uImage格式的Image 对Linux引导有特别的支持,U-boot对Linux内核进一步封装为uImage。 4.单任务软件运行环境 U-boot可以动态加载和运行独立的应用程序,这些独立的应用程序可以利用U-boot控制台的I/O函数、内存申请和终端服务等等。这些应用程序还可以在没有操作系统的情况下进行,是测试硬件系统很好的工具。 5.监控命令集 读写I/O、内存

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com