Bootloader.ppt_第1页
Bootloader.ppt_第2页
Bootloader.ppt_第3页
Bootloader.ppt_第4页
Bootloader.ppt_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Bootloader 简介,一 嵌入式Linux的层次结构,引导加载程序 Boot代码、Bootloader等 Linux 内核 根据特定的目标嵌入式硬件系统,定制的内核及启动参数 文件系统 包括根文件系统以及建立于Flash内存设备上的文件系统 用户程序 用户编写的完成特定功能的程序,大量用户程序运行在一个嵌入式图形用户界面(GUI)上,常用的嵌入式GUI包括:MicroWindows 和MiniGuI等,二 Bootloader 的概念,普通PC上的引导过程 Bootloader 的概念 Bootloader 的特性,2.1普通PC上的引导过程:,BIOS(Basic Input/Outp

2、ut System)的任务: (一) 上电自检: 主板发RESET信号,等待POWER GOOD 信号 开机时,由于此时电压还不稳定,主板控制芯片组会向CPU发出并保持一个RESET(重置)信号,让CPU初始化,同时等待电源发出的POWERGOOD信号(电源准备好信号)。 撤去RESET信号从一个固定的地址FFFF0H开始执行指令, 无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。,BIOS(Basic Input/Output System)的任务: (二)各种关键和非关键部件的检测 发送检测码 BIOS程序完整性检验、RAM可

3、读写性检验、检测CPU的寄存器、可编程计时芯片、中断控制器、DMA控制器、I/O口、软/硬盘驱动器、键盘、即插即用设备、CMOS设置等;,BIOS(Basic Input/Output System)的任务: (三)初始化:对动态内存、芯片组、显卡及其相关的外围寄存器作初始化设置。 (四)记录系统的配置:ESCD(Extended System Config Data)、存储在非挥发性内存中、 “UPDATE ESCD.SUCCESSED”等提示信息。 (五)读入主引导记录(MBR):OS Boot Loader , LILO、GRUB, etc,2.2 BootLoader 的概念,操作系统

4、内核运行之前运行的一段小程序, 初始化硬件设备、建立内存空间映射图 将系统的软硬件环境带到一个合适的状态,准备调用系统内核的正确环境 依赖硬件系统而实现,很难建立通用的BootLoader,2.3 BootLoader 的特性,Bootloader的硬件依赖性 Bootloader 的存贮方式 用来控制Bootloader的设备或机制 BootLoader 启动的阶段和模式 Bootloader的操作模式 Bootloader 的文件传输设备及协议,2.3.1 Bootloader的硬件依赖性,CPU体系结构:ARM、MIPS、DSP、x86 etc 板级设备的配置:不同厂家的芯片、不同的内存

5、空间,etc,2.3.2 Bootloader 的存贮方式,嵌入式系统没有BIOS,系统上电或复位后从某个固定的地址处开始执行,0 x00000000 将静态存储设备ROM、EEPROM、Flash ROM等映射到上述地址 将BootLoader 安排在上述地址,2.3.3 用来控制Bootloader的设备或机制,在Bootloader阶段,嵌入式系统本身的显示设备尚不可用 字符方式与用户进行交互 通常需要与Host主机相连,Host作为TTY终端 输出打印信息到串口,从串口读取用户控制命令,2.3.4 BootLoader 启动的阶段和模式,启动分为两阶段:Stage1、Stage2, S

6、tage1简单、更加依赖于硬件、汇编实现 Stage2 复杂、硬件依赖性稍弱、C语言实现 便于移植、能完成较为复杂的功能,2.3.5 Bootloader的操作模式,(一)启动模式(Boot Loading):也称Autonomous模式 系统上电,CPU从Bootloader所在地址处开始执行,在固态存储器上 Bootloader 自行运行,将代码复制到RAM中,并转而到RAM上运行 Bootloader 准备好内核运行所需的环境和参数,复制内核到RAM并运行操作系统内核 (二)下载模式(Downloading): 系统上电,CPU从Bootloader所在地址处开始执行,在固态存储器上 用

