当前位置:
文档之家› Bootloader.ppt
Bootloader.ppt
将静态存储设备ROM、EEPROM、Flash ROM等映射到上述地址 将BootLoader 安排在上述地址
2.3.3 用来控制Bootloader的设备或机制
在Bootloader阶段,嵌入式系统本身的显示设备尚不可用 字符方式与用户进行交互 通常需要与Host主机相连,Host作为TTY终端 输出打印信息到串口,从串口读取用户控制命令
(三) ARM 指令(续):
TEQ R1, #10 ;如果R1=10则将CPSR寄存器的Z标志位置为1
TEQ R1,R2 ;如果R1=R2则将CPSR寄存器的Z标志位置为1
BEQ label ;条件跳转 ;如果CPSR寄存器中的Z标致为置位,则跳转到label
B label ;无条件跳转至label处
二 Bootloader 的概念
普通PC上的引导过程 Bootloader 的概念 Bootloader 的特性
2.1普通PC上的引导过程:
BIOS(Basic Input/Output System)的任务:
(一) 上电自检: 主板发RESET信号,等待POWER GOOD 信号
开机时,由于此时电压还不稳定,主板控制芯片组会向CPU发出并保持 一个RESET(重置)信号,让CPU初始化,同时等待电源发出的POWER GOOD信号(电源准备好信号)。 撤去RESET信号从一个固定的地址FFFF0H开始执行指令, 无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳 到系统BIOS中真正的启动代码处。
效 6. 交换上述两个字,并再次写入上述空间,即0xCC,0x66 7. 立即将这两个字的内容读回,如果不是0xCC,0x66则说明这个memory
page所占据的地址范围不是一段有效的RAM空间 8. 恢复上述两个字的原始内容,测试完毕。 9. 为了得到一段干净的RAM空间范围,可以将所安排的RAM空间范围进行
清零操作。
3.4 其他步骤
拷贝Stage 2的内容到RAM中 设置堆栈指针sp,通常指向分配给Bootloader的地址空间的最顶端,
向下生长 跳转到Stage2 的C 入口点
3.5 示例代码分析
语法知识 部分代码分析
3.5.1 语法知识
GNU Assembler —— as
(一)伪指令(Directive): .equ 等效于 = .global 使一个符号成为全局可见,否则多个文件中相同的符号名发生冲
STR Rs, [Rn, +/- Rm] 将内存Rs中的内容读取到Rn +/- Rm中
(三) ARM 指令(续):
ADD Rd, Rx, #1 ADD Rd, Rx, Ry SUB Rd, Rx, #1 SUB Rd, Rx, Ry
;Rd=Rx+1 ;Rd=Rx+Ry ;Rd=Rx-1 ;Rd=Rx-Ry
3.1基本硬件的初始化
为Stage2及Kernel的执行准备好硬件环境:
屏蔽所有中断 在BootLoader阶段通常不必响应任何中断;写CPSR(当前程序状态寄 存器)寄存器禁止中断
设置CPU的速度和时钟频率 RAM 初始化:正确设置内存控制器 在Console 终端打印信息:
表明系统状态是否OK, 通常还会点亮一个板子上的LED表明系统初始 化正常 关闭CPU内部指令/数据 Cache
(三) ARM 指令:
LDR Rd, [Rn, # +/- Offset] 将内存Rn +/- Offset中的内容读取到Rd寄存器
LDR Rd, [Rn, +/- Rm] 将内存Rn +/- Rm中的内容读取到Rd寄存器
STR Rs, [Rn, #+/- Offset] 将内存Rs中的内容读取到Rn +/- Offset中
2.3.4 BootLoader 启动的阶段和模式
启动分为两阶段:Stage1、Stage2, Stage1简单、更加依赖于硬件、汇编实现 Stage2 复杂、硬件依赖性稍弱、C语言实现 便于移植、能完成较为复杂的功能
2.3.5 Bootloader的操作模式
(一)启动模式(Boot Loading):也称Autonomous模式 系统上电,CPU从Bootloader所在地址处开始执行,在固态存储器上 Bootloader 自行运行,将代码复制到RAM中,并转而到RAM上运行 Bootloader 准备好内核运行所需的环境和参数,复制内核到RAM并运行
2.2 BootLoader 的概念
操作系统内核运行之前运行的一段小程序, 初始化硬件设备、建立内存空间映射图 将系统的软硬件环境带到一个合适的状态,准备调用系统
内核的正确环境 依赖硬件系统而实现,很难建立通用的BootLoader
2.3 BootLoader 的特性
Bootloader的硬件依赖性 Bootloader 的存贮方式 用来控制Bootloader的设备或机制 BootLoader 启动的阶段和模式 Bootloader的操作模式 Bootloader 的文件传输设备及协议
3.2 为加载stage2 准备空间
将Bootlader Stage 2 搬移到RAM中,提高执行速度 Stage 2是C语言代码,需要考虑堆栈空间, 通常准备的空间是memory page的倍数 通常1M 的空间
3.3 测试地址范围内RAM的有效性
1.不必测试所有的内存单元 2. 仅测试空间内每个内存页中的任意两个字的有效性,通常取头两个字 3. 保存memory page 起始处两个字的内容 4. 向此两个字中写入任意两个不同的数字,如0x66,0xCC 5. 立即读回上述两个字的内容,如果读取的不是0x66,0xCC则该页空间无
LDR r3,=0xB2120200
STRr3,[r1] ;向SDRAM 控制寄存器写入模式寄存器命令 ;进入模式寄存器命令模式
LDR r3,=0x08111800
LDR r2,[r3] ;通过读取特定地址,实现对SDRAM模式的设定 ;0x08111800是经过计算得到的地址 ;它表示burst 类型是sequential、burst 长度为8 ;CAS Latency 为2个时钟
四 Bootloader Stage2
初始化Stage2阶段要使用到的设备 检测系统内存映射(Memory Map) 将Kernel映像和根文件系统映像从Flash上读到取至RAM
空间中 为内核设置启动参数 调用内核
4.1初始化Stage2阶段要使用到的设备
(一) 初始化阶段的主要函数
操作系统内核
(二)下载模式(Downloading): 系统上电,CPU从Bootloader所在地址处开始执行,在固态存储器上 用户干预,进入下载模式,在控制台打印提示信息,并等待用户输入 根据用户输入选择烧写内核或文件系统,也可能烧写Bootloader自身, 如果用户不干预,则进入正常启动模式,即调用操作系统内核
பைடு நூலகம்
2.3.1 Bootloader的硬件依赖性
CPU体系结构:ARM、MIPS、DSP、x86 etc 板级设备的配置:不同厂家的芯片、不同的内存空间,etc
2.3.2 Bootloader 的存贮方式
嵌入式系统没有BIOS,系统上电或复位后从某个固定的地址处开 始执行,0x00000000
#define CCM_BASE
0x0021B000
#define _reg_CCM_CSCR (*((volatile U32 *)(CCM_BASE+0x00)))
(三) 关键字Volatile 的含义:
避免编译器优化
编译器为了提高程序运行速度,可能对变量进行优化,会将其放在缓 存中
缺陷是变量的内容可能被误改,从而与内存中实际值不一致 采用volatile 关键字可以避免上述问题
2.3.6 Bootloader 的文件传输设备及协议
串口,xmodem/ymodem/zmodem:简单、通用,易于设置;速 度慢
以太网,TFTP协议:通用,易用,速度快;编程略复杂 USB:简单、易用、速度快、适于下载内核时采用
三、Bootloader Stage1
Stage1的主要工作: 硬件设备初始化 为加载Boot Loader 的Stage2 准备RAM 空间 拷贝Boot Loader 的Stage 2 到RAM 空间中 设置好堆栈 跳转到Stage 2 的C程序入口点
Bootloader 简介
一 嵌入式Linux的层次结构
引导加载程序
Boot代码、Bootloader等
Linux 内核
根据特定的目标嵌入式硬件系统,定制的内核及启动参数
文件系统
包括根文件系统以及建立于Flash内存设备上的文件系统
用户程序
用户编写的完成特定功能的程序,大量用户程序运行在一个嵌入式 图形用户界面(GUI)上,常用的嵌入式GUI包括:MicroWindows 和 MiniGuI等
突
LDR r1, =SDCTL0 被编译成 ldr r1, 0x0c7001b4
;SCCTL0=0x221000 ;=SDCTL0
ldr r0,=0xff 被编译成 mov r0,# 0xff
(二)符号(Symbol): 以字母开头或以`._'中的一个开头 大小写敏感,foo与FOO是不同的符号
Init () 初始化CPU的工作频率、中断状态等 cs8900MX1Init() 初始化网络设备 EUARTinit() 初始化串口设备
(二) 初始化阶段常用语法:
_reg_CCM_CSCR = 0x000003AB ;设置Clock Source Control Register
_reg_CCM_CSCR 的定义
(四)自动刷新
LDR r3,=0xA2120200
STRr3,[r1]