Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85746
  • 博文数量: 22
  • 博客积分: 938
  • 博客等级: 准尉
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-16 21:27
文章存档

2010年(22)

我的朋友

分类: 嵌入式

2010-06-15 09:56:04

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中的数据丢 失
 
阅读(3434) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~