- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 《7S倍速记忆法__100%开拓你的记忆潜能__黄金珍藏版》.pdf
- 《7_公司债券业务》.pdf
- 《8 市场失灵与微观经济政策》.pdf
- 《8 第五篇 机械工程材料与热处理技术》.pdf
- 《8-4汽车技术状况的分级》.pdf
- 《8.(工程材料Ⅱ)第8~9讲(第6章.铸铁)》.pdf
- 《82《禅学的黄金时代》吴经熊》.pdf
- 《8520.赢在职场第一步:Eviews统计分析与应用(附光盘1张)》.pdf
- 《8b白脂酶基因多态性与冠心病关系的研究》.pdf
- 《8、汽车大修竣工出厂技术条件2》.pdf
- 中国国家标准 GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18233.4-2024信息技术 用户建筑群通用布缆 第4部分:住宅.pdf
- GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- 《GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计》.pdf
- 中国国家标准 GB/T 18978.210-2024人-系统交互工效学 第210部分:以人为中心的交互系统设计.pdf
- GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- 《GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置》.pdf
- 中国国家标准 GB/T 16649.2-2024识别卡 集成电路卡 第2部分:带触点的卡 触点的尺寸和位置.pdf
- GB/T 17889.4-2024梯子 第4部分:铰链梯.pdf
- 《GB/T 17889.4-2024梯子 第4部分:铰链梯》.pdf
文档评论(0)