Bootloader
? ? ?CPU上电后,会从某个地址开始执行。比如MIPS结构的CPU会从0xBFC00000取第一条指令,而ARM结构的CPU则从地址0x00000000开始。嵌入式开发板中,需要把存储器件ROM或Flash等映射到这个地址,Bootloader就存放在这个地址开始处,这样一上电就可以执行。 Bootloader的两个阶段: (1)Bootloader第一阶段的功能。 硬件设备初始化。 为加载Bootloader的第二阶段代码准备RAM空间。 复制Bootloader的第二阶段代码到RAM空间中。 设置好栈。 跳转到第二阶段代码的C入口点。 (2)Bootloader第二阶段的功能。 初始化本阶段要使用到的硬件设备。 检测系统内存映射(memory map)。 将内核映象和根文件系统映象从Flash上读到RAM空间中。 为内核设置启动参数。 调用内核。 所谓检测内存映射,就是确定板上使用了多少内存、它们的地址空间是什么。 将内核存放在适当的位置后,直接跳到它的入口点即可调用内核。调用内核之前,下列条件要满足。 (1)CPU寄存器的设置 R0 = 0。 R1=机器类型ID;对于ARM结构的CPU,其机器类型ID可以参见linux/arch/arm/tools/mach-types. R2=启动参数标记列表在RAM中的起始基地址。(标记是一种数据结构,标记列表就是挨着存放的多个标记。) (2)CPU工作模式 必须禁止中断(IRQs和FIQs)。 CPU必须为SVC模式。 (3)Cache和MMU的设置 MMU必须关闭。 指令Cache可以打开也可以关闭。 数据Cache必须关闭。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |