linux gd结构体,U-Boot中gd的定义和使用
最近在做uboot中nand启动相关的工作,遇到一个问题一直纠结着。现在终于明白了这个问题,想想还有好多兄弟在某个黑暗的角落里或者某台电脑前纠结着呢,所以赶紧写下来以供查阅。
U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htm
uboot version 2014.4
/* Architecture-specific global data */
struct arch_global_data {
#if defined(CONFIG_FSL_ESDHC)
u32 sdhc_clk;
#endif
#ifdef CONFIG_AT91FAMILY
/* "static data" needed by at91's clock.c */
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
/* "static data" needed by most of timer.c on ARM platforms */
unsigned long timer_rate_hz;
unsigned long tbu;
unsigned long tbl;
unsigned long lastinc;
unsigned long long timer_reset_value;
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
unsigned long tlb_addr;
unsigned long tlb_size;
#endif
#ifdef CONFIG_OMAP
struct omap_boot_parameters omap_boot_params;
#endif
};
#include
#ifdef CONFIG_ARM64
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("x18")
#else
#define DECLARE_GLOBAL_DATA_PTR
register volatile gd_t *gd asm ("r9")
#endif
从这里看到了gd的定义,并且可以知道气质这个结构体的定义是在:#include 这个目录下。
那么就去这个目录下添加一个私有变量使得在后续的使用过程中更加方便吧!!!!!!!!!!!
typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned int baudrate;
unsigned long cpu_clk;
/* CPU clock in Hz! */
unsigned long bus_clk;
/* We cannot bracket this with CONFIG_PCI due to mpc5xxx */
unsigned long pci_clk;
unsigned long mem_clk;
#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
unsigned long fb_base;
/* Base address of framebuffer mem */
#endif
#if defined(CONFIG_POST) || defined(CONFIG_LOGBUFFER)
unsigned long post_log_word; /* Record POST activities */
unsigned long post_log_res; /* success of POST test */
unsigned long post_init_f_time; /* When post_init_f started */
#endif
#ifdef CONFIG_BOARD_TYPES
unsigned long board_type;
#endif
unsigned long have_console;
/* serial_init() was called */
#ifdef CONFIG_PRE_CONSOLE_BUFFER
unsigned long precon_buf_idx;
/* Pre-Console buffer index */
#endif
#ifdef CONFIG_MODEM_SUPPORT
unsigned long do_mdm_init;
unsigned long be_quiet;
#endif
unsigned long env_addr;
/* Address of Environment struct */
unsigned long env_valid;
/* Checksum of Environment valid? */
unsigned long ram_top;
/* Top address of RAM used by U-Boot */
unsigned long relocaddr;
/* Start address of U-Boot in RAM */
phys_size_t ram_size;
/* RAM size */
unsigned long mon_len;
/* monitor len */
unsigned long irq_sp;
/* irq stack pointer */
unsigned long start_addr_sp;
/* start_addr_stackpointer */
unsigned long reloc_off;
struct global_data *new_gd;
/* relocated global data */
#ifdef CONFIG_DM
struct device *dm_root; /* Root instance for Driver Model */
struct list_head uclass_root;
/* Head of core tree */
#endif
const void *fdt_blob;
/* Our device tree, NULL if none */
void *new_fdt;
/* Relocated FDT */
unsigned long fdt_size;
/* Space reserved for relocated FDT */
void **jt; /* jump table */
char env_buf[32];
/* buffer for getenv() before reloc. */
#ifdef CONFIG_TRACE
void *trace_buff;
/* The trace buffer */
#endif
#if defined(CONFIG_SYS_I2C)
int cur_i2c_bus;
/* current used i2c bus */
#endif
unsigned long timebase_h;
unsigned long timebase_l;
struct arch_global_data arch;
/* architecture-specific data */
#ifdef CONFIG_xxxxx //此处随便x
void *priv;
/* point to the private data */
#endif
} gd_t;
在使用的过程中包含头文件,就可以使用了。
linux gd结构体,U-Boot中gd的定义和使用相关推荐
- linux查看内存条pn,实验:使用GDB查看结构体在内存中的存储方式
结构体在内存中的表示形式是怎么样的? 结构体在内存中和普通变量存储没有太大的区别. 首先我们看看,计算机如何读取普通变量: 普通变量例如int是占据4个字节,计算机读内存的时候会从起始地址开始读, ...
- linux utmp结构体,Linux C编程如何使用联机帮助来解决编程问题?
1.背景 多次学习C语言一直无法踏入C语言的大门,每次都是在学习C语言中的那些系统调用库函数等望而却只,linux下的系统调用需要我们去记忆一些没有规律的结构体和一些大写的宏定义并且还有一个函数多种形 ...
- C语言试题五十二之学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun,它的功能时:按分数的高低排列学生的记录,高分在前。
1. 题目 请编写一个函数void function(Student a[], int n),其功能时:学生的记录由学号和成绩组称个,n名大学生得数据已在主函数中放入结构体数组a中,请编写函数fun, ...
- golang 结构体断言_Golang中的reflect原理
反射(reflect)是在计算机程序运行时,访问,检查,修改它自身的一种能力,是元编程的一种形式.在Java等语言中都很好地支持了反射.Golang也实现了反射,主要核心位于reflect包,官方文档 ...
- c语言结构体在内存中的存储,C语言结构体在内存中的存储情况探究------内存对齐...
条件(先看一下各个基本类型都占几个字节): voidsize_(){ printf("char类型:%d", sizeof(char)); printf("int类型:% ...
- c语言 由函数组成的数组,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的_考题宝...
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是按分数的高低排列学生的记录,低分在前. 注意:部分源程序给出如下. 请勿改动主函数main和其 ...
- MATLAB结构体写入excel中
MATLAB结构体写入excel中 C = struct2cell(Data): Data 是要转化得结构体 C 是转成功得元胞数组 xlswrite('Names.xlsx',C{1}); Name ...
- 【C 语言】结构体 ( 结构体类型变量初始化 | 定义变量时进行初始化 | 定义隐式结构体时声明变量并初始化 | 定义普通结构体时声明变量并初始化 )
文章目录 一.结构体类型变量初始化 1.定义变量时进行初始化 2.定义普通结构体时声明变量并初始化 3.定义隐式结构体时声明变量并初始化 二.完整代码示例 一.结构体类型变量初始化 1.定义变量时进行 ...
- 结构体是什么、声明和定义
目录 结构体是什么.声明和定义 1.结构体类型的概念 2. 结构体的声明与定义 2.1 结构体声明(结构布局) 2.2 结构体变量声明(创建) 2.3 3. 定义结构体变量的几种方式 3.1 先声明结 ...
最新文章
- (转)AppCan中调用系统浏览器打开网页
- webconfig节点值里的文字换行问题
- Python入门学习---第四天
- Java匿名内部类总结
- 使用Java 9向Javadoc搜索添加术语
- 大家狂欢吧,我的Google帐号悲剧了
- sql怎么撤回update_腾讯SQL“现役运动员”给你的实践小技巧
- OpenShift 4 之AMQ Streams(1) - 多个Consumer从Partition接收数据
- 计算机485通讯原理,软件实现 - 基于Modbus协议的RS485总线通讯机设计原理及应用...
- “程序已停止工作”问题的解决方法,停止解决方法
- QQ连连看外挂源码-VB源代码
- MySQL快速学习入门
- C实现iBeacon蓝牙测距
- android黑色背景图片,android显示PNG图片背景黑色问题 ImageView PNG 背景黑色
- 探讨内容付费的本质和趋势
- 计算机不显示固态硬盘,新装的固态硬盘不显示怎么办?
- 解决Mac 80端口被占用
- 端口映射工具rinetd
- Swoole基础知识,安装,websocket应用及各种问题详解
- 自考电子科大计算机考研,付出终有回报!自考本科生跨考考研,成功考入名校电子科技大学...
热门文章
- typora绑定github博客_零基础搭建个人博客
- rs422 波特率高错误_质量流量计的应用问题与常见错误代码的故障处理
- vue + element-ui 聊天_Vue管理后台框架选择推荐
- win7 java jna找不到_java – 资源路径中找不到JNA本机支持(/com/sun/jna/linux-arm/libjnidispatch.so)...
- python3.70 wxpy_python3.5中的wxpydeprectionwarning
- python创建列表副本_Python编程15:Python列表的排序和列表的副本
- 彻底搞懂oracle字符集,搞懂oracle字符集
- springboot怎么返回404_Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理
- c开头英文语言,C开头的考研英语词汇
- oracle 控制文件 scn,重建控制文件后, 控制文件中的数据文件检查点SCN来自哪里...