歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

u-boot下的兩個重要數據:bd_t和gd_t

[u-boot: v2013.04]

[Author: Bo Shen [email protected]]

眾所周知,u-boot中有兩個重要數據結構,一個是bd_t,另外一個是gd_t。下面分別介紹這兩個數據結構。

1. bd_t

此數據結構保存board相關的信息。

定義:<arch/arm/include/asm/u-boot.h>

其具體結構如下:

typedef struct bd_info {
 unsigned int bi_baudrate; /* serial console baudrate */
        ulong        bi_arch_number; /* unique id for this board */
        ulong        bi_boot_params; /* where this board expects params */
 unsigned long bi_arm_freq; /* arm frequency */
 unsigned long bi_dsp_freq; /* dsp core frequency */
 unsigned long bi_ddr_freq; /* ddr frequency */
    struct    /* RAM configuration */
    {
 ulong start;
 ulong size;
    }   bi_dram[CONFIG_NR_DRAM_BANKS];
} bd_t;

2. gd_t

定義:<include/asm-generic/global_data.h>

其具體結構如下:

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? */

 /* TODO: is this the same as relocaddr, or something else? */
 unsigned long dest_addr; /* Post-relocation address of U-Boot */
 unsigned long dest_addr_sp;
 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 */
 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. */
 struct arch_global_data arch; /* architecture-specific data */
} gd_t;

這其中還包含了一個arch_global_data,對於ARM,這個結構體定義在:<arch/arm/include/asm/global_data.h>

 

Copyright © Linux教程網 All Rights Reserved