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,即这个定义声明了一个指针,并且...
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。其成员主要是一些 全局的系统初始化参数。需要用到时...
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm("r8") 声明一个寄存器变量gd占用r8。这个宏在所有需要引用全局数据指针gd_t *gd的源码中都有申明。 这个申明也避免编译器把r8分配给其它的变量.所以gd就是r8,用r8来保存内存地址,达到全局使用目的,这个指针变量不占用内存。
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...
gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t)); __asm__ __volatile__("": : :"memory"); memset ((void*)gd, 0, sizeof (gd_t)); gd->bd = (bd_t*)((char*)gd - sizeof(bd_t)); memset (gd->bd, 0, sizeof (bd_t)); ...
gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递.分别定义在./include/asm/global_data.h和./include/asm/u_boot.h1.gd_t: global data数据结构定义,位于文件 include/asm-arm/global_data.h。其成员主要是一些全局的系统初始化参数。需要用到时用宏定义:DECLA...
gd_t中定义了很多全局变量,都是整个uboot使用的;其中有一个bd_t类型的指针,指向一个bd_t类型的变量,这个bd是开发板的板级信息的结构体,里面有不少硬件相关的参数,譬如波特率、IP地址、机器码、DDR内存分布。 3、内存使用排布 为什么要分配内存 (1)DECLARE_GLOBAL_DATA_PTR只能定义了一个指针,也就是说gd里的...
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 的任务就完成了(也就是没有用了)。
3.给gd_t *gd_ptr赋值 (用于存储uboot镜像的长度,重定位地址,重定位偏移量等信息)在uboot搬运到...