天天看点

gd_t和bd_t数据结构简介

本文转自: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;

继续阅读