本文转自:http://www.embedu.org/Column/Column485.htm
bd_t和gd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。分别定义在include/asm-arm/u-boot.h和 include/asm-arm/global_data.h
1、bd_t :board info数据结构定义,主要是用来保存板子参数。
typedef struct bd_info {
int bi_baudrate;
unsigned long bi_ip_addr;
ulong bi_arch_number;
ulong bi_boot_params;
struct
{
ulong start;
ulong size;
} bi_dram[CONFIG_NR_DRAM_BANKS];
} bd_t;
2、gd_t : global data数据结构定义,位于文件 include/asm-arm/global_data.h。其成员主要是一些全局的系统初始化参数。当使用gd_t时需用宏定义进行声明:DECLARE_GLOBAL_DATA_PTR,指定占用寄存器R8。
typedef struct global_data {
bd_t *bd; //与板子相关的结构,同上
unsigned long flags; //指示标志,如设备已经初始化标志等
unsigned long baudrate; //串口波特率
unsigned long have_console; //串口初始化标志
#ifdef CONFIG_PRE_CONSOLE_BUFFER //宏未定义
unsigned long precon_buf_idx;
#endif
unsigned long env_addr; //环境变量参数地址
unsigned long env_valid; //检验环境变量参数是否有效
unsigned long fb_base; // frame buffer基址
#ifdef CONFIG_FSL_ESDHC //宏未在板子相关头文件中定义
unsigned long sdhc_clk;
#endif
#ifdef CONFIG_AT91FAMILY //宏未在板子相关头文件中定义
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
#ifdef CONFIG_ARM //宏未定义
unsigned long timer_rate_hz;
unsigned long tbl;
unsigned long tbu;
unsigned long long timer_reset_value;
unsigned long lastinc;
#endif
#ifdef CONFIG_IXP425 //宏未在板子相关头文件中定义
unsigned long timestamp;
#endif
unsigned long relocaddr; //u-boot自搬移至内存后的起始地址
phys_size_t ram_size;
unsigned long mon_len;
unsigned long irq_sp;
unsigned long start_addr_sp;
unsigned long reloc_off;
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF)) //宏未定义
unsigned long tlb_addr;
#endif
const void *fdt_blob;
void **jt;
char env_buf[32];
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER) //宏未定义
unsigned long post_log_word;
unsigned long post_log_res;
unsigned long post_init_f_time;
#endif
} gd_t;