uboot中gd的定义和使用

Exynos4412 Uboot 移植(六)—— 相关知识补充 一、gd结构体的定义与使用 gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。分别定义在./include/asm-armgd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。分别定义在./include/asm-arm/global_data.h和 ./include/asm-arm/u-b 阅读详情

最近在做uboot中nand启动相关的工作,遇到一个问题一直纠结着。现在终于明白了这个问题,想想还有好多兄弟在某个黑暗的角落里或者某台电脑前纠结着呢,所以赶紧写下来以供查阅。

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 <asm-generic/global_data.h>


#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 <asm-generic/global_data.h>这个目录下。

那么就去这个目录下添加一个私有变量使得在后续的使用过程中更加方便吧!!!!!!!!!!!

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;

在使用的过程中包含头文件,就可以使用了。

U-Boot中gd的定义和使用 编程 在U-Boot中,gd是一个全局数据结构,用于存储各种全局数据。在编写U-Boot程序时,了解gd的定义和使用非常重要,因为它提供了许多有用的全局信息和功能。在U-Boot引导程序中,gd是一个全局数据结构,代表全局数据。gd的定义和使用在U-Boot的编程中起着重要的作用。下面将详细介绍gd的定义和使用,并提供相应的源代码示例。你可以根据自己的需求使用gd的其他成员变量。需要注意的是,在使用gd之前,你需要确保gd已经被正确初始化。通常,在U-Boot的启动代码中会进行gd的初始化操作。 阅读详情

相关推荐

编译原理考试大题分析【太原理工大学】

看完本篇大题拿 85% 的分应该没问题,TYUT 太原理工大学编译原理期末考试。

m0_52861684的博客 1万+

uboot中重要的全局变量——gd

1、gd变量的定义和声名 #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8") 解析: (1)gd是一个gd_t类型的全局变量,用宏的方式来声明这个变量是方便使用,在要使用gd变量的文件里添加这个宏即可。 (2)register:希望gd变量尽可能放在寄存器里; (3)volatile:指明这个变量是易变的,每次使用gd变量时都去地址处读取,不要使用缓存的gd变量的值; (4)gd_t:gd变量时gd_t类型; (5)a

weixin_42031299的博客 2786

CXL ALMP(ARB/MUX Link Management Packet)理解

ALMP(ARB/MUX Link Management Packet) 是CXL协议中由ARB/MUX层生成和处理的专用管理报文,用于协调链路电源状态切换(如L0s/L1)和虚拟链路状态机(vLSM)同步。ALMP是ARB/MUX层的控制平面报文,专用于以下场景:协调多协议(CXL.io、CXL.cachemem等)的链路状态切换(如L1进入/退出)。维护各协议独立的虚拟链路状态机(vLSM) 状态同步。在物理层(PHY)与链路层(Link Layer)之间仲裁电源管理请求。

Summer的博客 1198

【u-boot】u-boot源码分析笔记(06)| 启动过程中的gd分析

注意:本文以ARM架构下的u-boot源码来进行分析。u-boot版本:4.1.15 在u-boot源码下,随处可见gd,那么文本就来看看神秘的gd》》》》》》》 包含两个内容: (1)gd是如何定义的 (2)gd_t结构体定义 一、gd是如何定义的 在U-Boot的源码中,使用寄存器r9来表示全局数据结构gd。以下代码片段出自 u-boot Dir/arch/arm/include/asm/global_data.h #ifdef __clang__ #define DECLARE_GLOBAL_D

iriczhao的博客 2198

中微8S6990实战:5分钟搞定GPIO配置与按键中断(附避坑指南)

本文以中微8S6990单片机为例,详细讲解了GPIO按键中断的快速配置方法与实战避坑指南。内容涵盖GPIO初始化、中断配置、软件消抖优化及低功耗唤醒等关键步骤,并提供了利用逻辑分析仪进行调试验证的有效方法,帮助开发者快速构建稳定可靠的嵌入式按键交互系统。

weixin_29194817的博客 280

手把手教你设计低噪声前置放大电路:从光电二极管到X射线探测器的实战配置

本文实战指南详细解析了低噪声前置放大电路的设计,重点针对光电二极管和X射线探测器等微弱信号源。文章深入对比了跨阻放大器与电荷灵敏放大器的核心架构、噪声优化策略及PCB布局技巧,手把手指导从电路选型、仿真验证到调试测试的全流程,助力工程师构建精准可靠的信号链。

tech5的博客 513

uboot源码分析——gd_t 类型、bd_t 类型简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 2124

YOLO26涨点改进 | 检测头改进篇 | 利用ASFF改进YOLO26检测头,自适应空间特征融合模块,在所有的目标检测上均有大幅度的涨点效果

本文提出了一种自适应空间特征融合(ASFF)检测头YOLO26,用于解决目标检测中特征金字塔跨尺度特征不一致的问题。ASFF通过学习空间权重图,自适应地融合不同尺度的特征,抑制特征层间的冲突信息。实验表明,该方法在MSCOCO数据集上显著提升了检测精度(45FPS下AP达42.4%),且仅引入极小推理开销。ASFF模块具有可微分性、模型无关性和计算成本低等优势,能够有效改善特征尺度不变性,实现速度与精度的良好平衡。文章详细介绍了ASFF的原理、实现代码及其在YOLO模型中的集成方法。

Ai缝合怪、助力小伙伴高效发论文 553

U-BOOT启动流程【02】

