uboot全局变量
一、global_data(include/asm-arm/global_data.h)
typedef struct global_data {
bd_t *bd;
unsigned long flags;
unsigned long baudrate;
unsigned long have_console; /* serial_init() was called */
unsigned long reloc_off; /* Relocation Offset */
unsigned long env_addr; /* Address of Environment struct */
unsigned long env_valid; /* Checksum of Environment valid? */
unsigned long fb_base; /* base address of frame buffer */
#ifdef CONFIG_VFD
unsigned char vfd_type; /* display type */
#endif
#if 0
unsigned long cpu_clk; /* CPU clock in Hz! */
unsigned long bus_clk;
unsigned long ram_size; /* RAM size */
unsigned long reset_status; /* reset status register at boot */
#endif
void **jt; /* jump table */
} gd_t;
include/asm-arm/global_data.h,定义了全局变量指针r8,可以说全局变量区不像普通变量可以用变量名访问,它只能用指针访问。
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r8")
r8在start_armboot(lib_arm/board.c)函数的开始处赋值
/* Pointer is writable since we allocated a register for it */
gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));
通过计算便能得到r8的值,不同的开发板配置可能不一样,但是算法是一样的,这里算得的结果是0x33f4ffdc。从内存中查看到底存的是什么东东。

1、bd =>>0x33f4ffb8,bd指针
2、flag =>>0x02
3、 baudrate =>>0x0001c200=115200,串口波特率
4、have_console =>>0x01
5、reloc_off =>>0x0
6、env_addr =>>0x33f5a164,环境变量的分配内存地址,这个值在堆区
7、 env_valid =>>0x01,环境变量已经设置完成
8、fb_base =>>0x0,显示器缓冲区
9、jt =>>0x33f61bc0,跳转函数表指针
总共:36 Bytes
二、bd_info (include/asm-arm/u-boot.h)
typedef struct bd_info {
int bi_baudrate; /* serial console baudrate */
unsigned long bi_ip_addr; /* IP Address */
unsigned char bi_enetaddr[]; /* Ethernet adress */
struct environment_s *bi_env;
ulong bi_arch_number; /* unique id for this board */
ulong bi_boot_params; /* where this board expects params */
struct /* RAM configuration */
{
ulong start;
ulong size;
} bi_dram[CONFIG_NR_DRAM_BANKS];
#ifdef CONFIG_HAS_ETH1
/* second onboard ethernet port */
unsigned char bi_enet1addr[];
#endif
} bd_t;

1、 bi_baudrate=>>0x0001c200,串口波特率
2、 bi_ip_addr=>>0x6e00000a,ip地址
3、 bi_enetaddr=>>0x00000000 、0x00000000
注意:它虽然需要6个字节,但编译器对齐分配的时候取了8个字节
4、bi_env=>>0x0
5、 bi_arch_number=>>0xc1,机器码,对应着MACH_TYPE_S3C2410
6、bi_boot_params=>>0x30000100,启动参数
7、 bi_dram[CONFIG_NR_DRAM_BANKS],DRAM信息
smdk2410中定义CONFIG_NR_DRAM_BANKS为1
1> start=>>0x30000000,DRAM起始地址
2> size=>>0x04000000,DRAM大小
总共:36 Bytes
三、environment_s(include/environment.h)
typedef struct environment_s {
unsigned long crc; /* CRC32 over data bytes */
#ifdef CFG_REDUNDAND_ENVIRONMENT
unsigned char flags; /* active/obsolete flags */
#endif
unsigned char data[ENV_SIZE]; /* Environment data */
} env_t;
1、crc
crc校验值如图所示为0x48ec48fd

2、环境变量打印效果
所有的环境变量打印的效果,打印的顺序是依据其在内存中排放的先后顺序

65532为分配的环境变量区大小,127是当前使用大小
3、环境变量完整内存
环境变量对应的二进制内存值

