快速业务通道

使uboot支持S3C6410的SD启动

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-24
CONFIG_BOOT_MOVINAND

  ldr sp, _TEXT_PHY_BASE

  bl movi_bl2_copy

  b after_copy

  #endif

  这段代码是实现SD启动的关键.到了这里后就执行movi_bl2_copy,这个函数负责将SD内的uboot完整地复制到SDRAM,这时候完整的uboot也叫BL2,而这个函数实际上是调用了以下函数:

  CopyMovitoMem(HSMMC_CHANNEL, MOVI_BL2_POS, MOVI_BL2_BLKCNT, (uint *)BL2_BASE, MOVI_INIT_REQUIRED);

  HSMMC_CHANNEL这是SD/MMC通道号,手上板子使用的是CH1,而默认是CH0,需要对这个进行修改.

  MOVI_BL2_POS 是需要拷贝的数据位于SD的起始扇区,其计算办法是这样的,先得到这个SD的总扇区数TOTAL,再减去256K的BL2和8K的BL1所占的扇区数,减去0.5K 的eFuse和0.5K的保留区所占的扇区数,而这里还定义SD的扇区为512B.从这里可以看到和IROM_Fusing_tools对SD卡的处理是完全对应的.这里还有一个问题,总扇区数TOTAL是如何得到的?从程序来看是从(TCM_BASE - 0x4)这个地址读取到的,至于TOTAL是如何被放到这里的就只能从BL0的代码找答案了.

Empire CMS,phome.net

  MOVI_BL2_BLKCNT是需要复制的扇区数目,这里就是定义为256K,这也是为什么把u-boot.bin转换成256K的文件.

  BL2_BASE是目的地址,也就是SDRAM中的地址.这里定义为0x57E00000,就是128M 的SDRAM的2M,到这里为止MMU尚未打开,因此这里使用的是物理地址.

  MOVI_INIT_REQUIRED这个参数的意义是什么暂时没有任何资料说明.

  而CopyMovitoMem这个函数的定义是这样的:

  #define CopyMovitoMem(a,b,c,d,e) (((int(*)(int, uint, ushort, uint *, int))(*((uint *)(TCM_BASE 0x8))))(a,b,c,d,e))

  这个定义实际上是调用了位于TCM_BASE 0x8这个地址的函数指针,其中TCM_BASE的值为0x0C004000,至于这个地址放的是什么,也没资料说明.

  当复制完BL2后便会跳转到BL2的start_armboot这个C语言函数中运行了,此后的运行过程就不需要再分析了.

Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号