1关于VIVI中调试U-BOOT的问题
Q:刚才在网上搜索资料的时候看到可以vivi加载u-boot.bin文件到SDRAM中调试的问题。
以下是我的想法,不知有没有什么问题呢。
1、u-boot中通过设置宏:
CONFIG_SKIP_LOWLEVEL_INIT
CONFIG_RELOCATE_UBOOT
这样,start.S中
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
bl cpu_init_crit
#endif
cpu_init_crit则不会执行。
并且会执行#ifndef
CONFIG_SKIP_RELOCATE_UBOOT 下面的代码后再进入_start_armboot 。
2、由于打算利用vivi来加载boot.bin(在没有移植nand
flash驱动之前,调试u-boot这样做应该还是有意思的吧?)
刚才u-boot.bin加载到SDRAM后就不能进行lowlevel_init
初始化。所以需要在vivi中配置好vBWSCON、vBANKCON等寄存器,以准备SDRAM或者网卡配置的需要。
3、使用vivi的load命令加载u-boot.bin到SDRAM
load ram 0x30008000 x
4、跳转到u-boot
go
0x30008000
不知道这样做能不
能行得通?是否重新部署u-boot的存储地址呢?
A:
1. u-boot编译时,它的运行地址必须是0x30008000
2.
vivi的运行地址在哪?好像在高位置,vivi和u-boot的位置不冲突就行
肯定要重新部署u-boot的存储地址,它原来也是在内
存的高位置。
用vivi来调试u-boot是挺有意思,u-boot没用到中断,所以这个方法可行!
S:
试验了一下,在smdk2410.h中添加
#define CONFIG_SKIP_LOWLEVEL_INIT 1
#define
CONFIG_SKIP_RELOCATE_UBOOT 1
然后重新编译u-boot_new.bin
1、
把之前移植了网卡驱动,并且支持从Nand flash启动的的u-boot_old.bin先烧录到SDRAM中
2、tftp
30008000 u-boot_new.bin
3、go 30008000
这样就可以看到串口打印信息了,说明这样调试还是可
行的。
可以利用厂家预先做好的bootloader来调试u-boot
===========================
README
中的说明:
- CONFIG_SKIP_LOWLEVEL_INIT
- CONFIG_SKIP_RELOCATE_UBOOT
[ARM only] If these variables are defined, then
certain low level initializations (like setting up
the memory
controller) are omitted and/or U-Boot does
not relocate
itself into RAM.
Normally these variables MUST NOT be
defined. The
only exception is when U-Boot is loaded (to RAM)
by
some other boot loader or by a debugger which
performs these intializations itself.
用uboot调试uboot肯定是可以的,我以前也干过
CONFIG_SKIP_LOWLEVEL_INIT
这2个宏一定是要定义的,主
要是由于SDRAM的初始化只能有一次。
CONFIG_SKIP_RELOCATE_UBOOT
这个宏可以定义,也可以不用定义,如果定义了这个宏,那么uboot编译的地址和运行地址必须是一致的(因为没有代码搬移了),如果没有定义该宏,那么编译地址和载入到内存的地址必须是不一致的,而且不能有重叠,因为程序会把自己拷贝到要运行的地址,如果有重叠那肯定挂了。
最重要的是调试
uboot用到的地址千万不要和旧的uboot堆栈和程序空间重叠,要不然跑不了。
VIVI中调试U-BOOT注意:
还要注意两点:
1. u-boot的连接地址不要与vivi所用内存重合,否则下载不了:下载时就破坏了VIVI
2.
编译u-boot时,定义CONFIG_SKIP_LOWLEVEL_INIT──否则它会重新设置memory控制器等,这将导致SDRAM中的数据丢
失
阅读(3482) | 评论(0) | 转发(0) |