关于u-boot中gd变量

在<TOPDIR>/lib_arm/board.c中
start_armboot函数中,有一个gd变量
gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));


gd在由该文件中的DECLARE_GLOBAL_DATA_PTR申明
DECLARE_GLOBAL_DATA_PTR在<TOPDIR>/include/asm/global_data.h中定义。
#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")
声明一个寄存器变量gd占用r8,因此gd不占内存。同时避免编译器把r8分配给其它的变量。所以gd就是r8,用r8来保存内存地址,达到全局使用目的。

gd_t是该文件中定义的一个global_data类型的结构体。结构中使用了bd_t结构
gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。
gd_t: global data数据结构定义,位于文件 include/asm/global_data.h。其成员主要是一些全局的系统初始化参数。
bd_t : board info数据结构定义,位于文件 include/asm/u-boot.h。保存板子参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `gd` 结构体是 `U-Boot` 的全局数据结构。它包含了 `U-Boot` 运行期间所需要的一些全局变量和指针,例如内存大小、环境变量指针等。 下面是一个 `U-Boot` 的 `gd` 结构体的定义: ```c struct global_data { ulong flags; /* state flags for this record */ ulong baudrate; /* console baudrate */ ulong cpu_clk; /* CPU clock in Hz */ ulong bus_clk; /* Bus clock in Hz */ ulong mem_clk; /* Mem clock in Hz */ ulong arch_number; /* unique id for this board */ ulong ram_size; /* RAM size */ ulong flash_size; /* Flash size */ ulong flash_offset; /* start of FLASH */ int env_valid; /* true if env area is valid */ char env_buf[ENV_SIZE]; /* buffer for getenv() */ ulong env_addr; /* Address of Environment struct */ ulong env_sect_size; /* size of one complete sector */ ulong env_sectors; /* number of sectors available */ uchar env_flash[CFG_ENV_ADDR_REDUND] __aligned(ARCH_DMA_MINALIGN); /* Image environment in FLASH */ uchar env_redund[CFG_ENV_ADDR_REDUND] __aligned(ARCH_DMA_MINALIGN); /* Image redundant environment in FLASH*/ bd_t *bd; /* board description pointer */ }; ``` `gd` 结构体变量和指针的具体含义可以参考注释。 ### 回答2: Linuxgd结构体是指全局数据结构(global data structure),用于存储截至到当前时间点的系统全局信息。gd结构体位于内存的一个固定地址,它是Linux内核启动时创建的,包含了许多与系统运行相关的信息。gd结构体包含了物理内存的起始地址和大小、设备树的地址、文件系统根目录、驱动程序的初始化函数列表等。 而U-bootgd结构体是指全局数据结构(global data structure),用于存储与启动过程相关的全局信息。U-boot是一种开源的嵌入式系统引导加载器,用于加载运行操作系统或其他应用程序。gd结构体存储了关于启动和引导过程的重要信息,如内存布局、启动设备、命令行参数、环境变量等。gd结构体是在U-boot启动时动态创建的,通过它可以在运行过程获取和设置各种全局变量,以支持系统的引导和启动流程。 无论是在Linux还是U-bootgd结构体都扮演着重要的角色,它提供了一个全局的数据存储空间,方便在系统运行过程存储和访问各种全局变量。通过gd结构体,可以在系统的整个生命周期内记录和获取运行时的全局信息,为系统的正常运行和用户的操作提供了必要的数据支持。 ### 回答3: gd结构体是Linux内核的一个重要数据结构,它在内核初始化期间被创建,用于管理全局数据。它定义在头文件"include/linux/gd.h"gd结构体包含了许多字段,下面是一些重要的字段及其功能: 1. flags:包含了一些标志位,用于表示一些系统状态信息,比如是启动时的标志。 2. env_addr:存储着环境变量的起始地址。 3. env_valid:标志着环境变量的有效性,为1时表示有效。 4. ram_base、ram_size:存储着内存的起始地址和大小。 5. arch:用于存储体系结构相关的信息。 6. baudrate:串口通信的波特率。 7. bootfile:引导该系统的启动文件名。 8. boot_device:标志着启动设备的类型和编号。 9. lcd_color_index:存储了LCD显示颜色索引。 除了上述字段外,gd结构体还包含了一些用于存储引导时加载的设备树、已加载内核的前一级地址以及其他一些系统配置信息的字段。 而在U-boot,也有类似的gd结构体用于管理全局数据。U-bootgd结构体提供了与Linux内核gd结构体类似的功能,并且额外包含一些U-boot特有的字段。这些字段用于记录U-boot启动的相关信息,比如启动设备类型和编号、启动设备的起始地址、U-boot的启动参数等。 总的来说,gd结构体在Linux和U-boot是非常重要的数据结构,它们提供了全局数据的管理和存储,方便操作系统和引导程序进行相关的启动和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值