4-嵌入式系统的bootloader技术.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
4-嵌入式系统的bootloader技术

嵌入式系统 开发原理与实践 陈文智 等 编著 第四章 嵌入式系统的Boot Loader技术 1. Boot Loader程序的基本概念 2. Boot Loader的典型结构框架 3. Boot Loader实验 实验一 Boot Loader应用实验 实验二 U-BOOT的分析和移植 1. Boot Loader程序的基本概念 一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序。 包括固化在固件(firmware)中的 boot代码(可选),和 Boot Loader 两大部分。 2. Linux 内核。 特定于嵌入式板子的定制内核以及内核的启动参数。 3. 文件系统。 包括根文件系统和建立于 Flash 内存设备之上文件系统。 通常用 ram disk 来作为 root fs。 4. 用户应用程序。特定于用户的应用程序。 有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows 和 MiniGUI 懂。 1. Boot Loader程序的基本概念 Boot Loader就是在操作系统内核运行之前运行的一段小程序 初始化硬件设备和建立内存空间的映射图 将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境 Boot Loader所支持的硬件环境 Boot Loader 是严重地依赖于硬件而实现的 每种不同的CPU体系结构都有不同的Boot Loader Boot Loader的安装地址 系统加电或复位后,所有的 CPU 通常都从某个由 CPU 制造商预先安排的地址上取指令。 系统的Boot Loader程序通常安排在地址0处 Boot Loader相关的设备和机制 主机和目标机之间一般通过串口建立连接 Boot Loader 软件在执行时通常会通过串口来进行 I/O 超级终端 Boot Loader的启动过程 通常多阶段的 Boot Loader 能提供更为复杂的功能,以及更好的可移植性 分为 stage 1 和 stage 2 两部分 Boot Loader的操作模式 启动加载模式 下载模式 Boot Loader与主机之间的通信设备及协议 最常见的是串口,协议xmodem/ymodem/zmodem 以太网,协议tftp 常用嵌入式Bootloader U-boot:通用引导程序, ARM/XSCALE 平台 Blob: LART 等硬件平台的引导程序, StrongARM RedBoot:基于 eCos 的引导程序 2. Boot Loader的典型结构框架 操作系统的角度看,Boot Loader的总目标就是正确地调用内核来执行 大多数Boot Loader都分为阶段1和阶段2两大部分 阶段1实现依赖于CPU体系结构的代码 (汇编) 阶段2实现一些复杂的功能 (C语言) 2.1 Boot Loader阶段1介绍 Boot Loader 的阶段1通常包括以下步骤: 1)硬件设备初始化。 屏蔽所有的中断 设置CPU的速度和时钟频率 RAM初始化 初始化LED 关闭CPU内部指令/数据Cache 2)为加载阶段2准备RAM空间 除了阶段2可执行映象的大小外,还必须把堆栈空间也考虑进来 一般1M就够了 Blob是0xc0200000开始的1MB空间 推荐:(RamEnd – 1MB, RamEnd) 标记 Stage2_end = stage2_start + stage2_size 2)为加载阶段2准备RAM空间 必须确保所安排的地址范围的的确确是可读写的RAM空间 先保存memory page一开始两个字的内容 向这两个字中写入任意的数字 立即将这两个字读回,若不是,则说明不是一段有效的RAM空间 再向这两个字写入任意数字 立即将这两个字读回。若不是,则说明不是有效的RAM空间 恢复这两个字的原始内容,测试完毕。 3)拷贝阶段2到RAM中 复制时要确定两点: 阶段2的可执行映像在固态存储设备的存放其实地址和终止地址 RAM空间的起始地址 4)设置堆栈指针sp 设置堆栈指针是为了执行C语言代码做好准备 通常可以设置为sp = stage2_end – 4 此时, Boot Loader 的 阶段2 可执行映象刚被拷贝到 RAM 空间时的系统内存布局,如下图: 5)跳转到阶段2的C入口点 修改PC寄存器为合适地址来实现 2.2 Boot Loader阶段2介绍 trampoline(弹簧床)的概念 进入main() 函数 用汇编语言写一段trampoline 小程序 在 trampol

文档评论(0)

kelly + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档