UBOOT源码分析的第二阶段分析(1)

今天来分析一下uboot启动的第二阶段,这个start_armboot()函数比较长,有500多行。我们来分析一下启动的第二阶段。

我们来分析一下uboot第二阶段要做什么:简单的将就是第一阶段没有做的一些初始化。

主要是SOC外部硬件(比如emmc,网卡芯片)uboot本身的一些东西(uboot命令、环境变量)然后最终初始化完必要的东西后进入uboot命令行。

 

细节分析:

定义在

typedef int (init_fnc_t) (void);    这是一个函数类型

init_fnc_ptr是一个二重函数指针,二重指针的作用有2个(其中一个是用来指向一重指针),一个是用来指向指针数组。因此这里的init_fuc_ptr可以用来指向一个函数指针数组。

 

#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")

(1)这里的意思是定义了一个全局变量,变量名叫做gd,是一个指针变量类型,占四个字节,用volatile修饰表示可变的,用register修饰表示这个变量尽量放到寄存器中,后面的asm("r8")是gcc支持的一种语法,意思就是要把gd放到寄存器r8中。

(2)DECLARE_GLOBAL_DATA_PTR就是定义了一个要放在寄存器r8中的全局变量,名字叫gd,类型是一个指向gd_t类型变量的指针。

(3)gd_t定义在include/asm-arm/global_data.h中。
gd_t中定义了很多全局变量,都是整个uboot使用的;其中有一个bd_t类型的指针,指向一个bd_t类型的变量,这个bd是开发板的板级信息的结构体,baudrate:波特率,have_console :控制台,reloc_off:重定位的偏移;env_addr 环境变量地址,env_valid环境变量的值,fb_base 缓存的初始地址

 

bd_t结构体如下:

bi_baudrate:开发板波特率

bi_ip_adr:开发板的ip地址

bi_enetaddr:开发板MAC地址

  struct environment_s           *bi_env:环境变量的指针

bi_arch_number:开发板的机器码

bi_boot_param:传递给内核的启动参数

 

struct                /* RAM configuration */
    {
    ulong start;
    ulong size;
    }            bi_dram[CONFIG_NR_DRAM_BANKS]:开发板的ram信息

 

#ifdef CONFIG_HAS_ETH1
    /* second onboard ethernet port */
    unsigned char   bi_enet1addr[6]:开发板的第二个网卡

gd_t中定义了很多全局变量,都是整个uboot使用的:其中有一个bd_t类型的指针,指向一个bd_t类型的变量,这个bd_t是开发板的板级信息,里面有不少的硬件相关的参数。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值