sculida 发表于 2013-10-17 11:51

uboot的环境变量保存在哪?

小弟初学嵌入式,一窍不通,还请各位前辈多多指教。能够提点一二,小弟亦感激不尽
------------------------------------------------
硬件:arm9 mini2440
-------------------------------------------------
这样是可以正常启动的:
uboot.bin装在norflash的0x00位置,linux的uimage(就是包含0x40的头的那个)装在nandflash的0x60000位置。文件系统装在0x560000位置。
其中,uboot的某个环境变量是bootargs=noinitrd root=/dev/mtdblock3 rw rootfstype=yaffs2 console=ttySAC0,115200 init=/linuxrc mem=64M
------------------------------------------------
我将该环境变量更改为
setenv bootargs 'noinitrd root=/dev/mtdblock3 rw rootfstype=yaffs2 console=fb0,115200 init=/linuxrc mem=64M'(为了将串口让作它用)
不saveenv,可以正常启动linux启动。
但是如果saveenv,uboot就会提示
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 --   0% complete.-----------------------问题1
Writing to Nand... done
这里似乎是把环境变量存在nandflash里了。
接着启动内核,uboot提示
NAND read: device 0 offset 0x60000, size 0x267000
2519040 bytes read: OK
Wrong Image Format for bootm command
ERROR: can't get kernel image!
如此,似乎是找不到内核了。
---------------------------------------------
问题1:
uboot的环境变量保存在哪了?nandflash总共256mb(0x1000000个字节),哪来的存在0x6000000000002那个位置
--------------------------------------------
问题2:
从何处得知uboot的环境变量的保存位置,我翻看了不少书本,都没有找到。还请高手提点一下,大概是在什么目录下的文件有此设置
--------------------------------------------
问题3:
不少书籍上都写着flash分为四段,分别是bootloader,参数区,内核映像,文件系统。请问这个参数区是不是uboot保存环境变量的地方?抑或是uimage那个0x40字节的头?

lelee007 发表于 2013-10-19 08:58

接着启动内核,uboot提示
NAND read: device 0 offset 0x60000, size 0x267000
2519040 bytes read: OK
Wrong Image Format for bootm command
ERROR: can't get kernel image!
-----------------------------------------------------
这个来看,很明显是放在flash里边的image头被踩了

0x60000   00000002,去掉后面32bit,刚好是0x60000,就是放image的开始处哈,你看看你代码里边环境变量是不是就是存放在该处了

jew900711 发表于 2013-10-19 12:49

环境变量保存的位置出错了。。。看看nandflash的分区表吧。。bootloader :parameter:linuxkernel:filesystem

myforever 发表于 2013-10-19 22:52

具体的地址在uboot的源码里面可以查到

从错误看,是环境变量的区域覆盖了系统内核了

sculida 发表于 2013-10-20 16:51

感谢三位前辈的热心赐教。不知朋友们能否为我提点一下问题2和问题3。
小弟在此多谢各位了!

arm-linux-gcc 发表于 2013-10-20 20:02

修改你的uboot配置文件include/configs/xxx.h,找到
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET
#define CONFIG_ENV_SIZE

然后重新编译uboot

sculida 发表于 2013-10-21 08:11

回复 6# arm-linux-gcc
Thank you very much!


   
页: [1]
查看完整版本: uboot的环境变量保存在哪?