7、户干预,进入下载模式,在控制台打印提示信息,并等待用户输入 根据用户输入选择烧写内核或文件系统,也可能烧写Bootloader自身, 如果用户不干预,则进入正常启动模式,即调用操作系统内核,2.3.6 Bootloader 的文件传输设备及协议,串口,xmodem/ymodem/zmodem:简单、通用,易于设置;速度慢 以太网,TFTP协议:通用,易用,速度快;编程略复杂 USB:简单、易用、速度快、适于下载内核时采用,三、Bootloader Stage1,Stage1的主要工作: 硬件设备初始化 为加载Boot Loader 的Stage2 准备RAM 空间 拷贝Boot Loader

8、的Stage 2 到RAM 空间中 设置好堆栈 跳转到Stage 2 的C程序入口点,3.1基本硬件的初始化,为Stage2及Kernel的执行准备好硬件环境: 屏蔽所有中断 在BootLoader阶段通常不必响应任何中断;写CPSR(当前程序状态寄存器)寄存器禁止中断 设置CPU的速度和时钟频率 RAM 初始化:正确设置内存控制器 在Console 终端打印信息: 表明系统状态是否OK, 通常还会点亮一个板子上的LED表明系统初始化正常 关闭CPU内部指令/数据 Cache,3.2 为加载stage2 准备空间,将Bootlader Stage 2 搬移到RAM中,提高执行速度 Stage

9、2是C语言代码,需要考虑堆栈空间, 通常准备的空间是memory page的倍数 通常1M 的空间,3.3 测试地址范围内RAM的有效性,1.不必测试所有的内存单元 2. 仅测试空间内每个内存页中的任意两个字的有效性,通常取头两个字 3. 保存memory page 起始处两个字的内容 4. 向此两个字中写入任意两个不同的数字,如0 x66,0 xCC 5. 立即读回上述两个字的内容,如果读取的不是0 x66,0 xCC则该页空间无效 6. 交换上述两个字,并再次写入上述空间,即0 xCC,0 x66 7. 立即将这两个字的内容读回,如果不是0 xCC,0 x66则说明这个memory pag

10、e所占据的地址范围不是一段有效的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 使一个符号成为全局可见,否则多个文件中相同的符号名发生冲突 LDR r1, =S

11、DCTL0;SCCTL0=0 x221000 被编译成 ldr r1, 0 x0c7001b4 ;=SDCTL0 ldr r0,=0 xff 被编译成 mov r0,# 0 xff (二)符号(Symbol): 以字母开头或以._中的一个开头 大小写敏感,foo与FOO是不同的符号,(三) ARM 指令: LDR Rd, Rn, # +/- Offset 将内存Rn +/- Offset中的内容读取到Rd寄存器 LDR Rd, Rn, +/- Rm 将内存Rn +/- Rm中的内容读取到Rd寄存器 STR Rs, Rn, #+/- Offset 将内存Rs中的内容读取到Rn +/- Offse

12、t中 STR Rs, Rn, +/- Rm 将内存Rs中的内容读取到Rn +/- Rm中,(三) ARM 指令(续): ADD Rd, Rx, #1;Rd=Rx+1 ADD Rd, Rx, Ry;Rd=Rx+Ry SUB Rd, Rx, #1;Rd=Rx-1 SUB Rd, Rx, Ry;Rd=Rx-Ry,(三) ARM 指令(续): TEQ R1, #10 ;如果R1=10则将CPSR寄存器的Z标志位置为1 TEQ R1,R2 ;如果R1=R2则将CPSR寄存器的Z标志位置为1 BEQ label ;条件跳转 ;如果CPSR寄存器中的Z标致为置位,则跳转到label Blabel ;无条件跳

13、转至label处,3.5.2 部分代码分析,(一) 0107;符号定义 (二) 1550;完成SDRAM 的上电初始化工作 SDRAM 的上电初始化包括以下步骤: 上电,并保持200us 对SDRAM 的各bank 预充电 所有SDRAM bank保持空闲状态一段时间 发送8个以上的Auto Refresh 信号 发送一个Mode Register 信号,设置SDRAM的工作模式,(三)预充电 LDR r1,=SDCTL0 ;r1中保存SDRAM 控制寄存器的地址 LDR r3,=0 x92120200 STR r3,r1 ;将预充电命令写入,SDRAM控制寄存器 ;进入预充电命令模式 LDR

