uboot源码——gd_t 类型、bd_t 类型

bd_t、gd_t是u-boot中两个重要的数据结构,初始化操作中很多全局变量都要靠这两个数据结构来保存或传递。

两者分别定义在include/asm-arm/u-boot.h、include/asm-arm/global_data.h中。

一、bd_t 类型

struct bd_info 这个结构体类型,主要是用来保存板子参数。

使用typedef将这个结构体类型换别名为“bd_t”,其内容如下。

typedef struct bd_info 
{int bi_baudrate; /* serial console baudrate */unsigned long bi_ip_addr; /* IP Address *///开发板ID,该变量标识每一种开发板相关的ID,该值将传递给内核;//如果这个参数与内核配置的不相同,那么内核启动解压缩完成后//将出现“Error : a”错误; //开发板ID可以在内核arch/arm/tool/mach-types中查看ulong bi_arch_number; /* unique id for this board*///u-boot传递给内核的参数的保存地址ulong bi_boot_params; /* where this board expects params *///内存的起始地址及大小struct /* RAM configuration  */{ulong start;ulong size;} bi_dram[CONFIG_NR_DRAM_BANKS];} bd_t;

二、gd_t 类型

结构体struct global_data,其成员主要是一些全局的系统初始化参数。

使用typedef将这个结构体类型换别名为“gd_t”,其内容如下。

typedef struct global_data
{bd_t *bd; //与板子相关的结构,同上unsigned long flags; //指示标志,如设备已经初始化标志等unsigned long baudrate; //串口波特率unsigned long have_console; /* serial_init() was called */ //串口初始化标志#ifdef CONFIG_PRE_CONSOLE_BUFFER //宏未定义unsigned long precon_buf_idx; /* Pre-Console buffer index */#endifunsigned long env_addr; /* Address of Environment struct */ //环境变量参数地址unsigned long env_valid; /* Checksum of Environment valid? */ //检验环境变量参数是否有效unsigned long fb_base; /* base address of frame buffer */ // frame buffer基址#ifdef CONFIG_FSL_ESDHC //宏未在板子相关头文件中定义unsigned long 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#ifdef CONFIG_ARM //宏未定义/* "static data" needed by most of timer.c on ARM platforms */unsigned long timer_rate_hz;unsigned long tbl;unsigned long tbu;unsigned long long timer_reset_value;unsigned long lastinc;#endif#ifdef CONFIG_IXP425 //宏未在板子相关头文件中定义unsigned long timestamp;#endifunsigned long relocaddr; /* Start address of U-Boot in RAM */ //u-boot自搬移至内存后的起始地址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;#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF)) //宏未定义unsigned long tlb_addr;#endifconst void *fdt_blob; /* Our device tree, NULL if none */void **jt; /* jump table */char env_buf[32]; /* buffer for getenv() before reloc. */#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
}gd_t;

注意,在\include\asm-arm\global_data.h中定义了变量gd,它是gd_t指针类型的。

如下, DECLARE_GLOBAL_DATA_PTR定义了一个要放在寄存器r8中的全局变量,名字叫gd,类型是一个指向gd_t类型变量的指针。

#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码抽象的三原则

软件开发是"抽象化"原则(Abstraction)的一种体现。 所谓"抽象化",就是指从具体问题中,提取出具有共性的模式,再使用通用的解决方法加以处理。 开发软件的时候,一方面,我们总…

对图像高频信号和低频信号的理解

今天开始讲图像了,讲了很多在频域处理的方法,回来复习一下图像的频域。 一 、关于图像高频和低频 1.1 对图像高频信号和低频信号的理解 图像中的低频信号和高频信号也叫做低频分量和高频分量。 简单一点说,图像中的高频分量,…

关于开源中国手机App的说明

随着移动互联网大潮的快速发展,开源中国社区作为国内大型IT技术人员社区也推出了手机移动客户端,覆盖iOS,Android以及Windows Phone这三个手机平台。主要为了能让我们的用户能随时随地的与开源中国社区的用户进行交流与互动。我们需要App实现…

uva 11174(排列组合+搜索)

依然是liurujia计数练习题。依然是自己想没想出来,在MOD是素数的情况下除以x即为乘x的逆。这个真心以前没听过,用了这个方法后处理就变得十分巧妙。 整个程序步骤还是很清晰的,先上来算阶乘与逆(求数的逆还是有点没理解透&#xf…

将Source Insight的代码拷贝到word文档的方法

1、用Source Insight打开文件后,File->Print; 2、在 常规->选择打印机中,选择“Adobe PDF”(或者其他pdf打印机); 3、点确定,输出一个pdf文件了,然后去pdf文件里面复制代码&…

Oracle 学习笔记

2019_6_27日 星期四 第一章 oracle从入门到精通Laarry Ellison: 拉里.埃里森Bruce Scott: Tiger PointBase(WebLogic软件产品中附赠的数据库产品) 1.1 oracle安装oracle从实际的开发来讲,oracle11g是使用较多的,oracle的开发主要分为两类:.数…

引导滤波的opencv实现以及解释

参考: https://blog.csdn.net/qq_36006553/article/details/78594205

S5PV210的地址映射简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 S5PV210属于ARM Cortex-A8架构,是32位的CPU,有32根地址线和32根数据线。 这表明该CPU的寻址空间为4G,地址映射关系见下述。 S5PV210的地址映射 S5PV210的地址映射…

本杰明 富兰克林 道德13准则

富兰克林认为,好的习惯必须加以培养,坏的习惯必须打破。为了克服缺点,使自己少犯错误,他制定了13条道德准则。他说:“我打算获得这13种美德,并养成习惯。为了不致分散精力,我不指望一下子全做到…

树莓派(Raspberry Pi):完美的家用服务器

出处:http://linux.cn/thread/11884/1/1/ 树莓派(Raspberry Pi):完美的家用服务器 自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但…

无需删除D盘文件,将D盘空间分给C盘

做深度学习或机器学习的小伙伴,不知不觉就发现自己电脑C盘空间不够用了,但是D盘空间看着又很充裕,那么问题来了,怎么将D盘空间分给C盘呢,网上搜索了一圈,发现很多方法需要删除D盘文件才能将空间分享给C盘&a…

[NOI2019]回家路线

LOJ3156 题面就不放了 , 放一下数据范围 . 看到 \(n<2000,m<4000\) 就想到直接 \(dfs\) 到底 , 居然就过了前 \(4\)个 样例 , 最后一个要 \(2s\) . 后来写了 \(AB0\) 的 \(5\) 分 , 我知道写的是错的 , 还是交了以下这份代码 . ( LOJ 数据应该是官方数据 ) 得分 \(70\) .…

重定位——重定位的简介与操作(涉及位置无关码)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;位置无关码、位置有关码 - biaohc - 博客园 一、链接地址与运行地址 1、链接地址 链接地址&#xff0c;是指程序员通过Makefile中“ -Ttext xxx ”或者在链接脚本中指定的地址…

前端手册

一直觉得前端开发缺个手册&#xff0c;这是个体力活。不过总得有人来干。 今天闲来无事&#xff0c;把一些工具(online和client的)、常用网址、以及经验总结等罗列出来和大家分享下。这个标题起地大了点&#xff0c;肯定会有很多地方没列到&#xff0c;包括类目的分法也可能考虑…

如何随机选取1000个关键字

Q:给定一个数据流&#xff0c;其中包含无穷尽的搜索关键字&#xff08;比如&#xff0c;人们在谷歌搜索时不断输入的关键字&#xff09;。如何才能从这个无穷尽的流中随机的选取1000个关键字&#xff1f; A:首先定义长度为1000的数组&#xff0c;将前1000个关键字放置到数组中。…

重定位——链接脚本的简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 链接脚本基本语法_Nerazzur的博客-CSDN博客_链接脚本语法&#xff08;推荐&#xff09; 链接脚本语法_ABCamus的博客-CSDN博客_链接脚本语法 链接地址、运行地址、加载地址、存储地址_嵌入…

OpenCV学习(27) 直方图(4)

我们可以利用OpenCV的直方图&#xff0c;backproject直方图和meanshift算法来跟踪物体。下面通过简单的例子来说明如何实现跟踪算法&#xff0c;我们有两幅狒狒的图片&#xff0c;如下图所示&#xff1a;我们首先在左图中框选狒狒的脸&#xff0c;计算出框选区域的色度(HSV空间…

IIS启用页面Gzip压缩实现说明

HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。 HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。 压缩的最大好处就是降低了网络传输的数据量&#xff0c;从而提高客户端浏览器的访问速度。 当然&#xff0c;同时也会增加一点点服务器的负担。G…

MySQL源码编译与初始化

MySQL源码编译与初始化 链接&#xff1a;https://pan.baidu.com/s/1ANGg3Kd_28BzQrA5ya17fQ 提取码&#xff1a;ekpy 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 1.MySQL简介 1.1数据库有很多种类&#xff1a; 关系型数据库--->MySQL Oracle非关系型数据库…

uboot中的虚拟地址映射

1、DRAM有效范围 &#xff08;1&#xff09;DMC0上允许的地址范围是20000000-3FFFFFFF&#xff08;一共是512MB&#xff09;&#xff0c;而X210开发板实际只接了256MB物理内存&#xff0c;SoC允许我们给这256MB挑选地址范围。在裸机中DMC0的地址范围是0x20000000-0x2FFFFFFF&am…