albert 发表于 2010-12-8 15:26:59

uboot 代码存放的位置???0X30000000地址解析???

每次做裸奔实验的时候,都是在nor模式下,在串口工具secureCRT界面下输入命令,然后用dnw工具用USB下载到0X30000000地址上的.....

我有些疑问:当切换到下载模式是,串口会在串口终端输出一系列的信息,提示我们怎样做。这表明开发板是已经有uboot的了,那么uboot存放在哪呢?因为,但我格式化nand Flash的时候,串口终端还能看到信息,说明uboot并没有因为nand Flash的格式化而删除了...难道说uboot存在在nor Flash中?

还有疑问的是: 配置USB下载工具时,地址是:0X30000000 ,这个地址是bank6的开始地址,是映射到SDRAM的空间的,但是我们下载的程序是下载到nand Flash上的,nand Flash映射的地址是bank0 ,开始地址是0x00000000。   只是说开发板启动时,硬件自动把nand Flash的前4K的代码复制到CPU内部的SRAM上运行罢了,。。。。。那么这样的话,这个0X30000000地址到底怎么解释?

天嵌_support1 发表于 2010-12-8 16:19:56

1# albert


我有些疑问:当切换到下载模式是,串口会在串口终端输出一系列的信息,提示我们怎样做。这表明开发板是已经有uboot的了,那么uboot存放在哪呢?因为,但我格式化nand Flash的时候,串口终端还能看到信息,说明uboot并没有因为nand Flash的格式化而删除了...难道说uboot存在在nor Flash中?

答:你是下载Uboot到Nand Flash,你从NandFLash启动后,uboot会被拷贝到SDRAM执行,就算你擦除了NandFlash,Uboot还是可以用。另外,你的NorFlash出产的时候是有uboot的

还有疑问的是: 配置USB下载工具时,地址是:0X30000000 ,这个地址是bank6的开始地址,是映射到SDRAM的空间的,但是我们下载的程序是下载到nand Flash上的,nand Flash映射的地址是bank0 ,开始地址是0x00000000。   只是说开发板启动时,硬件自动把nand Flash的前4K的代码复制到CPU内部的SRAM上运行罢了,。。。。。那么这样的话,这个0X30000000地址到底怎么解释?
答:程序是先下载到SDRAM中,然后通过nand write命令从SDRAM中拷贝存储到NandFlash的

albert 发表于 2010-12-8 16:58:03

哦,明白了很多部分你说的格式化nand Flash 后,uboot还能用,是在开发板还没重启或者说复位之前能用吧,因为这时还没断电,uboot还在SDRAM中存在。。。。如果说断电之后,重启,这时如果是从nand Flash启动的话,因为其内已经没uboot了,所以uboot不能用了,不知道我的理解正确不?

天嵌_support1 发表于 2010-12-8 17:47:09

3# albert


嗯,聪明的孩子

北上清云 发表于 2011-3-27 13:55:37

2# embedsky_lxt


这个问题也困扰我很久了
那我想问下:在linker选项时有RO地址的设置 这个跟DNW中地址的设置有什么关系呢 还有如果我把DNW的地址改成0可以吗
我对于程序的的存放以及地址问题一直很模糊 不知道到底程序是如何被存放 又是如何被执行的
是不是所以烧写到NAND中的程序都是先放到SDRAM中的呢

shufexiu 发表于 2011-3-28 10:01:45

这是uboot中的读写命令规定了的,你改为零会引起拷贝存储错误了

天嵌_support1 发表于 2011-3-28 14:11:18

:)

北上清云 发表于 2011-4-5 13:55:04

6# shufexiu


我想问下:如果我在NOR 中uBOOT界面中选择A 把程序烧写到NAND中,然后从NAND中启动,那么复位后PC是指向地址0处 还是指向|Image$$RO$$Base|。我记得我写了很简单的程序控制LED,烧写到NAND中,不管RO base设置成0或者0x3000000都能正常执行,为什么呢?如果设置成0x3000000,那么根据RO base得定义,程序应该从这个地址处开始执行啊,可是这个地址处有没有代码可以执行,简单程序如下IMPORT main
   AREA HEAD, CODE, READONLY
   ENTRY
   
    bldisable_watch_dog               (1)
blmemsetup                      (2)
blcopy_steppingstone_to_sdram      (3)   
ld pc, =on_sdram
on_sdram:            
ldr sp, =0x34000000         
    blmain
halt_loop
    b   halt_loop

disable_watch_dog

    mov r1,   #0x53000000
    mov r2,   #0x0
    str r2,   
    mov pc,   lr      
END
还有为什么我RO base的地址设置成什么 我查看反汇编时第一条指令的地址就是什么 如果是0还好理解 但是如果是0x30000000,我就不理解了 我是烧写到NAND中的 怎么会从0X300000开始呢?

还有对于RO base的地址的设置总是有疑惑:如果我把程序烧写到NAND中,如果程序中没有把代码复制到SDRAM中的代码段,那么我把地址设置成0X3000000可以吗,是不是只能设置成0。

天嵌_support1 发表于 2011-4-6 13:58:43

R0设置的是0x30000000,也就是SDRAM的起始地址,这个地址我理解就是告诉编译器,所以我们的程序只能在SDRAM里跑,而且地址是从0x30000000开始,所以如果这么设置,bin可执行文件一定要拷贝到0x30000000,否则就会产生错误。当然RO的意思就是指令和常量存放的起始地址。
如果设置了0x30000000,那么假如代码里有一个标号label,这个标号对应的地址就会从0x30000000开始算起,当你通过这个 label 绝对跳转的时候,就是跳转到0x30000000以上的内存的位置,所以说如果设置了0x300000000,但你你把代码放到SRAM里执行(SRAM的地址是0-4k),就会出错

yuzhigen1 发表于 2011-9-14 18:26:00

学习好东西……

songshaosheng 发表于 2011-10-13 22:26:32

这篇文章真的很难好
页: [1]
查看完整版本: uboot 代码存放的位置???0X30000000地址解析???