52 unsigned long reset_status; /* reset status register at boot */ 53 #endif 54 void **jt; /* jump table */ 55 } gd_t; 67 #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8") 这个声明告诉编译器使用寄存器r8来存储gd_t类型的指针gd,即这个定义声明了一个指针,并且...
51 phys_size_t ram_size; /* RAM size */ 52 unsigned long reset_status; /* reset status register at boot */ 53 #endif 54 void **jt; /* jump table */ 55 } gd_t; 67 #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8") 这个声明告诉编译器使用寄存器r8来存储gd...
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm("r8") 声明一个寄存器变量gd占用r8。这个宏在所有需要引用全局数据指针gd_t *gd的源码中都有申明。 这个申明也避免编译器把r8分配给其它的变量.所以gd就是r8,用r8来保存内存地址,达到全局使用目的,这个指针变量不占用内存。
gd_t中定义了很多全局变量,都是整个uboot使用的,其中有一个bd_t类型的指针bd,指向结构体bd_info,这个结构体里面定义的是和开发板硬件先关的全局变量(譬如 ip地址 串口波特率 等) 全局变量gd是uboot中很重要的一个全局变量(准确的说这个全局变量是一个结构体,里面有很多内容,这些内容加起来构成的结构体就是ubo...
gd(globle data)是指向gd_t结构体的指针,在/uboot/include/asm-arm/Global_data.h文件中定义。 /*register表示尽量让cpu放在寄存器中,以提高其读写速度;asm (“r8”)是指定放在寄存器的r8*/#defineDECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8") ...
(gd是用来传递给内核的参数) 代码语言:javascript 代码运行次数:0 运行 AI代码解释 voidboard_init_f(ulong bootflag)// bootflag=0x00000000{bd_t*bd;init_fnc_t**init_fnc_ptr;gd_t*id;ulong addr,addr_sp;#ifdefCONFIG_PRAMulong reg;#endifbootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_F,"board_...
a 获取gd指针,并清空gd结构体内存 b 该函数用于非arm架构的gd指针获取,armv8架构则通过前面设置的x18寄存器获取gd指针,其定义如下(arch/arm/include/asm/global_data.h): 代码语言:javascript 代码运行次数:0 运行 AI代码解释 #ifdefCONFIG_ARM64#defineDECLARE_GLOBAL_DATA_PTRregister volatile gd_t*gdasm("x18...
3. 给 gd_t *gd_ptr 赋值(用于存储uboot镜像的长度,重定位地址, 重定位偏移量等信息) 在uboot 搬运到 DDR 中运行前进行最小系统的初始化,之后就将 uboot 搬运到 DDR 中运行。那么,此时 NOR Flash 和 SRAM 的任务就完成了(也就是没有用了)。
3. 给 gd_t *gd_ptr 赋值(用于存储uboot镜像的长度,重定位地址, 重定位偏移量等信息) 在uboot 搬运到 DDR 中运行前进行最小系统的初始化,之后就将 uboot 搬运到 DDR 中运行。那么,此时 NOR Flash 和 SRAM 的任务就完成了(也就是没有用了)。
U-boot重定位前的GD及内存规划 U-boot总体流程 atf基本启动流程为:BL1 – BL2 – BL31 – BL32 – BL33(uboot),即在bl32启动完成后再启动uboot,uboot作为启动链中作为最后一级镜像,用于启动最终的os。Atf是arm为了增强系统安全性引入,只支持armv7和armv8架构的可信固件。而uboot是通用的嵌入式系统引导程序...