课嵌入式系统的BootLoader技术.ppt

上传人:本田雅阁 文档编号:2264441 上传时间:2019-03-13 格式:PPT 页数:42 大小:950.51KB
返回 下载 相关 举报
课嵌入式系统的BootLoader技术.ppt_第1页
第1页 / 共42页
课嵌入式系统的BootLoader技术.ppt_第2页
第2页 / 共42页
课嵌入式系统的BootLoader技术.ppt_第3页
第3页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《课嵌入式系统的BootLoader技术.ppt》由会员分享,可在线阅读,更多相关《课嵌入式系统的BootLoader技术.ppt(42页珍藏版)》请在三一文库上搜索。

1、1,嵌入式系统 An Introduction to Embedded System 第四课 嵌入式系统的 BootLoader技术 教师:蔡铭 助教:王广辉 浙江大学计算机学院人工智能研究所 航天科技浙江大学基础软件研发中心,2,课程大纲, Bootloader程序的基本概念 Bootloader典型框架结构 S3C2410 Bootloader代码分析 嵌入式软件开发环境建立实验,3,从一个最小的“操作系统”说起,摘自自己动手写操作系统,4,Boot Loader程序基本概念,Boot Loader是在系统启动时激活,在操作系统内核运行之前运行的一段程序 初始化硬件设备和建立内存空间的

2、映射图 将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,5,PC机的引导装载简介(1/2),Boot Loader,启动扇区,6,PC机是通过BIOS来启动机器: 1、当PC机加电之后,BIOS启动相应的程序完成机器自检POST(Power-On Self Test); 2、寻找可以引导的驱动器,即启动盘IPL(Initial Program Load Device); 3、若找到合法的引导扇区(以0xAA55结束),那么就会将引导扇区的内容(共512字节)装载到内存0x0000:7C00处。 4、BIOS把控制权限交给系统引导扇区的程序。,PC机的引导装载简

3、介(2/2),7,BIOS Boot Specification 用于描述BIOS识别各类IPL(Initial Program Load)设备,并进行引导设备优先级排序、启动加载等功能。 BIOS启动时采用实模式(real mode)寻址,寻址空间为16位。 BIOS启动程序采用汇编语言编写,这使得编写BIOS程序变得比较复杂。,BIOS Boot Specification,8,BIOS内存分布图 BIOS Entry 0xFFFF0h BIOS Boot Block 0xFe000h 0xFFFFFh (Extended)BIOS Data Area Boot Sector 0x7c00

4、h Interrupt Vector 0x0000h 0x3ffh,BIOS内存分布图,9,BIOS映像文件 BIOS-bochs-latest 源代码 C程序:rombios.c、rombios32.c 汇编代码:rombios32start.S Makefile BIOS映像生成工具 biossums.c,BIOS构成分析,10,BIOS-bochs-latest,BIOS映像文件分析,上电起始 运行代码,11,16位实模式程序 Power-up Entry Point(系统上电入口) :0xfff0 POST Entry Point(系统检测入口):0xe05b INT 19H(系统引导

5、入口):0xe6f2 - int19_relocated - int19_function INT 18H:int18_handler,BIOS模拟rombios.c分析,12,嵌入式系统的Boot Loader程序(1/2),在嵌入式系统中没有BIOS那样的固件程序,因此,整个系统的加载启动任务完全由BootLoader来完成。 基于ARM内核的嵌入式系统,加电或复位的地址为0x00000000,Boot Loader程序的入口就安排在该地址上。,13,Boot Loader的实现依赖于硬件环境 CPU体系结构:ARM、PPC、x86、MIPS 板级设备:时钟、FLASH、通讯端口 Boot

6、 Loader的入口地址 Boot Loader与开发机的通讯机制 串口 网络 专用Boot Loader 通用Boot Loader:U-boot、Redboot,嵌入式系统的Boot Loader程序(2/2),14,由Boot Loader启动操作系统的方式,Flash启动方式 硬盘启动方式 在硬盘主引导区放置bootloader 从文件系统中引导操作系统 网络启动方式 Bootloader放置在EPROM或Flash中 通过以太网远程下载操作系统内核或文件系统 开发板不需配置大的存储介质,Bootloader参数区操作系统内核文件系统,15,简单Bootloader 只具有系统引导功能

7、 具有监控功能(Monitor)的Bootloader 调试支持 内存读写 Flash烧写 网络下载 环境变量配置,Boot Loader的功能种类,16,开放源码的Boot Loader程序,17,课程大纲, Bootloader程序的基本概念 Bootloader典型框架结构 S3C2410 Bootloader代码分析 嵌入式软件开发环境建立实验,18,Boot Loader的典型框架结构,Boot Loader的启动过程通常是多阶段的 提供复杂的功能:突破引导扇区512字节限制 提高代码移植性:高阶段代码采用高级语言 提高运行速度 :高阶段代码在内存中执行 大多数Boot Loader

