免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10558 | 回复: 6
打印 上一主题 下一主题

[BootLoader] uboot的环境变量保存在哪? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-17 11:51 |只看该作者 |倒序浏览
小弟初学嵌入式,一窍不通,还请各位前辈多多指教。能够提点一二,小弟亦感激不尽
------------------------------------------------
硬件: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字节的头?

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
2 [报告]
发表于 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的开始处哈,你看看你代码里边环境变量是不是就是存放在该处了

论坛徽章:
0
3 [报告]
发表于 2013-10-19 12:49 |只看该作者
环境变量保存的位置出错了。。。看看nandflash的分区表吧。。bootloader :parameter:linuxkernel:filesystem

论坛徽章:
0
4 [报告]
发表于 2013-10-19 22:52 |只看该作者
具体的地址在uboot的源码里面可以查到

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

论坛徽章:
0
5 [报告]
发表于 2013-10-20 16:51 |只看该作者
感谢三位前辈的热心赐教。不知朋友们能否为我提点一下问题2和问题3。
小弟在此多谢各位了!

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
6 [报告]
发表于 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

论坛徽章:
0
7 [报告]
发表于 2013-10-21 08:11 |只看该作者
回复 6# arm-linux-gcc
Thank you very much!


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP