嵌入式u-boot浅析

本文深入浅析嵌入式系统的u-boot启动过程,重点讲解在临时内存空间中执行的board_init_f阶段,该阶段涉及内存初始化和寻址空间的初步设置,通过循环执行init_sequence函数数组来完成关键任务。
摘要由CSDN通过智能技术生成
u-boot主要目的是为操作系统的运行提供准备工作,根据其运行流程简单的分为四部分:_start、board_init_f、relocate_code和board_init_r。其中_start和relocate_code是运行在flash上,而board_init_f和board_init_r是运行于DRAM上的。
下面对其四个部分进行简单的介绍分析:
1、_start
这是u-boot的起始部分,程序从/u-boot/cpu/mips/start.S文件中的_start代码段开始执行的。由于此时内存未初始化,所以该部分是运行于flash上的。其主要的内容有:
(1)    对cpu相关寄存器的初始化;
(2)    TLB(Translation Lookaside Buffer)初始化;
(3)    初始化一块临时内存作为栈空间scratch memory,为内存初始化之前调用c语言使用;
(4)    初始化全局符号表指针GOT pointer;

(5)    使用跳转命令跳转到board_init_f;

2、board_init_f

    该部分是在上面申请的临时内存空间中运行的,主要是内存的初始化及整个寻址空间的部分初始化。其主要是循环调用init_sequence函数指针数组中的成员,如下所示

init_fnc_t *init_sequence[] = {
      octeon_boot_bus_init,  // GPIO使能、flash空间映射及大小设置等;
      timer_init,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值