uboot中gd的定义和使用

最近在做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;

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

uboot中gd的定义和使用,布布扣,bubuko.com

时间: 2024-10-12 23:53:56

uboot中gd的定义和使用的相关文章

u-boot中链接地址和加载地址的相关知识

以zc702开发板的u-boot为例 链接地址(运行地址):链接地址是在程序编译链接阶段就确定好的地址. u-boot的链接脚本由CONFIG_SYS_LDSCRIPT宏定义来指定,如在zynq_common.h当中有如下代码: #define CONFIG_SYS_LDSCRIPT "arch/arm/cpu/armv7/zynq/u-boot.lds" 在该链接脚本中指定了u-boot中各部分的链接顺序.同时zynq_common.h中的CONFIG_SYS_TEXT_BASE则指

u-boot中的Makefile

在windos下,pc机上电之后,BIOS会初始化硬件配置,为内核传递参数,引导操作系统启动,并且识别C盘.D盘.等整个操作系统启动起来之后,才可以运行应用程序比如QQ.QQ音影.同理,在嵌入式Linux操作系统中,bootloader在上电之后初始化硬件设备,引导Linux内核启动,并且挂在文件系统,等整个操作系统启动之后.运行应用程序.              bootloader其实就是一个单片机程序,一般采用开发的语言是汇编和C语言,但是不同的硬件平台下的boot是不同的.booloa

uboot移植之uboot中的SD卡驱动解析

1:地址对硬件操作的影响 (1)操作系统(指的是linux)下MMU肯定是开启的,也就是说linux驱动中肯定都使用的是虚拟地址.而纯裸机程序中根本不会开MMU,全部使用的是物理地址.这是裸机下和驱动中操控硬件的一个重要区别. (2)uboot早期也是纯物理地址工作的,但是现在的uboot开启了MMU做了虚拟地址映射,这个东西驱动也必须考虑.查uboot中的虚拟地址映射表,发现210开发板里面,除了0x30000000-0x3FFFFFFF映射到了0xC0000000-0xCFFFFFFF之外,

u-boot中分区和内核MTD分区关系

一.u-boot中环境变量与uImage中MTD的分区关系 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 一般我们只需要分3-4个区,第一个为boot区,一个为boot参数区(传递给内核的参数),一个为内核区,一个为文件系统区.(但是有的内核就会有很多分区,比如内核参数会有两个,还有会Logo的地址) 而对于bootloader中只要能将内核下载到A~B区的A地址开始处就可以,C~D区的C起始地址下载文件系统…….这些起始地

tiny4412 串口驱动分析 --- u-boot中的串口驱动

作者:彭东林 邮箱:[email protected] 开发板:tiny4412ADK+S700 4GB Flash 主机:Wind7 64位 虚拟机:Vmware+Ubuntu12_04 u-boot:U-Boot 2010.12 Linux内核版本:linux-3.0.31 Android版本:android-4.1.2 我们以tiny4412为例分析串口驱动,下面我们从u-boot开始分析,然后再分析到Linux. 串口初始化 关于这部分代码流程参考件:tiny4412 u-boot 启动

U-Boot中支持USB

转载: http://blog.csdn.net/qiurihuanghua/article/details/6234832 今天查看了一下在P4080DS板子的U-Boot中支持USB,主要是加入USB Host端驱动和相应设备端驱动来支持存储设备,这样就 可以将Kernel以及文件系统存放在U盘上,来通过U盘来启动. 跟其它接口一样,在U-Boot中,USB的支持也是通过放在相应板子上的几个宏定义来实现,对于P4080DS板,是在include/configs/corenet_ds.h定义:

uboot中变量env(收集)

Env在u-boot中通常有两种存在方式,在永久性存储介质中(flash.NVRAM等),在SDRAM中.可配置不适用env的永久存储方式,但不常用.U-boot在启动时会将存储在永久性存储介质中的env重新定位到RAM中,这样可以快速访问,同时可以通过saveenv将RAM保存到永久性存储介质中. 相关结构体 env_t定义于include/environment.h中 typedef struct environment_s { uint32_t crc; /* CRC32 over dat

uboot中添加FIQ中断及相关问题

本文主要说明了在uboot中添加FIQ中断时遇到的问题以及对应的解决办法. 首先交代一下项目的软硬件环境.硬件方面,使用s3c2440作为主控芯片,外接串口.网卡等设备.软件方面,主控芯片上电后运行uboot程序,之后通过网口在线烧写应用程序至RAM中运行.为了使设备始终处于可控状态,需要分别在uboot及应用程序之中添加遥控程序,遥控程序使用FIQ中断来实现.uboot程序的修改主要在\arch\arm\cpu\arm920t\start.s文件及arch\arm\lib\board.c文件中

u-boot中添加mtdparts支持以及Linux的分区设置

简介 作者:彭东林 邮箱:[email protected] u-boot版本:u-boot-2015.04 Linux版本:Linux-3.14 硬件平台:tq2440, 内存:64M   NandFlash: 256MB 下面我们分两部分,u-boot和kernel,首先介绍u-boot中是如何支持mtdparts的,然后简单分析Linux内核设置分区的两种方式: 方式一 在平台代码中写死,然后在初始化NandFlash的时候设置. 方式二 在u-boot中设置,这个比较灵活,u-boot将