查看文章 |
bootloader的设计与实现是与具体的CPU以及具体的硬件系统紧密相关的,要实现一个通用的ARM bootloader,即要适合所有的ARM处理器以及硬件系统,是不太可能的事情。另外,不同的操作系统,可能对具体的bootloader还会有另外额外的要求。但是,我们还是可以根据ARM的体系结构,从理论上总结出一些ARM系统bootloader实现的共性,而这仅仅局限于理论上。 对于ARM bootloader的一些共同特性,理论上只局限于bootloader的基本功能,因为扩展功能众多,可以有串口、USB、以太网接口、IDE、CF等,无法进行归纳与总结。 对于一个ARM系统来说,本质上,bootloader作为引导与加载内核镜像的“工具”,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点[ 1]: (1) 初始化RAM(必需):bootloader必须能够初始化RAM,因为将来系统要通过它保存一些Volatile数据,但具体地实现要依赖与具体的CPU以及硬件系统。 (2) 初始化串口(可选,推荐):bootloader应该要初始化以及使能至少一个串口,通过它与控制台联系进行一些debug的工作;甚至与PC通信。 (3) 创建内核参数列表(针对linux操作系统,推荐)。 (4) 启动内核镜像(必需):根据内核镜像保存的存储介质不同,可以有两种启动方式:FALSH启动以及RAM启动;但是无论是哪种启动方式,下面的系统状态必须得到满足: l CPU寄存器的设置: R0=0; R1=机器类型; R2=启动参数标记列表在RAM中的起始地址; 这三个寄存器的设置是在最后启动内核时通过启动参数来传递完成的。
l CPU模式: 关闭中断; 属于SVC模式; Bootloader中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理范畴;SVC模式是系统的一种保护模式,这样就可以进行一些只能在SVC模式下的操作,例如一些特定寄存器访问操作。
l Cache和MMU的设置: MMU必须关闭; 数据cache必须关闭; 指令cache可以关闭也可以开启; Bootloader中所有对地址的操作都是使用物理地址,是实在的实地址,不存在虚拟地址,因此MMU必须关闭。Bootloader主要是装载内核镜像,镜像数据必须真实写回SDRAM中,所以数据cache必须关闭;而对于指令cache,不存在强制性的规定,但是一般情况下,推荐关闭指令cache。 l Bootloader启动内核镜像的方法是通过跳转语句直接跳转至内核镜像的第一句指令语句 博客文章汇总:
如何科学饮水 供应WIFI(提供 wince linux下驱动) 合肥市政府原副秘书长受贿240万被判13年 百度C2C支付平台定名百付宝 域名地址昨曝光 LHC 的加速过程 什么是百度蜘蛛?百度爬虫是什么? 百度确定推C2C支付平台 电子商务大战一触即发 云时代来临之“云计算”的四个显著特点 云计算时代来临 云计算到底指什么 随着安全云计算的热潮 您准备好了吗 中国会面临金融战争的灭顶之灾吗? 不断增长的外汇储备,是中国政府的心病 [出售]WIFI模块,WIFI方案VT6656+RF,USB接口,MINIPCI接口 日本“第一钻石王老五”--青山光司 日本“第一钻石王老五”--青山光司 Power Management in the Linux Driver Model(2.6.14)(转) WDM(Windows Driver Model)学习(转) |