前言 第一次学u-boot启动流程的时候我也是一头雾水,当然啦看一遍留个大概印象就好! 要想都学透的话也要花费很大的时间精力 本系列blog分三次写。本节讲的是分析_main函数 在虚拟机中我的Vcode比较卡,所以就在window环境下演示的,不过效果都是相同的,所以无需担心!!!如有错误的地方请及时联系我,我们一起学习!!! 板子是正点原子提供的IMX6ULL系列,所以有些函数例如判断CPU、board类型的时候默认跳过 目录 前言 _main函数详解 board_init_f函数 .

m0_59756458的博客 1003

【即插即用模块】注意力篇 | TGRS 2025 | SCPP:独家复现!三特征多尺度注意力融合,涨点必备!

摘要:SCPP(Scale-aware Pyramid Pooling)是一种创新的多尺度特征融合模块,专为U型网络瓶颈设计。它通过局部特征提取(1×1卷积)、多尺度膨胀卷积(1/3/5膨胀率分支)和全局特征聚合(全局平均池化)三重结构,结合SE通道注意力机制和自适应加权融合,显著提升特征表达能力。实验表明,SCPP能有效解决边缘模糊和错误检测问题,在遥感图像分割等任务中表现优异。该模块支持即插即用,适用于各类需要多尺度特征增强的视觉任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 944

uniapp [全端兼容] - 详细实现集成接入萤石云摄像头监控示例代码,页面单个或多个九宫格监控画面同时监控播放推流(视频控制方向上下左右移动/调节音量声音/全屏/截屏录制/回放/对讲/切换清晰度)

uni-app,h5移动端网页,小程序,安卓,苹果ios,app,nvue,EZVIZ萤石,uniapp萤石云摄像头监控,uniApp项目集成萤石云详细示例代码,Uniapp中使用萤石云播放视频,使用萤石云播放视频,萤石云实现多窗口监控,展示多个监控画面同时播放,ezuikit.js,云台控制左右移动,莹石摄像头直播视频,萤石视频回放,摄像头黑屏不显示,加载慢报错出错,多个摄像头宫格布局,niapp萤石云视频监控对接,实现海康萤石直播预览、回放、云台控制功能,如何利用萤石实现直播推流回流,实时监控播放,监控

🏆 前端领域优质创作者 1万+

uboot启动流程——C阶段的start_armboot函数

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 2026

基于AC算法的图像显著性检测及Matlab代码实现

以上是基于AC算法的图像显著性检测的Matlab代码实现。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。图像显著性检测是计算机视觉领域的一个重要任务,其目标是确定图像中最具有显著性的区域,即吸引人眼注意力的区域。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。AC算法的原理基于人眼视觉系统的特性,人眼在观察图像时通常会先关注图像中的显著性区域,然后才会注意到其他细节。

TechPulseZ的博客 438

u-boot之start_armboot分析(一)

略过所有没有定义的宏定义 这是uboot第二阶段的入口函数 函数位于lib_arm/board.c中 DECLARE_GLOBAL_DATA_PTR #define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8") 定义了一个要放到寄存器r8中的全局变量,名字叫gd,类型是一个指向gd_t类型变量的指针。 gd_t在include/asm-arm/global_data.h中定义,内容如下 typedef str.

贱贱的剑 470

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

board.c分析

文章目录

heyunpign的博客 956

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

uboot中board_init bi_arch_number在哪

uboot

菜鸡搞计算机 238

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

uboot中gd全局变量

在uboot源码中,按照uboot代码流程,进入第二阶段的入口函数,start_armboot, 慕名奇妙的来了一个变量gd, 初始化如下: gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t)); 还是真不好找到这个变量定义的地方,只有认真的阅读代码才知道。以下给出这个变量的定义。 DECLARE_GLOBAL_

穆先生的专栏 5851

uboot的gd_t和bd_t数据结构

gd_t和bd_t是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递。分别定义在./include/asm-arm/global_data.h和 ./include/asm-arm/u-boot.h 1、gd_t : global data数据结构定义,位于文件 include/asm-arm/global_data.h。其成员主要是一些全局的系统初始化参数

wendellluntan的博客 1821

uboot移植(五)——uboot启动的第二阶段(gd和bd)

之前uboot启动第一阶段的最后将指针指向了start_armboot这个函数,这里也 是uboot启动的第二阶段的开始并且uboot启动第二阶段大部分是在这个函数中完成 的。 DECLARE_GLOBAL_DATA_PTR;这个宏在大部分中的文件中都有这个宏,这个宏的 实际定义是在include/asm-arm/Global_data.h ...

weixin_34247299的博客 459

uboot 最重要的变量存储结构体gd

一直用source insight找gd变量的定义都没找到,后来发现例如typedef int (init_fnc_t) (void); 以及#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")之类si都是无法辨别为定义的。所以比较难找 经过不懈努力终于发现了定义位置。我用的是arm板子,该定义在cpu

zhangshuai13的专栏 838

linux gd结构体,U-Boot中gd的定义和使用

最近在做uboot中nand启动相关的工作,遇到一个问题一直纠结着。现在终于明白了这个问题,想想还有好多兄弟在某个黑暗的角落里或者某台电脑前纠结着呢,所以赶紧写下来以供查阅。U-Boot源代码下载地址 http://www.linuxidc.com/Linux/2011-07/38897.htmuboot version 2014.4/* Architecture-specific global ...

weixin_30937427的博客 464
上一篇: port linux & ramdisk
下一篇: uboot初体验-----一些关于nand设备启动的浅显的认识
野-百-合
博客等级 码龄17年 308粉丝 118原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值