没有合适的资源?快使用搜索试试~ 我知道了~
uboot启动过程详细分析
5星 · 超过95%的资源 需积分: 28 22 下载量 122 浏览量
2014-09-25
11:03:02
上传
评论 2
收藏 310KB DOCX 举报
温馨提示
试读
36页
本文档是本人制作,并添加一些他人的资料合并而成.内容翔实,分析到位. 关键是为每一个段添加了章节,段号,目录,以方便用户查询.
资源推荐
资源详情
资源评论
目录
1.U-Boot 基础知识-........................................................................................................................ 1
1.1Bootloader 的启动方式..................................................................................................... 2
1.1.1 网络启动方式........................................................................................................ 2
1.1.2 磁盘启动方式........................................................................................................ 2
1.1.3 Flash 启动方式....................................................................................................... 2
1.2 U-boot 介绍...................................................................................................................... 2
1.2.1 u-boot 源代码的目录结构....................................................................................2
1.2.2 U-Boot 工作过程................................................................................................... 3
2. 代码介绍.................................................................................................................................... 3
2.1 总结性分析...................................................................................................................... 4
2.2 链接分析.......................................................................................................................... 6
3.第一阶段代码分析..................................................................................................................... 8
3.1 硬件设备初始化............................................................................................................... 9
3.1.1 设置异常向量........................................................................................................ 9
3.1.2 CPU 进入 SVC 模式............................................................................................... 10
3.1.3 设置控制寄存器地址.......................................................................................... 10
3.1.4 关闭看门狗.......................................................................................................... 11
3.1.5 屏蔽中断.............................................................................................................. 11
3.1.6 设置 MPLLCON,UPLLCON, CLKDIVN.....................................................................12
3.1.7 关闭 MMU,cache ------(也就是做 bank 的设置).........................................14
3.1.8 初始化 RAM 控制寄存器..................................................................................... 17
3.2 复制 U-Boot 第二阶段代码到 RAM................................................................................ 19
3.3 设置堆栈........................................................................................................................ 22
3.4 清除 BSS 段..................................................................................................................... 23
4.第二阶段代码分析................................................................................................................... 23
4.1 gd_t 结构体.................................................................................................................... 25
4.2 bd_t 结构体.................................................................................................................... 25
4.3 init_sequence 数组................................................................................................. 26
4.4 U-Boot 启动 Linux 过程.................................................................................................. 28
4.4.1 向内核传递参数.................................................................................................. 28
4.4.2 使用 bootm 命令启动内核.................................................................................. 29
5. U-Boot 添加命令的方法及执行过程....................................................................................... 32
6.问题解析................................................................................................................................... 34
6.1 编译地址和运行地址?................................................................................................... 34
1.U-Boot 基础知识-
1.1Bootloader 的启动方式
Bootloader 的启动方式主要有网络启动方式、磁盘启动方式和 Flash 启动方式。
1.1.1 网络启动方式
图 1Bootloader 网络启动方式示意图
1)我们使用的 u-boot 可以直接设置网络参数,因此这里就不用使用 DHCP 的方式动态分
配 IP 了。
2)目标板的 Bootloader 通过 TFTP 服务将内核映像下载到目标板上,
3)然后通过网络文件系统 NFS 来建立主机与目标板之间的文件通信过程。
1.1.2 磁盘启动方式
这种方式主要是用在台式机和服务器上的,这些计算机都使用 BIOS 引导,并且使用磁盘
作为存储介质,这里面两个重要的用来启动 linux 的有 LILO 和 GRUB,这里就不再具体说
明了。
1.1.3 Flash 启动方式
这是我们最常用的方式。Flash 有 NOR Flash 和 NAND Flash 两种。NOR Flash 可以支持
随机访问,所以代码可以直接在 Flash 上执行,Bootloader 一般是存储在 Flash 芯片上的。
另外 Flash 上还存储着参数、内核映像和文件系统。这种启动方式与网络启动方式之间的
不同之处就在于,在网络启动方式中,内核映像和文件系统首先是放在主机上的,然后经
过网络传输下载进目标板的,而这种启动方式中内核映像和文件系统则直接是放在 Flash
中的,这两点在我们 u-boot 的使用过程中都用到了。
1.2 U-boot 介绍
1.2.1 u-boot 源代码的目录结构
1、board 中存放于开发板相关的配置文件,每一个开发板都以子文件夹的形式出现。
2、Commom 文件夹实现 u-boot 行下支持的命令,每一个命令对应一个文件。
3、cpu 中存放特定 cpu 架构相关的目录,每一款 cpu 架构都对应了一个子目录。
4、Doc 是文档目录,有 u-boot 非常完善的文档。
5、Drivers 中是 u-boot 支持的各种设备的驱动程序。
6、Fs 是支持的文件系统,其中最常用的是 JFFS2 文件系统。
7、Include 文件夹是 u-boot 使用的头文件,还有各种硬件平台支持的汇编文件,系统配置
文件和文件系统支持的文件。
8、Net 是与网络协议相关的代码,bootp 协议、TFTP 协议、NFS 文件系统得实现。
9、Tooles 是生成 U-boot 的工具。
对 u-boot 的目录有了一些了解后,分析启动代码的过程就方便多了,其中比较重要的目录
就是/board、/cpu、/drivers 和/include 目录,如果想实现 u-boot 在一个平台上的移植,就
要对这些目录进行深入的分析。
1.2.2 U-Boot 工作过程
大多数 Boot Loader 都包含两种不同的操作模式:"启动加载"模式和"下载"模式,这种区
别仅对于开发人员才有意义。
但从最终用户的角度看,Boot Loader 的作用就是:用来加载操作系统,而并不存在所谓的
启动加载模式与下载工作模式的区别。
(一)启动加载(Boot loading)模式:这种模式也称为"自主"(Autonomous)模式。
也即 Boot Loader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整
个过程并没有用户的介入。
这种模式是 Boot Loader 的正常工作模式,因此在嵌入式产品发布的时侯,Boot Loader
显然必须工作在这种模式下。
(二)下载(Downloading)模式:在这种模式下,目标机上的 Boot Loader 将通过串口连接或
网络连接等通信手段从主机(Host)下载文件,比如:下载内核映像和根文件系统映像等。从主
机下载的文件通常首先被 Boot Loader 保存到目标机的 RAM 中,然后再被 BootLoader 写
到目标机上的 FLASH 类固态存储设备中。Boot Loader 的这种模式通常在第一次安装内核
与根文件系统时被使用;此外,以后的系统更新也会使用 Boot Loader 的这种工作模式。工
作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。这
种工作模式通常在第一次安装内核与跟文件系统时使用。或者在系统更新时使用。进行嵌
入式系统调试时一般也让 bootloader 工作在这一模式下。
UBoot 这样功能强大的 Boot Loader 同时支持这两种工作模式,而且允许用户在这两
种工作模式之间进行切换。
大多数 bootloader 都分为阶段 1(stage1)和阶段 2(stage2)两大部分,uboot 也不例外。
依赖于 CPU 体系结构的代码(如 CPU 初始化代码等)通常都放在阶段 1 中且通常用汇编语
言实现,而阶段 2 则通常用 C 语言来实现,这样可以实现复杂的功能,而且有更好的可读性和
移植性。
2. 代码介绍
2.1 总结性分析
系统启动的入口点。既然我们现在要分析 u-boot 的启动过程,就必须先找到 u-boot 最
先实现的是哪些代码,最先完成的是哪些任务。
另一方面一个可执行的 image 必须有一个入口点,并且只能有一个全局入口点,所以
要通知编译器这个入口在哪里。由此我们可以找到程序的入口点是在
中指定的,其中 ENTRY(_start)说明程序从_start 开始运行,而
他指向的是 cpu/arm7tdmi/start.o 文件。
因为我们用的是 ARM7TDMI 的 cpu 架构,在复位后从地址 0x00000000 取它的第一条指令,
所以我们将 Flash 映射到这个地址上,
这样在系统加电后,cpu 将首先执行 u-boot 程序。u-boot 的启动过程是多阶段实现的,分
了两个阶段。
依赖于 体系结构的代码(如设备初始化代码等)通常都放在 中,而且通常都是用
汇编语言来实现,以达到短小精悍的目的。
而 则通常是用 语言来实现的,这样可以实现复杂的功能,而且代码具有更好的可读
性和可移植性。
下面我们先详细分析下 stage1 中的代码,如图 2 所示:
图 2Start.s 程序流程
代码真正开始是在,设置异常向量表,这样在 发生异常时就跳转到
/ 中去执行相应得中断代码。
在 文件中大部分的异常代码都没有实现具体的功能,只是打印一些异常消
息,其中关键的是 reset 中断代码,跳到 入口地址。
reset 复位入口之前有一些段的声明。
1.在 reset 中,首先是将 cpu 设置为 svc32 模式下,并屏蔽所有 irq 和 fiq。
2.在 u-boot 中除了定时器使用了中断外,其他的基本上都不需要使用中断,比如串
口通信和网络等通信等,在 u-boot 中只要完成一些简单的通信就可以了,所以在这里屏蔽
掉了所有的中断响应。
3.初始化外部总线。这部分首先设置了 I/O 口功能,包括串口、网络接口等的设置,
其他 I/O 口都设置为 。然后设置 BCFG0~BCFG3,即外部总线控制器。这里 bank0
对应 Flash,设置为 16 位宽度,总线速度设为最慢,以实现稳定的操作;Bank1 对应
DRAM,设置和 Flash 相同;Bank2 对应 RTL8019。
4.接下来是 cpu 关键设置,包括系统重映射(告诉处理器在系统发生中断的时候到外
部存储器中去读取中断向量表)和系统频率。
5.lowlevel_init,设定 RAM 的时序,并将中断控制器清零。这些部分和特定的平台有
关,但大致的流程都是一样的。
下面就是代码的搬移阶段了。为了获得更快的执行速度,
通常把 stage2 加载到 RAM 空间中来执行,因此必须为加载 Boot Loader 的 stage2 准
备好一段可用的 RAM 空间范围。空间大小最好是 memory page 大小(通常是 4KB)的倍数
一般而言, 的 RAM 空间已经足够了。
flash 中存储的 u-boot 可执行文件中,代码段、数据段以及 BSS 段都是首尾相连存储
的,
所以在计算搬移大小的时候就是利用了用 BSS 段的首地址减去代码的首地址,这样
算出来的就是实际使用的空间。
程序用一个循环将代码搬移到 0x81180000,即 RAM 底端 1M 空间用来存储代码。
然后程序继续将中断向量表搬到 RAM 的顶端。由于 stage2 通常是 C 语言执行代码,
所以还要建立堆栈去。
在堆栈区之前还要将 malloc 分配的空间以及全局数据所需的空间空下来,他们的大小
是由宏定义给出的,可以在相应位置修改。
基本内存分布图:
剩余35页未读,继续阅读
资源评论
- w07252172018-12-11正要学习uboot呢,自己学起来很吃力,有个参考非常好。
eolman
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功