S5PV210-uboot解析(三)-start_armboot解析
CFG_UBOOT_SIZE
|
宏定义的uboot大小(2MB)
实际上只有200多KB
|
gd_base
|
全局变量的区域
|
内存间隔
|
|
CFG_STACK_SIZE
|
栈区
|
CFG_MALLOC_LEN
|
堆区
|
CFG_UBOOT_BASE
|
uboot基地址
|
static void mem_malloc_init (ulong dest_addr)
{
mem_malloc_start = dest_addr;
mem_malloc_end = dest_addr + CFG_MALLOC_LEN;
mem_malloc_brk = mem_malloc_start;
memset ((void *) mem_malloc_start, 0,
mem_malloc_end - mem_malloc_start);
}
|
这个函数是用来初始化堆管理器的。CFG_MALLOC_LEN就是堆的大小,有896KB。
|
drivers/mmc/mmc.c
int mmc_initialize(bd_t *bis)
{
struct mmc *mmc;
int err;
INIT_LIST_HEAD(&mmc_devices);
cur_dev_num = 0;
if (board_mmc_init(bis) < 0)
cpu_mmc_init(bis);
#if defined(DEBUG_S3C_HSMMC)
print_mmc_devices(',');
#endif
#ifdef CONFIG_CHECK_X210CV3
mmc = find_mmc_device(1);//lqm
#else
mmc = find_mmc_device(0);
#endif
if (mmc) {
err = mmc_init(mmc);
if (err)
err = mmc_init(mmc);
if (err) {
printf("Card init fail!\n");
return err;
}
}
printf("%ldMB\n", (mmc->capacity/(1024*1024/(1<<9))));
return 0;
}
|
drivers/mmc/mmc.c
这段代码主要初始化的操作是这一段:
if (board_mmc_init(bis) < 0)
cpu_mmc_init(bis);
跳转到board_mmc_init后
static int __def_mmc_init(bd_t *bis)
{
return -1;
}
int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
board_mmc_init 后面的__attribute__((weak, alias("__def_mmc_init"))); 表示
board_mmc_init 是 __def_mmc_init 的一个别名。而__def_mmc_init 返回-1,小于0,所以
初始化的时候实际执行的是cpu_mmc_init。
|
cpu/s5pc11x/cpu.c
int cpu_mmc_init(bd_t *bis)
{
#ifdef CONFIG_S3C_HSMMC
setup_hsmmc_clock(); //设置时钟
setup_hsmmc_cfg_gpio(); //设置GPIO
return smdk_s3c_hsmmc_init();
#else
return 0;
#endif
}
|
将无效的宏定义去掉后:
void env_relocate (void)
{
DEBUGF ("%s[%d] offset = 0x%lx\n", __FUNCTION__,__LINE__,
gd->reloc_off);
if (gd->env_valid == 0) {
set_default_env();
}
else {
env_relocate_spec ();
}
gd->env_addr = (ulong)&(env_ptr->data);
}
|
这样比较清楚的看到由于gd->env_valid的值是等于0的,所以执行的默认设置环境变量函数是
set_default_env:
void set_default_env(void)
{
if (sizeof(default_environment) > ENV_SIZE) {
puts ("*** Error - default environment is too large\n\n");
return;
}
memset(env_ptr, 0, sizeof(env_t));
memcpy(env_ptr->data, default_environment,
sizeof(default_environment));
#ifdef CFG_REDUNDAND_ENVIRONMENT
env_ptr->flags = 0xFF;
#endif
env_crc_update ();
gd->env_valid = 1;
}
可以看到第一次启动的时候uboot会使用默认的环境变量,用memset和memcpy进行清零后复制。
之后就把gd->env_valid赋值1,即有效。
|
S5PV210-uboot解析(三)-start_armboot解析相关推荐
- Disruptor源码解析三 RingBuffer解析
目录 系列索引 前言 主要内容 RingBuffer的要点 源码解析 系列索引 Disruptor源码解析一 Disruptor高性能之道 Disruptor源码解析二 Sequence相关类解析 D ...
- vue+axios+qs序列化 “三步解析”【含demo实例】- 代码篇
文章目录 qs序列化:是什么?为什么?怎么办?`实例截图参考` 一.`(简单了解)` · `三步解析 ` 序列化是一种用来处理对象流的机制: 对象.文件.数据,有许多不同的格式,很难统一传输和保存 序 ...
- xml文件的三种解析方式 DOM SAM PULL
<?xml version="1.0" encoding="UTF-8"?> <root><student id="1& ...
- xml的三种解析方式
本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...
- Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- 碰撞检测GJK算法论文解析三
碰撞检测GJK算法论文解析三 再探Appendix Ⅱ 内容详解 再探The Distance Subalgorithm 内容详解 过程1 过程2 过程3 这里要先纠正上篇文章的一些错误,就是上篇文章 ...
- 北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单
北京络捷斯特第三方物流信息系统技术解析(三) 订单录入-出库订单 2.1.2 出库订单 出库订单包括有订单信息.订单出库信息.订单货品三个标签页的信息编写. 订单信息界面截图: 2.1.2图(1) 订 ...
- JSON的三种解析方式以及JSONObject、JSONArray区别
JSON的常用两种解析方式 一.什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串 ...
- 用python解析xml的几种方法,Python_XML的三种解析方法
什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...
最新文章
- 影像组学视频学习笔记[44(End)]-带95%置信区间的折线图、Li‘s have a solution and plan.
- 性价比高出英特尔45%,亚马逊的云服务器芯片如何做到?| 解读
- Java FAQ(1)
- 定价相关的主要用户出口
- 扔掉老破V100、A100,英伟达新一代计算卡H100来了!
- Java并发编程实战~Worker Thread模式
- OSGI概念理解和入门
- WPF datagrid 加入图片
- C语言嵌入式系统编程修炼之道——软件架构篇
- word文档图标变成白纸_win10word文档图标变白,win10office图标空白
- Matlab导入外部数据绘制函数曲线
- Haskell语言学习笔记(75)Conduit
- 暴雪和黑客的战争二:暴雪的第一击
- 期货市场之反转形态分析
- pg_stat_database的字段tup_returned,tup_fetched含义
- ecm、ppp、ndis 拨号
- 千锋Unity学习笔记
- linux快速删除大量目录,Linux 快速删除大量小文件方法
- dbms chapter3
- STC 纯硬件自动下载电路 V2