没有合适的资源?快使用搜索试试~ 我知道了~
UBoot支持双启动(Nor and Nand)及环境变量保存的实现
资源详情
资源评论
资源推荐
UBoot
支持双启动
(Nor and Nand)
及环境变量保存的实现
分类:嵌入式开发 2011-09-20 11:49145 人阅读评论(0)收藏举报
本文所要讲述的是如何使 UBoot 只编译一次就能支持从 Nor Flash 和 Nand Flash 启动,并
且在保存环境变量时能够保存在其所在的 Flash 中.
注意,本文针对的为 S3C2410 芯片,其他芯片原理相同,可在适当修改代码后进行移植.
我们知道 UBoot 源码本身直接支持从 Nor Flash 启动,这是 Nor Flash 的可执行特性决定的.
而针对 Nand Flash,则涉及到前 4K 数据的问题.S3C2410 的 Nand Flash 控制器有一个特殊
的功能,就是能在上电后自动将 Nand Flash 中的前 4K 数据搬移到 4K 内部的 RAM 中,并把
0x00000000 设置为内部 RAM 的起始地址,然后 CPU 从内部 RAM 的 0x000000 位置启动,
该过程由硬件自动完成.
所以,要使 UBoot 支持从 Nand Flash 启动,必须在其前 4K 代码执行过程中完成将自身复制
到 RAM 中的工作.
但是,我们现在需要让 UBoot 支持双启动,现在的问题就是该如何判断 UBoot 是在 Nor Flash
还是在 Nand Flash 中呢?呵呵,在 S3C2410(S3C2440)中,这个可以通过 BWSCON(BUS
WIDTH & WAIT CONTROL REGISTER)控制寄存器[2:1]的值进行判断,如果为 00 则表示
是从 Nand Flash 启动的.因此,我们可以直接通过如下代码进行判断并在 BWSCON[2:1]为
00 时跳转到 UBoot 复制自身(copy_myself)的代码处:
view plain
1. #defineBWSCON0x48000000
2. ldrr0,=BWSCON
3. ldrr0,[r0]
4. andsr0,r0,#6@判断 BWSCON[2:1]是否为 00,如果是,则跳转到
copy_myself
5. beqcopy_myself
好了,双启动问题算是解决了,但是新的问题又来了,这个环境变量又应该如何保存呢?是都保
存到 Nor Flash 还是 Nand Flash 呢?当然,最好的方式还是保存到各自所在的 Flash 中.这个
可以设置一个标志,在进入 Nand Flash 启动代码时设置该标志,表示从 Nand Flash 启动,然
后,在保存环境变量时通过该标志的值判断是调用 Nor Flash 的保存方法还是 Nand Flash 的
保存方法.
下面讲解具体的修改过程(以 u-boot-2010.09 为例).
首先,修改 include/configs/smdk2410.h 文件,添加如下宏定义:
倚天照海ww
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0