《Bootloader编写简明教程》.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Bootloader编写简明教程》.pdf

第一部分:基本功能流程 CPU 上电后会从IO 空间的某地址取第一条指令。但此时:PLL 没有启动,CPU 工作频率为外 部输入晶振频率,非常低;CPU 工作模式、中断设置等不确定;存储空间的各个BANK (包括 内存)都没有驱动,内存不能使用。在这种情况下必须在第一条指令处做一些初始化工作, 这段初始化程序与操作系统独立分开,称之为bootloader。 实际上,很少有必要自己写一个Bootloader,因为U-Boot 已经强大到能够满足各种需要。 但是强大必然复杂,一个初学者想要分析U-Boot 的源代码,还是有些难度的。出于学习的 目的,我写了这个史上最简单的启动加载器,它只包含最基本的功能,却囊括了一个嵌入式 Bootloader 应该有的核心和精华。我把这个启动加载器命名为S-Boot, 是Simple Bootloader 的缩写,亦可进一步简称为SB。 使用的实验环境为OK2440 开发板,板上处理器为S3C2440A,有64M 内存,Nand 存储器为 K9F1208,64M。网口芯片为CS8900A。我们要实现的功能是:从串口下载Linux 内核映像到 RAM;从网口下载Linux 内核映像到RAM;从RAM 启动内核挂载NFS 根文件系统。 1. 第一阶段的汇编代码:start.S 一个嵌入式Bootloader 最初始部分的代码几乎必须是用汇编语言写成的,因为开发板刚上 电后没有准备好C 程序运行环境,比如堆栈指针SP 没有指到正确的位置。汇编代码应该完 成最原始的硬件设备初始化,并准备好C 运行环境,这样后面的功能就可以用C 语言来写了。 对我们的S-Boot 来说,上电后的起始运行代码是 start/start.S。 .text .global _start _start: b Reset ; 0x00: 发生复位异常时从地址零处开始运行 b HandleUndef ; 0x04: 未定义指令中止模式的向量地址 b HandleSWI ; 0x08: 管理模式的向量地址,通过SWI 指令进入此模式 b HandlePrefetchAbort ; 0x0C: 指令预取终止导致的异常的向量地址 b HandleDataAbort ; 0x10: 数据访问终止导致的异常的向量地址 b HandleNotUsed ; 0x14: 保留 b HandleIRQ ; 0x18: 中断模式的向量地址 b HandleFIQ ; 0x1C: 快中断模式的向量地址 这里,汇编指示符.text 表明以下内容属于代码段,.global _start 指明_start 是全局可 访问的符号。按照ARM920T 的规定,从地址0x00 到0x1C 放置异常向量表,向量表每个条目 占四个字节,正好可以放置一条跳转指令,跳转到相应异常的服务程序中去。在S-Boot 中 没有使用中断,所以除Reset 异常外,其它异常的服务程序都可简单地写个死循环。Reset 异常是系统上电后自动触发的,所以我们的代码都写在Reset 的服务程序里面。 实际上,异常向量表不一定非要位于地址0x00 处,CP15 协处理器中的c1 寄存器的第13 位 用来控制异常向量表的起始地址。该位为0 时,异常向量表位于低地址0x00 处;该位为1 时,异常向量表位于高地址 0xFFFF0000 处。我们没有必要改变这个位的值,使用默认的低 地址就行了。 Reset: mrs r0,cpsr ;set cpu to SVC32 mode bic r0,r0,#0x1F orr r0,r0,#0xD3 msr cpsr,r0 ;cpsr=11x10011, IRQ/FIQ disabled 代码最初始的任务是设置CPU 工作在SVC32 模式,关闭所有中断,禁用看门狗。实际上,即 使不设置工作模式,CPU 在复位之后将自动工作在管理模式。在整个S-Boot 运行期间,我 们没有使用中断,也没有改变CPU 工作模式,它将一直工作在SVC32 模式。 MMU、ICache、DCache 的打开和关闭都是由CP15 协处理器的c1 寄存器控制的。实际上在复 位之后这三者都是自动关闭的,所以省略了关闭它们的代码。 S3C2440A 的PSR 寄存器(Program Status Reguster)中每个Bit 位的含义如图1 所示。 Bit4~Bi

您可能关注的文档

文档评论(0)

wyth + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档