结论:
1>一个环境变量以“空”结束
2>每个环境变量等号前边的是其名字,等号后边的是其值(值也是以字符串存储在内存中,计算机真正使用
还需要转换)
3>所有环境变量的最后边以“空”结束
uboot全局变量的更多相关文章
- uboot启动linux的过程
一.概述 linux内核镜像常见到的有两种形式,zImage和uImage.这两种文件的格式稍有差别,所以启动这两种格式的内核镜像也会有所不同.目前,uboot只支持启动uImage类型的镜像,对zI ...
- U-boot 启动内核
1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU不能直接从块设备中执行代码,需要把块设备中的程序复制到内存中,而复制之前还需要进行很多初始化工作, ...
- 【转】UBOOT——启动内核
转自:https://www.cnblogs.com/biaohc/p/6403863.html 1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU ...
- u-boot源码分析之C语言段
题外话: 最近一直在学习u-boot的源代码,从代码量到代码风格,都让我认识到什么才是真正的程序.以往我所学到的C语言知识和u-boot的源代码相比,实在不值一提.说到底,机器都是0和1控制的.感觉这 ...
- u-boot源码汇编段简要分析
Hi,大家好!我是CrazyCatJack,你们可以叫我CCJ或者疯猫.今天我给大家带来的是u-boot的源代码汇编段分析,以后还会给大家讲解后续的C代码,请持续关注哦^_^ 先简单说一下u-boot ...
- uboot的配置流程分析
简单介绍一下uboot的基本配置流程.和绝大多数源码编译安装一样,uboot在执行make之前需要执行make XXXconfig来配置相关信息,而且uboot本身是针对多种平台的bootloader ...
- uboot 第三天学习
make jCPU_NUM 以CPU_NUM数量同时进行编译CPU_NUM = 当前PC的处理器数量*处理器的核心数 从上电开始1.系统上电,执行固化在IROM中的代码,目的初始化基本的系统功能,已经 ...
- 第二天-uboot学习
源码阅读方法1.源码目录结构2.配置(支持当前使用的硬件)3.编译(Makefile)4.启动流程 工具使用1.在同一文件查找 shitf+8 N n进行上下查找 2.在工程目录中 ctags ubo ...
- uboot
******************************************day:2014/10/14**************************uboot************* ...
随机推荐
- js 日期插件 datepicker
点击图片出现 时间 ,增加一个点击事件 <label for="" class="width80">创建日:</label> < ...
- struts2环境搭建和第一个程序
环境搭建 项目目录 导入依赖jar包,如上图lib目录所示. 不同的版本可能会不一样,没关系在tomcat启动时,如果报错java.lang.ClassNotFoundException,我们可以按照 ...
- oninput,onpropertychange,onchange的用法和区别
1.前言 由于工作需要,需实现一个类似于微博输入框的功能,在用户动态输入文字的时候,修改提示“您还可以输入XX字”.如下图所示: 因此,稍微研究了一下oninput,onpropertychange, ...
- ThreadLocal 和Synchronized
并发都用到, 两个都是解决了线程并发问题,区别呢? Synchronized 同步机制, 共有变量被多个线程使用,会出现线程不安全,所以,加锁,锁机制很多种,例如Synchronized, lock ...
- macos 配置 golang 开发环境
初次接触golang这门编程语言,一下子就喜欢上了,语法简洁优雅,对于以前有c/c++编程经验的人来说会更加有亲切感. 仅仅学习了一天就能应用beego框架和mogodb数据库开发一个rest api ...
- WAMP不能启动MYSQL服务
突然不知道怎么整的,就把wamp的mysql服务整个不能启动,忧桑. 点击重启Mysql服务: PHP集成环境WAMP中MYSQL的服务wampmysqld无法启动,总是提示 错误1067:进程意外终 ...
- innodb_space工具解析 MYSQL 页图解
- Qt学习之路(34): 国际化(下)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://devbean.blog.51cto.com/448512/245063 上次 ...
- HDU2088JAVA
Hot~~招聘——巴卡斯(杭州),亚信科技,壹晨仟阳(杭州) Box of Bricks Time Limit: 1000/1000 MS (Java/Others) Memory Limit: ...
- Java基础知识强化之网络编程笔记06:TCP之TCP协议发送数据 和 接收数据
1. TCP协议发送数据 和 接收数据 TCP协议接收数据:• 创建接收端的Socket对象• 监听客户端连接.返回一个对应的Socket对象• 获取输入流,读取数据显示在控制台• 释放资源 TCP协 ...