扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:tinker 来源:赛迪网技术社区 2007年11月2日
关键字: Linux
2.3 Bootloader的工作
完整的Bootloader引导流程可描述如下:
硬件初始化阶段一
◎ 硬件初始化;
◎ 复制二级中断异常矢量表;
◎ 初始化各种处理器模式;
◎ 复制RO和RW,清零ZI (跳转到C代码入口函数)。
硬件初始化阶段二
◎ 初始化本阶段使用到的硬件设备;
◎ 建立人机界面;
◎ 实现映像文件的下载和烧录工具;
◎ 实现映像文件的加载和运行工具。
下面对上述各步骤进行逐一说明,并对与uClinux相关的内容详细加以说明。
2.3.1 硬件初始化
板子上电或复位后,程序从位于地址0x0的Reset Exception Vector处开始执行,因此需要在这里放置Bootloader的第一条指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关Watchdog Timer,关中断,初始化PLL和时钟,初始化存储器控制器。比较重要的是PLL的输出频率要计算正确,ARMSYS中把它设置为64MHz;这实际上就是处理器的工作主频,这个时间参数在第二阶段计算SDRAM的刷新计数值和UART的波特率等参数时还要用到。
2.3.2 建立二级异常中断矢量表
异常中断矢量表(Exception Vector Table)是Bootloader与uClinux内核发生联系关键的地方之一。即使uClinux内核已经得到处理器的控制权运行,一旦发生中断,处理器还是会自动跳转到从0x0地址开始的第一级异常中断矢量表中的某个表项(依据于中断类型)处读取指令运行。
在编写Bootloader时,地址0x0处的一级异常中断矢量表只需简单地包含向二级异常中断矢量表的跳转指令就可以。这样,就能够正确地将发生的事件交给uClinux的中断处理程序来处理。对于uClinux内核,它在RAM空间中基地址为0xc000000处建立了自己的二级异常中断矢量表,因此,Bootloader的第一级异常中断矢量表如下所示:
|
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者