zoukankan      html  css  js  c++  java
  • gd_t , bd_t 结构分析

    在分析板级初始化函数board_init_f 和 board_init_r 之前,先来看一下在uboot中颇为重要的 gd_t, bd_t 结构

    bd_t 所对应的定义bd_info 在 arch/arm/include/asm/u-boot.h 下,主要用来保存板子参数

     1 typedef struct bd_info {
     2     int            bi_baudrate;    /* serial console baudrate 波特率串口控制台*/
     3     unsigned long    bi_ip_addr;    /* IP Address */
     4     ulong            bi_arch_number;    /* unique id for this board 板子唯一的ID */
     5     ulong            bi_boot_params;    /* where this board expects params  启动参数*/
     6     struct                /* RAM configuration  ARM的开始位置和大小*/
     7     {
     8     ulong start;
     9     ulong size;
    10     }            bi_dram[CONFIG_NR_DRAM_BANKS];
    11 } bd_t;
    bd_info
    • ulong bi_arch_number; /* unique id for this board 开发板ID*/

        该变量标识每一种开发板相关的ID,该值将传递给内核,如果这个参数与内核配置的不相同,那么内核启动解压缩完成后将出现“Error:a”错误,开发板ID可以在内核arch/arm/tools/mach-types中查看

    • ulong bi_boot_params; /* where this board expects params u-boot*/

        传递给内核的参数的保存地址

    gd_t 对应的global_data 在 arch/arm/include/asm/global_data.h,其成员主要是一些全局的系统初始化参数。当使用gd_t时需用宏定义进行声明:DECLARE_GLOBAL_DATA_PTR,指定占用寄存器R8。

     1  * Keep it *SMALL* and remember to set GENERATED_GBL_DATA_SIZE > sizeof(gd_t)
     2  */
     3 
     4 
     5 typedef    struct    global_data {
     6     bd_t        *bd;                //与板子相关的结构
     7     unsigned long    flags;      //指示标志,如设备已经初始化标志等
     8     unsigned long    baudrate;  //串口波特率
     9     unsigned long    have_console;    /* serial_init() was called 串口初始化标志*/
    10     unsigned long    env_addr;    /* Address  of Environment struct  环境变量参数地址*/
    11     unsigned long    env_valid;    /* Checksum of Environment valid?  检验环境变量参数是否有效 */
    12     unsigned long    fb_base;    /* base address of frame buffer 
    13  frame buffer 基址*/
    14 #ifdef CONFIG_VFD
    15     unsigned char    vfd_type;    /* display type 显示类型的logo 的VFD*/
    16 #endif
    17 #ifdef CONFIG_FSL_ESDHC    //宏未在板子相关头文件中定义
    18     unsigned long    sdhc_clk;
    19 #endif
    20 #ifdef CONFIG_AT91FAMILY    //宏未在板子相关头文件中定义
    21     /* "static data" needed by at91's clock.c */
    22     unsigned long    cpu_clk_rate_hz;
    23     unsigned long    main_clk_rate_hz;
    24     unsigned long    mck_rate_hz;
    25     unsigned long    plla_rate_hz;
    26     unsigned long    pllb_rate_hz;
    27     unsigned long    at91_pllb_usb_init;
    28 #endif
    29 #ifdef CONFIG_ARM    // 宏未定义
    30     /* "static data" needed by most of timer.c on ARM platforms */
    31     unsigned long    timer_rate_hz;
    32     unsigned long    tbl;
    33     unsigned long    tbu;
    34     unsigned long long    timer_reset_value;
    35     unsigned long    lastinc;
    36 #endif
    37     unsigned long    relocaddr;    /* Start address of U-Boot in RAM   u-boot搬移到内存后的起始地址*/
    38     phys_size_t    ram_size;    /* RAM size */
    39     unsigned long    mon_len;    /* monitor len */
    40     unsigned long    irq_sp;        /* irq stack pointer */
    41     unsigned long    start_addr_sp;    /* start_addr_stackpointer */
    42     unsigned long    reloc_off;
    43 #if !(defined(CONFIG_SYS_NO_ICACHE) && defined(CONFIG_SYS_NO_DCACHE))    //宏未定义
    44     unsigned long    tlb_addr;
    45 #endif
    46     void        **jt;        /* jump table */
    47     char        env_buf[32];    /* buffer for getenv() before reloc.   reloc之前getenv()的缓冲区*/
    48 } gd_t;
    49 
    50 
    51 
    52 #define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")
    global_data
  • 相关阅读:
    开启mysql远程访问的知识点
    U850EAI二次开发说明,用友EAI二次开发说明下载
    U8界面按钮二次开发手册,用友界面二次开发手册.pdf下载
    用友二次开发,用友EAI案例分析
    正则表达式在线测试相关网站
    用友EAI企业应用集成使用手册U8EAI手册2006年下载
    用友EAI企业应用集成使用手册U8EAI手册2005年下载
    U8EAI企业应用集成培训,用友EAI培训下载
    如何使用批处理,遍历指定目录下的文件。
    hdu 1021 数学水题 枚举法
  • 原文地址:https://www.cnblogs.com/chu-yi/p/10239420.html
Copyright © 2011-2022 走看看