uboot,我对你是即爱又恨啊,你当时整了我几近三个多月。还没整理到uboot,看到的好文章先mark一下,以后整理的时候用到。
转自:http://www.eefocus.com/ayayayaya/blog/10-10/196848_87e6f.html
——华清远见曹忠明
前面我们说过是u-boot同时支持nand flash启动和nor flash启动,可是这个时候就有个环境变量的保存位置的问题了。假如我们设置为环境变量保存在nand上,nor启动时虽然保存环境变量的空间之前有一段空间浪费了,但不会有什么问题,但是假如我们设置为环境变量保存在nor上,nand启动就根本不能访问这段空间更谈何保存环境变量了,理想的情况是更加不同的flash启动把环境变量保存在相应的flash上。那么这是如何实现的呢?
在说如何实现之前我们先把相关的文件列出来(以S3C2410为例):
cpu/arm920t/start.S /*用来判断是那种方式启动并实现自搬移*/
include/configs/smdk2410.h /*smdk2410配置文件*/
common/env_flash.c/*nor flash环境变量相关文件*/
common/env_nand.c/*nand flash环境变量相关文件*/
1.首先我们在include/configs/smdk2410.h中添加如下代码
#defineCONFIG_ENV_IS_IN_NAND1
#defineCONFIG_ENV_IS_IN_FLASH1
添加上面两句话是为了确保common/env_flash.c和common/env_nand.c中的内容被编译进uboot,并且添加这两种情况环境变量保存位置信息:
#ifdefCONFIG_ENV_IS_IN_FLASH1
#defineCONFIG_ENV_ADDR(CONFIG_SYS_FLASH_BASE + 0x30000)
#endif
#ifdefCONFIG_ENV_IS_IN_NAND1
#defineCONFIG_ENV_SIZE0x10000
#defineCONFIG_ENV_OFFSET0x30000
#endif
2.标志位的设定
在这里我们我们要设置一个标志位用来标识是nor启动还是nand启动。我们在common/nand.c中添加这个标志位的定义
volatile intpbootflag=1; //add by lht1->nor0->nand
然后我们在cpu/arm920t/start.S导入这个变量并判断是nor启动还是nand启动设置这个标志位的值
# define BWSCON0x48000000
dr r0,=BWSCON
ldr r0,[r0]
ands r0,r0,#6
beq nand_boot
/***********/
Nor自搬移代码
/***********/
nand_boot:
ldrr0, =pbootflag
mov r1, #0x0
strr1, [r0]/*设置pbootflag的值为0表示为nand启动*/
/***********/
Nand自搬移代码
/***********/
3.环境变量的保存
通过第一步的操作后,我们的系统中就会有两个env_init函数、saveenv函数和env_relocate_spec函数在common/env_flash.c和common/env_nand.c中,在我们执行saveenv或者在uboot启动是环境变量重定位的时候就有问题了,为了解决这个问题我们做如下操作。
首先我们把common/env_flash.c中的env_init函数、saveenv函数和env_relocate_spec函数分别改名为nor_env_init函数、nor_saveenv函数和nor_env_relocate_spec函数。
然后我们需要修改common/env_nand.c中的saveenv函数和env_relocate_spec函数为:
修改int env_init(void)函数在函数开始添加如下内容:
if(pbootflag==1)
{
env_name_spec = "NOR";
env_ptr=(env_t *)CONFIG_ENV_ADDR;
return nor_env_init();
}
修改intsaveenv(void)函数,在函数开始添加如下内容
if(pbootflag==1)
{
env_name_spec = "NOR";
return nor_saveenv();
}
修改void env_relocate_spec (void)函数,在函数开始添加如下内容
if(pbootflag==1)
{
return nor_env_relocate_spec();
}
这个时候我们的uboot就能够同时支持nor flash启动和nand flash启动并能够把环境变量保存在相应的flash上。
相关推荐
黄刚-u-boot-2009.08-nand flash-mini2440本次移植的功能特点包括: 支持Nand Flash读写 支持从Nor/Nand Flash启动 支持CS8900或者DM9000网卡 支持Yaffs文件系统 支持USB下载等 。。。。
s3c2410开发板u-boot移植详细配置nandflash启动
u-boot1.1.6在mini2440上nor和nandflash启动,分norflash和nandflash启动做了详尽的移植分析
U-BOOT从NAND Flash启动的实现,王磊,何小刚,U-BOOT是一款功能强大的引导装载程序,但不支持从NAND flash启动。针对这一点本文提出了一种使其支持从NAND flash启动的方法。本文分析了U
本人原创, 最新u-boot-2012.07 mini2440基于nandflash启动的移植, 新鲜出炉, 与旧版本不同, 本资源是基于nand_boot函数移植的, 应该说这种移植方法才是u-boot官方推荐的nandflash启动方法。 不多吹了, 见运行...
详细的nand支持 保证节省了自己的开发时间
RISC-V U-Boot启动流程图.pdf
u-boot2017.01启动过程分析,以ppt的方式对uboot2017.11的启动过程进行分析,主要分析了启动过程函数的调用过程
◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 ◆ common:与体系结构无关的文件,实现各种命令的C文件。 ◆ cpu:CPU相关文件,其中的子目录都是以U-...
本文为U-Boot启动参数的解析,分别讲述了: (1) SD卡启动脚本 (2) SD卡 (3) NAND FLASH (4) SPI FLASH
本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上: ...实现了NOR Flash和NAND Flash启动,网络功能。 这些认识源于自己移植u-boot过程中查找的资料和对源码的简单阅读。下面主要以smdk2410为分析对象。
u-boot-sunxi-with-spl-vga
S3C2410被配置成从NAND闪存启动,上电后,S3C...根据U-BOOT的执行流程图,可知要实现从NAND闪存中启动U-BOOT,首先需要初始化NAND闪存,并从NAND闪存中把U-BOOT搬移到RAM中,最后需要让U-BOOT支持NAND闪存的命令操作。
开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数。函数调用顺序如图6.3所示。 看一下board/smsk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是cpu/arm920t/...
2、自动识别S3C2440的启动方式,并能够将环境变量的保存到对应的位置 3、支持网卡芯片DM9000 4、支持不同NAND Flash的读写,并自动识别所使用的nand flash是512B/page还是2KB/page,实现在64MB\128MB\256MB\1GB NAND...
u-boot-1.1.6.tar.bz2:未经修改的u-boot-1.1.6源码 u-boot-1.1.6_jz2440.patch: 支持JZ2440的u-boot-1.1.6补丁
U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBS D, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, ...
u-boot200901 nand启动 2410 移植有一段时间了,不拿上来共享有点不好意思了
详细表述了移植u-boot1.1.6到2410,实现nor和nand双启动
包括: 1、解锁U-boot的固件openwr-ar71xx-generic-tl-wr741nd-v1-squashfs-factory.bin,功能简单,只为方便刷入不死U-boot 2、适用wr741nd-v1的不死U-boot及其升级版breed 3、刷入工具