科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在ARMSYS上进行uClinux内核移植的总结 (2)

在ARMSYS上进行uClinux内核移植的总结 (2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

板子上电或复位后,程序从位于地址0x0的Reset Exception Vector处开始执行,因此需要在这里放置Bootloader的第一条指令:b ResetHandler,跳转到标号为ResetHandler处进行第一阶段的硬件初始化,主要内容为:关Watchdog Timer,关中断,初始化PLL和时钟,初始化存储器控制器。

作者:tinker 来源:赛迪网技术社区 2007年10月30日

关键字: 移植 内核 ARMSYS 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的第一级异常中断矢量表如下所示:

b ResetHandler ;Reset Handler 
ldr pc,=0x0c000004 ;Undefined Instruction Handler 
ldr pc,=0x0c000008 ;Software Interrupt Handler 
ldr pc,=0x0c00000c ;Prefetch Abort Handler 
ldr pc,=0x0c000010 ;Data Abort Handler 
b . 
ldr pc,=0x0c000018 ;IRQ Handler 
ldr pc,=0x0c00001c ;FIQ Handler 
LTORG
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章