关于u-boot使用JTAG下载到什么地方

使用开发板:JZ2440

下载u-boot软件:J-Flash ARM


    在JZ2440上边有一个开关:是选择nor启动还是nand启动,当拨到nor启动时候,使用J-Flash ARM可以连接成功,而使用nand启动时,出现下面图片:



        不能找到flash,说明这里指的flash就是nor flash。下载uboot到开发板的地方就是nor flash。下面就分析一下,为什么下载地方是nor flash:
当我们把开关拨到nor flash时,ARM地址映射已经完成,如下图:

这些nGCS0、nGCS1、nGCS2.....这些都是S3C2440A上面的片选管脚,其中nGCS0连接的是nor flash,说明地址映射时,nor flash映射到内存的0x0000_0000,目前我还没有查到使用JTAG下载的具体地址是哪,但从我截的图可以看出,上面有两个地址,1.RAM address:0x30000000   2.0x0.
但不知道这两个地址是什么含义,但可以猜到JTAG下载U-BOOT的地址可能是地址映射成0x0000_0000的地方。矛盾的地方很多,在网上找到一张图:
 
1.  TEXT_BASE=0x33f8_0000,这个地址是u-boot第一阶段(前4K程序)将u-boot自身拷贝到0x33f8_0000这个地方,而前4K程序需要使用位置无关码的指令运行,因为它的运行地址和链接地址不一样。
2. 其实我们编译的整个u-boot文件,反汇编后它的第一个地址,即_start的地址就是TEXT_BASE=0x33f8_0000,而不是0x0000_0000,那为什么在0地址还能执行。其实 像bl、b、adr(adr属于伪指令,一般被编译器解释成sub指令)指令属于位置无关指令,不管程序装载在哪个位置上,bl、b、adr指令都能正确的运行,其原因是bl、b、adr指令的地址域是基于PC的相对偏移寻址,相当于[pc+offset]。当ARM启动时,ARM自动取0x00000000位置上的指令,此时PC=0x00000000。 基于PC偏移量的指令都能正确的执行。所以uboot第一阶段指令都能执行的原因在于此。
       在这里总结一下,u-boot的整个代码是从0x33f8_0000开始的,但是我们却把它下载到nor flash里边,而nor flash也映射成0地址,PC就从0地址取指令开始执行,而前4K程序使用的是与位置无关码(PIC),所以可以执行。
       

经过两天的研究,最后终于搞明白了,JTAG把U-BOOT下载到nor flash里边,nor flash可以直接运行代码,不用把代码拷贝到SDRAM然后运行。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值