14、 r3,=0 x8200000 LDR r2,r3 ;通过从某个SDRAM地址读取数据,实现预充电命令,(四)自动刷新 LDRr3,=0 xA2120200 STRr3,r1 ;向SDRAM 控制寄存器写入自动刷新命令 ;进入自动刷新命令模式 LDRr3,=0 x8000000 LDRr2,r3 . . LDRr2,r3 ;通过连续8次以上从0 x8000000 处读取数据,实现自动刷新命令,(五) 模式寄存器命令 LDRr3,=0 xB2120200 STRr3,r1 ;向SDRAM 控制寄存器写入模式寄存器命令 ;进入模式寄存器命令模式 LDRr3,=0 x08111800 LDRr2,r

15、3 ;通过读取特定地址,实现对SDRAM模式的设定 ;0 x08111800是经过计算得到的地址 ;它表示burst 类型是sequential、burst 长度为8 ;CAS Latency 为2个时钟,四 Bootloader Stage2,初始化Stage2阶段要使用到的设备 检测系统内存映射(Memory Map) 将Kernel映像和根文件系统映像从Flash上读到取至RAM空间中 为内核设置启动参数 调用内核,4.1初始化Stage2阶段要使用到的设备,(一) 初始化阶段的主要函数 Init () 初始化CPU的工作频率、中断状态等 cs8900MX1Init()初始化网络设备 E

16、UARTinit()初始化串口设备,(二) 初始化阶段常用语法: _reg_CCM_CSCR= 0 x000003AB ;设置Clock Source Control Register _reg_CCM_CSCR 的定义 #define CCM_BASE 0 x0021B000 #define _reg_CCM_CSCR (*(volatile U32 *)(CCM_BASE+0 x00),(三) 关键字Volatile 的含义: 避免编译器优化 编译器为了提高程序运行速度,可能对变量进行优化,会将其放在缓存中 缺陷是变量的内容可能被误改,从而与内存中实际值不一致 采用volatile 关键字

17、可以避免上述问题,4.2 检测系统内存映射(Memory Map),(一)检测系统内存映射的任务 内存映射用于确定整个4G物理地址空间中,哪些地址范围被分配给寻址系统的RAM单元 CPU 通常预留足够的地址空间给RAM (512M),但具体的嵌入式系统的物理RAM单元往往少于上述空间,因此只有部分RAM地址被映射到物理设备, 程序必须确定哪些内存地址是映射到物理设备的,哪些没有,(二)内存映射的描述: 一段连续内存的描述: Typedef struct memory_area_struct u32 start; /*内存段的基地址*/ u32 size; /*内存的大小*/ int used;

18、 memory_area_t 整个CPU预留的RAM地址空间,用一个memory_area_t类型的数组来表示,(三)检测流程,4.3 加载内核映像和根文件系统映像,(一)规划内存占用的布局: 1规划内核映像所占有的内存范围 一般不将内核映像复制到RAM的起始处 留出32KB左右的空间用于放置全局数据结构,如启动参数和内核页表等 2根文件系统所占用的内存范围 (二)从Flash上复制内核映像到RAM上 While(count) *dest+=*src+; Count -=4; ,4.4 设置内核启动参数,(一)设置内核启动参数 启动参数以标记列表的形式来传递参数 启动参数标记列表以ATAG_C

19、OR开始,以ATAG_NONE结束 每个标记由表示被传递参数的tag_header结构及随后的参数数据结构组成,(二)举例:命令行参数 内核启动时可以以命令行的形式接收信息, 可以通过命令行向内核提供内核不能自己检测的硬件参数信息 比如命令行参数串”console=ttyS0,115200n8”, 通知内核以ttyS0作为控制台,且串口采用115200bps,无奇偶校验、8位数据位的设置,(二)举例:命令行参数(示例代码) Char *p; For(p=commandline;*p= ;p+) ; /去除命令行前的空格 If(*p=0) Return; /忽略空命令行 Params-hdr.t

