uboot环境变量不能保存的调试

在使用小u启动的板子上,遇到uboot无法保存环境变量的问题。调试过程包括修改配置文件、深入代码排查、尝试使用仿真器调试。最终发现是代码优化过度导致,通过将芯片指针设为volatile类型解决了问题。
摘要由CSDN通过智能技术生成

在我的板子上设计了2个uboot,分为大小u-boot。小u用于启动,因为程序小,所以速度快,而且适合放在单个块(128K)中.大u包含网络,功能全面。

在实际的启动过程中,小u出现不能保存环境变量的问题,本文用于记述我的调试过程。

出现该问题首先想到的是修改配置文件,把所有更flash env相关的配置宏全部找了一遍,并且做了各种各样的组合尝试。以失败告终。

接下来只好深入代码去查找原因,发现出错是因为

Attempt to write not page aligned data

查看语句得知,这个主要是


进一步的跟踪变得异常困难,主要的问题在于:当我想通过printk函数打印一些输出时,可执行程序经常启动不起来。尤其是在出错语句附近,每次加printk语句都会导致系统启动失败(启动到printk时打印不出东西,然后还挂死在该语句上)。百思不得其解,直至现在尚未搞清。

于是想到用仿真器调试。BDI仿真器可以单步执行语句,同时也可以配合GDB(DDD)进行调试,具体方法建另一篇文章。但是悲哀的发现,没有办法直接通过BDI加载代码,因为要想通过BDI加载的前提就是BDI先要初始化DRAM,使得程序可以先放在RAM中。对我目前所用芯片(DM8148)的初始化会涉及不少寄存器,但我查遍身边的资料,都没有发现这些寄存器定义,况且,调试这个部分也挺费时间。

那么不用仿真器加载,只是用仿真器控制或者查看,是否可以呢。答案是可以的。我们可以连上仿真器,同时通过flash正常启动,这个时候分别有2个过程同时进行。1)板子通过Nand flash正常启动,程序被加载到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值