U-boot重定位前的GD及内存规划 在进入c语言之前,我们需要为其准备好运行环境,以及做好内存规划,这其中除了栈和堆内存之外,还需要为gd结构体分配内存空间。gd是uboot中的一个global_data类型全局变量,该变量包含了很多全局相关的参数,为各模块之间参数的传递和共享提供了方便。由于该变量在跳转到c流程之前就需要准备好,此时
5. uboot中的gd结构体 u-boot中有一个用来保存很多有用信息的全局结构体-gd_t(globaldata缩写), 其中包括了bd变量,可以说gd_t结构体包括了u-boot中所有重要全局变量。 它是一个内核启动参数,是内核的一个重要的数据结构,它是一个结构体,它保存着内核启动所需要的重要参数,诸如串口波特率,有无控制台,环境变量...
} gd_t;下面这一句定义了结构题gd_t指针gd并存储在寄存器r8中 define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
gd_t中定义了很多全局变量,都是整个uboot使用的,其中有一个bd_t类型的指针bd,指向结构体bd_info,这个结构体里面定义的是和开发板硬件先关的全局变量(譬如 ip地址 串口波特率 等) 全局变量gd是uboot中很重要的一个全局变量(准确的说这个全局变量是一个结构体,里面有很多内容,这些内容加起来构成的结构体就是ubo...
unsignedlongram_size;/*RAM size*/unsignedlongreset_status;/*reset status register at boot*/#endifvoid**jt;/*jump table*/} gd_t; include/asm-arm/global_data.h,定义了全局变量指针r8,可以说全局变量区不像普通变量可以用变量名访问,它只能用指针访问。
*gd是一个全局变量 *gd指向r8寄存器,所以r8专门提供给gd使用 代码语言:javascript 代码运行次数:0 运行 AI代码解释 __asm___volatile__("":::"memory");//memory:让cpu重新读取内存的数据memset((void*)gd,0,sizeof(gd_t));//将0x30000f80地址上的gd_t结构体清0gd->mon_len=_bss_end_ofs;// _...
这个宏的意思是:定义了一个全局变量名字为gd,这个全局变量是一个指针类型,占4个字节,用volatile修饰表示可变的;用register修饰表示这个变量要尽量放到寄存器中去;asm("r8")是gcc支持的一种语法,意思是要把gd放到寄存器r8中。 综合分析:DECLARE_GLOBAL_DATA_PTR就是定义了一个要放在寄存器r8中的全局变量,名字叫gd,...
U-boot重定位前的GD及内存规划 在进入c语言之前,我们需要为其准备好运行环境,以及做好内存规划,这其中除了栈和堆内存之外,还需要为gd结构体分配内存空间。gd是uboot中的一个global_data类型全局变量,该变量包含了很多全局相关的参数,为各模块之间参数的传递和共享提供了方便。由于该变量在跳转到c流程之前就需要准备...
也就是说,我们声明了一个寄存器变量,它的初始值为_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t),也就是0x33F80000-(0x20000+2048*1024)-0x24。也就是说,gd 指向了一段可用的内存区域,而这段内存区域相当于 u-boot 的全局变量。 那指针 gd 指向的数据结构到底是什么呢?为什么要设置这个数据结构呢?
//先使用默认环境变量 int env_init(void) { gd->env_addr = (ulong)&default_environment[0]; gd->env_valid = 1; return (0); } //加载外存中的环境变量 void env_relocate (void) { env_ptr = (env_t *)malloc (CFG_ENV_SIZE); ...