linux gd结构体,U-Boot中gd的定义和使用

最近在做uboot中nand启动相关的工作,遇到一个问题一直纠结着。现在终于明白了这个问题,想想还有好多兄弟在某个黑暗的角落里或者某台电脑前纠结着呢,所以赶紧写下来以供查阅。

U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htm

uboot version 2014.4

/* Architecture-specific global data */

struct arch_global_data {

#if defined(CONFIG_FSL_ESDHC)

u32 sdhc_clk;

#endif

#ifdef CONFIG_AT91FAMILY

/* "static data" needed by at91's clock.c */

unsigned long  cpu_clk_rate_hz;

unsigned long  main_clk_rate_hz;

unsigned long  mck_rate_hz;

unsigned long  plla_rate_hz;

unsigned long  pllb_rate_hz;

unsigned long  at91_pllb_usb_init;

#endif

/* "static data" needed by most of timer.c on ARM platforms */

unsigned long timer_rate_hz;

unsigned long tbu;

unsigned long tbl;

unsigned long lastinc;

unsigned long long timer_reset_value;

#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))

unsigned long tlb_addr;

unsigned long tlb_size;

#endif

#ifdef CONFIG_OMAP

struct omap_boot_parameters omap_boot_params;

#endif

};

#include

#ifdef CONFIG_ARM64

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

#else

#define DECLARE_GLOBAL_DATA_PTR

register volatile gd_t *gd asm ("r9")

#endif

从这里看到了gd的定义,并且可以知道气质这个结构体的定义是在:#include 这个目录下。

那么就去这个目录下添加一个私有变量使得在后续的使用过程中更加方便吧!!!!!!!!!!!

typedef struct global_data {

bd_t *bd;

unsigned long flags;

unsigned int baudrate;

unsigned long cpu_clk;

/* CPU clock in Hz!  */

unsigned long bus_clk;

/* We cannot bracket this with CONFIG_PCI due to mpc5xxx */

unsigned long pci_clk;

unsigned long mem_clk;

#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)

unsigned long fb_base;

/* Base address of framebuffer mem */

#endif

#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)

unsigned long post_log_word;  /* Record POST activities */

unsigned long post_log_res; /* success of POST test */

unsigned long post_init_f_time;  /* When post_init_f started */

#endif

#ifdef CONFIG_BOARD_TYPES

unsigned long board_type;

#endif

unsigned long have_console;

/* serial_init() was called */

#ifdef CONFIG_PRE_CONSOLE_BUFFER

unsigned long precon_buf_idx;

/* Pre-Console buffer index */

#endif

#ifdef CONFIG_MODEM_SUPPORT

unsigned long do_mdm_init;

unsigned long be_quiet;

#endif

unsigned long env_addr;

/* Address  of Environment struct */

unsigned long env_valid;

/* Checksum of Environment valid? */

unsigned long ram_top;

/* Top address of RAM used by U-Boot */

unsigned long relocaddr;

/* Start address of U-Boot in RAM */

phys_size_t ram_size;

/* RAM size */

unsigned long mon_len;

/* monitor len */

unsigned long irq_sp;

/* irq stack pointer */

unsigned long start_addr_sp;

/* start_addr_stackpointer */

unsigned long reloc_off;

struct global_data *new_gd;

/* relocated global data */

#ifdef CONFIG_DM

struct device  *dm_root;  /* Root instance for Driver Model */

struct list_head uclass_root;

/* Head of core tree */

#endif

const void *fdt_blob;

/* Our device tree, NULL if none */

void *new_fdt;

/* Relocated FDT */

unsigned long fdt_size;

/* Space reserved for relocated FDT */

void **jt;  /* jump table */

char env_buf[32];

/* buffer for getenv() before reloc. */

#ifdef CONFIG_TRACE

void  *trace_buff;

/* The trace buffer */

#endif

#if defined(CONFIG_SYS_I2C)

int  cur_i2c_bus;

/* current used i2c bus */

#endif

unsigned long timebase_h;

unsigned long timebase_l;

struct arch_global_data arch;

/* architecture-specific data */

#ifdef CONFIG_xxxxx  //此处随便x

void  *priv;

/* point to the private data */

#endif

} gd_t;

在使用的过程中包含头文件,就可以使用了。

0b1331709591d260c1c78e86d0c51c18.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值