20、ag=ATAG_CMDLINE; Params-hdr.size=(sizeof(struct tag_header)+strlen(p) +1 +4)2; /圆整 Strcpy(params-u.cmdline.cmdline,p); Params=tag_next(params); /取下一个内核启动参数,4.5调用内核,需要满足的条件: 1. CPU 寄存器设置 R0=0; R1=机器类型; R2=启动参数标记列表在RAM中的起始地址 2. CPU模式 必须禁止中断 CPU必须为SVC模式 3. Cache和MMU设置 MMU 必须关闭 指令Cache可以打开也可以关闭 数据Cache

21、必须关闭,4.6 常见问题,(一)串口终端显示乱码或没有任何显示 Bootloader 对串口初始化不正确 运行在host端的终端仿真程序对串口设置不正确 (二)Bootloader 的运行过程中可以正确向串口输出信息,但当bootloader 启动内核后却无法看到内核启动输出信息 确认是否在编译内核时配置了对串口的支持 确认bootloader对串口的设置与内核对串口的设置一样 确认bootloader所用的内核基地址与内核映像在编译时所用的运行基地址一致,五 Bootstrap 模式,BootStrap 模式概念 BootStrap 操作流程 Bootstrap Record 介绍 Boo

22、tStrap Instruction Buffer,5.1 BootStrap 模式概念,Bootloader 是在Bootstrap模式下被加载到Flash上 Bootstrap 模式容许开发者通过UART对系统进行初始化 Bootstrap 模式容许开发者通过UART将程序下载到系统RAM中 Bootstrap 可以接收命令,并且运行事先储存在系统内存上的程序 Bootstrap 支持对内存和寄存器的读写操作,5.2 BootStrap 操作流程,将目标板上的BootStrap pin 打开 上电后,Bootstrap 模式将UART1和UART2设置为自动波特率模式 同时将UART1和U

23、ART2设为8bit长、无校验位、1个停止位 等待用户输入a或A,一旦接收到上述字符,则可以设定波特率并返回冒号 通过Bootstrap record语句将CPU芯片内部寄存器,初始化为目标寄存器,5.3 Bootstrap Record,(一) Bootstrap Record 语法格式,如果Bootsrap count 为0,则表示从当前地址开始执行,(二)Bootstrap 语法格式(续) Bootstrap record 包含的字符为09 或AF 注释不包含超过9个字符的词或符号 但是如下的字符可以以任意长的串出现 Space、!、“、#、$、%、&、(、)、*、+、-、.、/、,等,

24、(三)BootStrap Record 流程图,(四)BootStrap Record 例子 : 00310000C412345678 初始化SDRAM空间00310000为字模式,内容为0 x12345678 00310006427788 初始化SDRAM空间00310006为半字模式,内容为0 x7788 003100090155 初始化SDRAM空间00310009为字节模式,内容为0 x55 1122334400 从地址11223344处开始执行,5.4 BootStrap Instruction Buffer,BootStrap 为用户提供了一个8个字的命令存储空间,用户可以将命令加

25、载到上述空间中执行,(一) BootStrap Instruction Buffer 例子,如果是一个MOV指令可用数值,则变成一个MOV指令, 如果不是一个MOV指令可用数值,则变成一相对寻址Load指令 上述 LDRr1,= 0 x00310000 汇编成:LDRr1,PC,#offsettoLitpool1,LDR 伪指令: LDR r1,=0 x00310000 上述语句并非一个load指令,而是一个GNU Assembler 伪指令,(二)BootStrap Instruction Buffer 例子(续) 可以将上述程序的机器代码存储于Instruction Buffer处,并从该处执行 Instruction Buffer中存的指令不超过8个字 Instruction Buffer中最后一条指令必然是返回到Bootstrap控制程序的起始处 Instruction Buffer的起始地址为0 x00000004 BootStrap 控制程序的起始地址为0 x00000100,(三)BootStrap Instruction Buffer 例子(续) 上述程序不能全部被加载到Instruction Buffer中,可以分成五部分分别加载,(四)BootStrap Instruction Buffer 例子(续),每段指令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论