uboot全局数据gd_t、bd_t和device_t
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的更多相关文章
- gd_t , bd_t 结构分析
在分析板级初始化函数board_init_f 和 board_init_r 之前,先来看一下在uboot中颇为重要的 gd_t, bd_t 结构 bd_t 所对应的定义bd_info 在 arch/a ...
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试 一.模型状态 - ModelState 我理解 ...
- android中共享全局数据的方法
转自:http://blog.csdn.net/ameyume/article/details/6100756 我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中的所有Activity和Vi ...
- 全局数据 GetGlobalDataSet
/// <summary> /// 获取全局数据 /// </summary> /// <returns></returns> public DataS ...
- 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 ...
- 微信小程序全局数据globalData的使用问题
如果在A页面设置全局属性,但在B页面无法使用的话,可能是这个问题: app.js globalData: { helpPage:0, }, A页面 A(e) { getApp().globalData ...
- u-boot分析——struct gd_t与struct bd_t
gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递.分别定义在./include/asm/global_data.h和./include/asm/u ...
- u-boot include目录 gd_t结构体 如何关联芯片指定的目录
1 u-boot /u-boot-2018.07-fmxx/include/config.h /* Automatically generated - do not edit */#define CO ...
- 扩展EF的Fluent API中的 OnModelCreating方法 实现全局数据过滤器
1.生成过滤的表达式目录树 protected virtual Expression<Func<TEntity, bool>> CreateFilterExpression&l ...
随机推荐
- 使用ajax和window.history.pushState无刷新改变页面内容和地址栏URL (转)
在访问现在很火的google plus时,细心的用户也许会发现页面之间的点击是通过ajax异步请求的,同时页面的URL发生了了改变.并且能够很好的支持浏览器的前进和后退.不禁让人想问,是什么有这么强大 ...
- Fusion Tables 图层用于呈现 Google Fusion Tables 中包含的数据
Google Maps API 允许您使用 FusionTablesLayer 对象将 Google Fusion Tables 中包含的数据呈现为地图上的图层.Google Fusion Table ...
- python学习笔记011——内置函数pow()
1 语法 pow(x, y[, z]) x -- 数值表达式. y -- 数值表达式. z -- 数值表达式. 函数是计算 x 的 y 次方,如果 z 在存在,则再对结果进行取模,其结果等效于pow( ...
- Java和C++通过Socket通信中文乱码的解决
理想的开发状态是我开始就是C开发,一直是C的开发,现在还是C的开发,若干年后,幸运的话,我可以成为C语言的高手或者专家…… 更实际的情况是我开始是C开发,后来变成了JAVA开发,然后又做起了VC++的 ...
- ThreadLocal 类说明
1 ThreadLocal 不是一个线程,而是保存线程本地化对象的容器.当运行于多线程环境的某个对象使用 ThreadLocal 维护变量时,ThreadLocal 为每一个使用该变量的线程分配一个独 ...
- laravel的模型和数据库基础操作
laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM): use Illuminate\Support\Facades\ ...
- hadoop环境搭建-完全分布式
用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统,一个win7系统.每台电脑装两个虚拟机,要不然内存就满了. 1.安装虚拟机环境 Vmware,收费产品,占内存较大. ...
- Windows中将javac和java两个命令集成到UltraEdit工具栏
1. 目的 将javac和java两个命令集成到UltraEdit工具栏,以方便在UltraEdit中编辑简单的java文件后,能够直接进行编译,运行. 2. 环境 UrtalEdit版本18.20: ...
- Sqlite 常用函数推荐
Sqlite 常用函数 1 .打开数据库: 说明:打开一个数据库,文件名不一定要存在,如果此文件不存在, sqlite 会自动创建.第一个参数指文件名,第二个参数则是定义的 sqlite3 ** 结构 ...
- Linux下修改时间时区的方法介绍
点评:在Linux中,用于时钟查看和设置的命令主要有date.hwclock和clock.其中,clock和 hwclock用法相近,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件 ...