linux gd结构体,U-boot中的gd结构体

原地址:未知

u-boot

中有一个用来保存很多有用信息的全局结构体--

gd_t

(

global data

缩写),其中包括了

bd

变量,可以说

gd_t

结构体包括了

u-boot

中所有重要全局变量。

对于ARM平台这个结构体的定义大致如下:

include/asm-arm/global_data.h

typedef struct global_data {

bd_t  *bd;

unsigned long flags;

unsigned long baudrate;

unsigned long have_console; /* serial_init() was called */

unsigned long reloc_off; /* Relocation Offset */

unsigned long env_addr; /* Address  of Environment struct */

unsigned long env_valid; /* Checksum of Environment valid? */

unsigned long fb_base; /* base address of frame buffer */

#ifdef CONFIG_VFD

unsigned char vfd_type; /* display type */

#endif

#if 0

unsigned long cpu_clk; /* CPU clock in Hz!  */

unsigned long bus_clk;

phys_size_t ram_size; /* RAM size */

unsigned long reset_status; /* reset status register at boot */

#endif

void  **jt;  /* jump table */

} gd_t;

bd_info 在include\asm-arm\u-boot.h 中定义

typedef struct bd_info {

int   bi_baudrate; /* serial console baudrate */

unsigned long bi_ip_addr; /* IP Address */

unsigned char bi_enetaddr[6]; /* Ethernet adress */

struct environment_s        *bi_env;

ulong         bi_arch_number; /* unique id for this board */

ulong         bi_boot_params; /* where this board expects params */

struct    /* RAM configuration */

{

ulong start;

ulong size;

}   bi_dram[CONFIG_NR_DRAM_BANKS];

#ifdef CONFIG_HAS_ETH1

/* second onboard ethernet port */

unsigned char   bi_enet1addr[6];

#endif

} bd_t;

U-boot

中使用

gd

结构之前要用先用宏

DECLARE_GLOBAL_DATA_PTR

来声明。这个宏的定义如下:

include/asm-arm/global_data.h

#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")

从这个宏的定义可以看出,gd是一个保存在ARM的r8寄存器中的gd_t结构体的指针。

对于Linux Kernel,在使用U-boot传递来的gd中的bd时用的是arm_bd,因为:

在arch/arm/kernel/setup.c文件中:

void __init setup_arch(char **cmdline_p)

{

……

struct tag *tags = (struct tag *)&init_tags;

struct machine_desc *mdesc;

char *from = default_command_line;

void *bd_offset = NULL;

……

save_bd(bd_offset);

……

}

save_bd():

void __init save_bd(void* addr)

{

memcpy((char *)__res,

(char *)addr,

sizeof(bd_t));

arm_bd = (bd_t *)__res;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值