高级会员
- 积分
- 865
- 金钱
- 865
- 注册时间
- 2012-11-16
- 在线时间
- 65 小时
|
10金钱
32.2.5 board_init_f函数详解
初始化 gd 的各个成员变量,uboot 会将自己重定位到 DRAM 最后面的地址区域,也就是将自己拷贝到 DRAM 最后面的内存区域中。这么做的目的是给 Linux 腾出空间,防止 Linuxkernel 覆盖掉 uboot,将 DRAM 前面的区域完整的空出来。在拷贝之前肯定要给 uboot 各部分分配好内存位置和大小,比如 gd 应该存放到哪个位置,malloc 内存池应该存放到哪个位置等等。这些信息都保存在 gd 的成员变量中,因此要对 gd 的这些成员变量做初始化。最终形成一个完整的内存“分配图”,在后面重定位 uboot 的时候就会用到这个内存“分配图”。
上面是原子哥imx6 嵌入式Linux驱动开发指南中讲解uboot流程中的一段话,对于上面红色部分不太理解,有两个疑问如下。
1.首先uboot为什么不一开始就把链接设置到DRAM的后面地址呢?反正后面要重定位到DRAM地址的最后面区域,我为啥不一开始链接地址就设置到后面,这样不就可以不重定位了吗?
2.为什么要给linux腾出空间防止Linux kernel覆盖uboot, uboot跳转到linux kernel之后 uboot就不需要了,为什么要担心Linux kernel覆盖掉uboot
|
最佳答案
查看完整内容[请看2#楼]
uboot为什么不一开始链接到最后面的位置?那是因为根本就没法预测你的DDR范围有多大,不同的板子DDR大小不同,地址范围就不同,但是对于一款芯片而言,DDR的起始地址确实定的。
|