uboot 最重要的变量存储结构体gd

来源:互联网 发布:鼠标手写输入法 mac 编辑:程序博客网 时间:2024/05/29 03:20

一直用source insight找gd变量的定义都没找到,后来发现例如typedef int (init_fnc_t) (void); 以及#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")之类si都是无法辨别为定义的。所以比较难找

经过不懈努力终于发现了定义位置。我用的是arm板子,该定义在cpu/sam-arm/Global_data.h中定义

先定义一个gd_t的结构体,里面具体的含义就自行脑补了

typedef structglobal_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;
unsigned long ram_size; /* RAM size */
unsigned long reset_status; /* reset status register at boot */
#endif
void **jt;/* jump table */
} gd_t;


然后在后面用#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")将gd的位置存储在r8寄存器中,

这个宏信息量比较大啊。

gd_t结构体中包含了另外一个比较重要的结构体bd_t,该定义在U-bot.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;

具体内容就看后面注释了,都是初始化用的。

0 0
原创粉丝点击