r9

Uboot启动流程分析(二)

纵然是瞬间 提交于 2019-12-24 06:58:52
1、前言 在前面的文章Uboot启动流程分析(一)中,链接如下: https://www.cnblogs.com/Cqlismy/p/12000889.html 已经简单地分析了low_level_init函数,其调用流程如下: save_boot_params_ret | cpu_init_crit |   | |   lowlevel_init |   | |   s_init | _main 接下来,则继续往下分析_main函数。 2、_main函数 在save_boot_params_ret的最后,会运行bl _main这句代码,Uboot则将会跳转到_main函数中去运行,该函数的定义在arch/arm/lib/crt0.S文件中,_main函数的功能已经在文件中注释得很清楚了,先来看看_main函数实现的功能是什么,注释如下: /* * This file handles the target-independent stages of the U-Boot * start-up where a C runtime environment is needed. Its entry point * is _main and is branched into from the target's start.S file. * * _main execution

DECLARE_GLOBAL_DATA_PTR

帅比萌擦擦* 提交于 2019-11-30 20:54:04
DECLARE_GLOBAL_DATA_PTR在arch/arm/include/asm/global_data.h中定义 #include <asm-generic/global_data.h> #ifdef CONFIG_ARM64 #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("x18") #else #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r9") #endif 这个宏定义了一个gd_t全局数据结构的指针gd, 这个指针存放在指定的寄存器中。 声明一个寄存器变量 gd占用r9。这个宏在所有需要引用全局数据指针gd_t *gd的源码中都有申明。 这个申明也避免编译器把r9分配给其它的变量。所以 gd就是r9, 用r9来保存内存地址, 达到全局使用目的, 这个指针变量不占用内存。 总结:gd指向一个数据结构,用于保存参数。 来源: https://www.cnblogs.com/idyllcheung/p/11639646.html