8、可分为阶段1和阶段2两大部分 阶段1:实现依赖于CPU体系结构的代码 阶段2:实现一些复杂的功能,19,Boot Loader阶段1介绍(1/4),Boot Loader的阶段1通常包括以下步骤: 1)硬件设备初始化 屏蔽所有的中断 设置CPU的速度和时钟频率 RAM初始化 初始化LED 关闭CPU内部指令数据Cache,20,2)为加载阶段2准备RAM空间 除了阶段2可执行映象的大小外,还必须把堆栈空间也考虑进来 必须确保所安排的地址范围的确是可读写的RAM空间 内存区域有效性检测方法 保存指定内存区域 写入预定数据 读入数据并比较 恢复内存数据,Boot Loader阶段1介绍(2/4),

9、21,3)拷贝阶段2代码到RAM中 4)设置堆栈指针sp 5)跳转到阶段2的C语言入口点 Boot Loader 的阶段1执行完成后的RAM 空间布局,如下图:,Boot Loader阶段1介绍(3/4),22,Boot Loader阶段1介绍(4/4),23,Boot Loader阶段2介绍(1/8),1)初始化本阶段要使用到的硬件设备 初始化至少一个串口,以便和终端用户进行I/O输出信息 初始化计时器等,24,2)检测系统的内存映射 内存映射的描述 可以用如下数据结构来描述RAM地址空间中的一段连续的地址范围: 内存映射的检测,Boot Loader阶段2介绍(2/8),25,连续内存区域

10、探测X86系统内存探测算法举例 for (p = (char *)0x100000; (int)p 0x40000000; p += delta) for (ix = 0; ix N_TIMES; ix+) /* 保存内存原有信息 */ tempix = *(int *)p + ix); *(int *)p + ix) = TEST_PATTERN; /*TEST_PATTERN 0x12345678*/ cacheFlush (DATA_CACHE, p, 4 * sizeof(int); if (*(int *)p != TEST_PATTERN) /* 测试内存单元有效性 */ p -=

11、 delta; for (ix = 0; ix N_TIMES; ix+) /* 恢复内存原有信息 */ *(int *)p + ix) = tempix; ,Boot Loader阶段2介绍(3/8),26,非连续内存区域探测具有空洞内存的探测 from 内存区域低端 to 内存区域最高端,以页为单位进行内存探测 对当前内存进行检测; if (当前内存页状态 与 前一内存页状态一致) 合并内存状态情况; else 记录当前内存区域状态。 ,Boot Loader阶段2介绍(4/8),27,3)加载内核映像和根文件系统映像 规划内存占用的布局 内核映像所占用的内存范围 MEM_START +

12、0X8000 根文件系统所占用的内存范围 MEM_START + 0X00100000 从Flash上拷贝 While循环,Boot Loader阶段2介绍(5/8),28,4)设置内核的启动参数 标记列表(tagged list)的形式来传递启动参数,启动参数标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束 嵌入式Linux系统中,通常需要由Boot Loader设置。常见启动参数有:ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK、ATAG_INITRD,以ATAG_NONE结束。,Boot Loader阶段2介绍(6/8),29,

13、例:设置ATAG_MEM的代码如下:,指针params是一个struct tag类型的指针。宏tag_next()将以指向当前标记的指针为参数,计算出当前标记的下一个标记的起始地址。,Boot Loader阶段2介绍(7/8),30,5)调用内核 CPU寄存器的设置: R00; R1机器类型ID;关于机器类型号,可以参见: linux/arch/arm/tools/mach-types。 R2启动参数标记列表在RAM中起始基地址; CPU 模式: 必须禁止中断(IRQs和FIQs); CPU必须SVC模式; Cache和MMU的设置: MMU必须关闭; 指令Cache可以打开也可以关闭; 数据

14、Cache必须关闭。,Boot Loader阶段2介绍(8/8),31,课程大纲, Bootloader程序的基本概念 Bootloader典型框架结构 S3C2410 Bootloader代码分析 嵌入式软件开发环境建立实验,32,S3C2410 内存地址映像,Flash内存映像,SDRAM内存映像,33,S3C2410 中断向量设置,34,S3C2410 Bootloadervivi,vivi是韩国Mizi公司开发的一种bootloader,适用于ARM9处理器,支持S3C2410处理器。 vivi有两种工作模式: 启动加载模式 下载模式:提供命令行接口,35,vivi命令举例,36,vi

15、vi源代码分析目录结构,代码目录结构分析,37,vivi源代码分析阶段1,Bootloader阶段1代码分析 禁止看门狗、中断 初始化时钟、内存 设置LED、GPIO 拷贝vivi至内存 初始化nand flash 设置堆栈寄存器、入口参数 调用C函数将vivi由nand flash拷贝至内存 跳转至内存执行 设置堆栈寄存器、入口参数 调用C函数main,38,vivi源代码分析阶段2,Bootloader阶段2代码分析 打印系统启动标识 初始化CACHE、MMU、Heap 初始化MTD设备 初始化系统参数 命令装载 启动shell 或 启动操作系统,39,课程大纲, Bootloader程序的基本概念 Bootloader典型框架结构 S3C2410 Bootloader代码分析 嵌入式软件开发环境建立实验,40,实验要求,采用手写方式完成实验报告 实验报告格式 实验机位固定 每次实验记录评分,41,实验二内容清单,编译vivi源代码,通过串口,将vivi下载至目标机固化 编译操作系统内核、文件系统(busybox),并下载至目标机固化 编写hello.c,进行交叉编译、交叉链接 采用串口,将代码下载至目标机 最终,在目标板上打印出hello world!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1