在我的板子上设计了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正常启动,程序被加载到