天嵌 ARM开发社区

 找回密码
 注册
查看: 4144|回复: 10

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

[复制链接]
albert 发表于 2010-12-8 15:26:59 | 显示全部楼层 |阅读模式
每次做裸奔实验的时候,都是在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
   
    bl  disable_watch_dog               (1)
bl  memsetup                      (2)
bl  copy_steppingstone_to_sdram      (3)   
ld pc, =on_sdram
on_sdram:            
ldr sp, =0x34000000           
    bl  main
halt_loop
    b   halt_loop

disable_watch_dog
  
    mov r1,     #0x53000000
    mov r2,     #0x0
    str r2,     [r1]
    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 | 显示全部楼层
这篇文章真的很难好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-7 06:59 , Processed in 1.031250 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表