gd_t定义在include/asm-arm/global_data.h

33  /* Keep it *SMALL* and remember to set CFG_GBL_DATA_SIZE > sizeof(gd_t)
 34  */

36 typedef struct  global_data {
 37     bd_t        *bd;
 38     unsigned long   flags;
 39     unsigned long   baudrate;
 40     unsigned long   have_console;   /* serial_init() was called */
 41     unsigned long   reloc_off;  /* Relocation Offset */
 42     unsigned long   env_addr;   /* Address  of Environment struct */
 43     unsigned long   env_valid;  /* Checksum of Environment valid? */
 44     unsigned long   fb_base;    /* base address of frame buffer */
 45 #ifdef CONFIG_VFD
 46     unsigned char   vfd_type;   /* display type */
 47 #endif
 48 #if 0
 49     unsigned long   cpu_clk;    /* CPU clock in Hz!     */
 50     unsigned long   bus_clk;
 51     phys_size_t ram_size;   /* RAM size */
 52     unsigned long   reset_status;   /* reset status register at boot */
 53 #endif
 54     void        **jt;       /* jump table */
 55 } gd_t;

67 #define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")
这个声明告诉编译器使用寄存器r8来存储gd_t类型的指针gd,即这个定义声明了一个指针,并且指明了它的存储位置。
register表示变量放在机器的寄存器
volatile用于指定变量的值可以由外部过程异步修改。

并且这个指针在start_armboot()(board.c)中被初始化:
    /* Pointer is writable since we allocated a register for it */
    gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));
这样,gd就指向的一个可用的内存地址了。

-------------------------------------------------------------------------------------------------------------

bd_t定义于include/asm-arm/u-boot.h

39 typedef struct bd_info {
 40     int         bi_baudrate;    /* serial console baudrate */
 41     unsigned long   bi_ip_addr; /* IP Address */
 42     unsigned char   bi_enetaddr[6]; /* Ethernet adress */
 43     struct environment_s           *bi_env;
 44     ulong           bi_arch_number; /* unique id for this board */
 45     ulong           bi_boot_params; /* where this board expects params */
 46     struct              /* RAM configuration */
 47     {
 48     ulong start;
 49     ulong size;
 50     }           bi_dram[CONFIG_NR_DRAM_BANKS];
 51 #ifdef CONFIG_HAS_ETH1
 52     /* second onboard ethernet port */
 53     unsigned char   bi_enet1addr[6];
 54 #endif
 55 } bd_t;
 56
 57 #define bi_env_data bi_env->data
 58 #define bi_env_crc  bi_env->crc

------------------------------------------------------------------------------------------------

device_t定义于include/devices.h,是对串口设备文件的描述。

29 /*
 30  * CONSOLE DEVICES
 31  */
 32
 33 #define DEV_FLAGS_INPUT  0x00000001 /* Device can be used as input  console */
 34 #define DEV_FLAGS_OUTPUT 0x00000002 /* Device can be used as output console */
 35 #define DEV_FLAGS_SYSTEM 0x80000000 /* Device is a system device        */
 36 #define DEV_EXT_VIDEO    0x00000001 /* Video extensions supported       */
 37
 38 /* Device information */
 39 typedef struct {
 40     int flags;          /* Device flags: input/output/system    */
 41     int ext;            /* Supported extensions         */
 42     char    name[16];       /* Device name              */
 43
 44 /* GENERAL functions */
 45
 46     int (*start) (void);        /* To start the device          */
 47     int (*stop) (void);     /* To stop the device           */
 48
 49 /* OUTPUT functions */
 50
 51     void (*putc) (const char c);    /* To put a char            */
 52     void (*puts) (const char *s);   /* To put a string (accelerator)    */
 53
 54 /* INPUT functions */
 55
 56     int (*tstc) (void);     /* To test if a char is ready...    */
 57     int (*getc) (void);     /* To get that char         */
 58
 59 /* Other functions */
 60
 61     void *priv;         /* Private extensions           */
 62 } device_t;

uboot全局数据gd_t、bd_t和device_t的更多相关文章

  1. gd_t , bd_t 结构分析

    在分析板级初始化函数board_init_f 和 board_init_r 之前,先来看一下在uboot中颇为重要的 gd_t, bd_t 结构 bd_t 所对应的定义bd_info 在 arch/a ...

  2. 我这么玩Web Api(二):数据验证,全局数据验证与单元测试

    目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试   一.模型状态 - ModelState 我理解 ...

  3. android中共享全局数据的方法

    转自:http://blog.csdn.net/ameyume/article/details/6100756 我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中的所有Activity和Vi ...

  4. 全局数据 GetGlobalDataSet

    /// <summary> /// 获取全局数据 /// </summary> /// <returns></returns> public DataS ...

  5. CAD通过扩展记录实体向数据库读写用户自定义的全局数据(com接口VB语言)

    VB代码实现如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...

  6. 微信小程序全局数据globalData的使用问题

    如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...

  7. u-boot分析——struct gd_t与struct bd_t

    gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递.分别定义在./include/asm/global_data.h和./include/asm/u ...

  8. u-boot include目录 gd_t结构体 如何关联芯片指定的目录

    1 u-boot /u-boot-2018.07-fmxx/include/config.h /* Automatically generated - do not edit */#define CO ...

  9. 扩展EF的Fluent API中的 OnModelCreating方法 实现全局数据过滤器

    1.生成过滤的表达式目录树 protected virtual Expression<Func<TEntity, bool>> CreateFilterExpression&l ...

随机推荐

  1. Matlab 调用Oracle数据库

    本文分两部分,1.通过sql语句操作数据库.2.通过ddl操作数据库 一 通过ODBC实现到oracle的连接1)控制面板->管理工具->ODBC数据源->在系统DSN中添加orac ...

  2. HDUOJ----1170Milk

    Milk Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. Windows2008R2允许多用户远程登录设置

    Windows 2008 R2终端服务器安装配置 后面的一律下一步就可以安装完成了,下面是如何设置多用户远程登陆. Windows2008允许多用户远程登录设置 服务器重启,以上配置全部生效.

  4. C#中遍历DataTable类型并删除行数据

    从数据库中读取出了DataSet类型的数据,通过dataSet.Tables[0]获得DataTable类型的数据. 这时候如果想批量修改dataTable中的内容,比如要删除dataTable中co ...

  5. android使用JsonWriter拼json字符串

    JsonWriter使用 Example: 拼一个如下的json格式String {    [        {            "id": 912345678901,    ...

  6. 轻松搞定面试中的“虚"

    提要 今天要整理的知识点是C++中有关虚的一切. 包括:虚函数,纯虚函数,虚基类,虚继承... 1.什么是虚函数,有什么作用? 在基类用virtual声明成员函数为虚函数.这样就可以在派生类中重新定义 ...

  7. Concurrency Managed Workqueue(二)CMWQ概述

    一.前言 一种新的机制出现的原因往往是为了解决实际的问题,虽然linux kernel中已经提供了workqueue的机制,那么为何还要引入cmwq呢?也就是说:旧的workqueue机制存在什么样的 ...

  8. Python直接赋值、浅拷贝和深度拷贝解析

    直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象 ...

  9. 如何让div在整个页面中居中?

    参考必应主页的样式,在页面中放置一个表格,100%宽高,然后表格内部是一个单元格,在单元格内部放置div,使其margin为auto即可. <table style="height: ...

  10. vim+cscope简易教程

    Cscope具有纯正的Unix血统,它最早是由贝尔实验室为PDP-11计算机开发的,后来成为商用的AT&T Unix发行版的组成部分.直到2000年4月,这个工具才由SCO公司以BSD lic ...