u-boot中有一个用来保存很多有用信息的全局结构体-gd_t(globaldata缩写), 其中包括了bd变量,可以说gd_t结构体包括了u-boot中所有重要全局变量。 它是一个内核启动参数,是内核的一个重要的数据结构,它是一个结构体,它保存着内核启动所需要的重要参数,诸如串口波特率,有无控制台,环境变量地址... 它的值一般要...
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...
清空gd指向的结构体、通过init_sequence函数数组,来初始化各个函数以及逐步填充gd结构体,最后划分内存区域,将数据保存在gd里,然后调用relocate_code()对uboot重定位 (gd是用来传递给内核的参数) 代码语言:javascript 代码运行次数:0 运行 AI代码解释 voidboard_init_f(ulong bootflag)// bootflag=0x00000000{bd_t*...
a 获取gd指针,并清空gd结构体内存 b 该函数用于非arm架构的gd指针获取,armv8架构则通过前面设置的x18寄存器获取gd指针,其定义如下(arch/arm/include/asm/global_data.h): #ifdef CONFIG_ARM64 #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("x18") #else #define DECLARE_GLOBAL_DATA_P...
综合分析:DECLARE_GLOBAL_DATA_PTR就是定义了一个要放在寄存器r8中的全局变量,名字叫gd,类型是一个指向gd_t类型变量的指针。gd_t中定义了很多全局变量,都是整个uboot使用的,其中有一个bd_t类型的指针bd,指向结构体bd_info,这个结构体里面定义的是和开发板硬件先关的全局变量(譬如 ip地址 串口波特率 等) ...
gd=(gd_t*)(_armboot_start-CFG_MALLOC_LEN-sizeof(gd_t));//gd结构体内所有信息,最终会传递给Linux内核// /*compileroptimizationbarrierneededforGCC>=3.4*/ __asm___volatile__("":::"memory"); memset((void*)gd,0,sizeof(gd_t)); gd...
从这里看到了gd的定义,而且能够知道气质这个结构体的定义是在:#include <asm-generic/global_data.h>这个文件夹下。 那么就去这个文件夹下加入一个私有变量使得在兴许的使用过程中更加方便吧!! !!! !!! !。! typedef struct global_data { bd_t *bd; ...
gd_t 和 bd_t 是 u-boot 中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递.分别定义在./include/asm/global_data.h 和./include/asm/u_boot.h 1.gd_t: global data 数据结构定义,位于文件 include/asm-arm/global_data.h。其成员主要是一些 全局的系统初始化参数。需要用到时...
x0 //sp栈指针复原 /* set up gd here, outside any C code */ mov x18, x0 //将x0寄存器的值保存到x18寄存器,也就是gd结构体的地址,x18 = 0x96dff0 bl board_init_f_init_reserve //调用board_init_f_init_reserve,参数为x0的值0x96dff0 mov x0, #0 //将x0寄存器的值设置为0 bl boar...
memset (gd->bd, 0, sizeof (bd_t));//gd区包含了bd区,gd_t,bd_t都是结构体变量, //用0填充(初始化) *gd->bd board info数据结构定义,位于文件include/asm-arm/u-boot.h monitor_flash_len = _bss_start - _armboot_start;//取u-boot的长度 ...