快速业务通道

使uboot支持S3C6410的SD启动

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

  这里使用的uboot并非uboot官方发布的uboot代码,而是为三星定制的一个uboot版本s3c-u-boot-1.1.6,其代码作者就包括了三星的程序员与denx的员工.这个版本支持SD启动,不过默认是nand启动,使它支持uboot需要做以下事情:

  1、 虽然支持uboot启动,但是uboot代码里不叫SD启动方式,而是叫movinand启动方式,在incluede/configs/smdk6410.h中就有这个选项,在这个文件里关闭nand启动,打开movinand启动就可以了:

  //#define CONFIG_BOOT_NOR

  //#define CONFIG_BOOT_NAND 注释nand启动

  #define CONFIG_BOOT_MOVINAND 打开movinand启动

  //#define CONFIG_BOOT_ONENAND

  //#define CONFIG_BOOT_ONENAND_IROM

  #define CONFIG_NAND

  //#define CONFIG_ONENAND

  #define CONFIG_MOVINAND 打开movinand选项,使uboot支持movinand的操作

  2、如果单纯是做上面的改动,还是不够的,在运行的时候会发现到了一定的时候uboot就死掉了,其实这是uboot中假设SMDK6410在使用SD方式的时候是从CH0启动的,但是手上的这个板子是通过CH1启动,那么在运行被复制到SRAM中的8K代码时候没办法在CH0检测到SD,更没办法将SD 里的代码复制到SDRAM中.修改办法是在incluede/

  movi.h中HSMMC_CHANNEL修改为1.

  3、然后如果将上述修改后编译出来的u-boot.bin通过IROM_Fusing_tools直接烧写到SD中也是没办法启动的,需要运行以下的命令进行处理:

  cat u-boot.bin >> temp

  cat u-boot.bin >> temp

  split -b 256k temp

  mv xaa u-boot_256k.bin

  split -b 8k u-boot.bin

  mv xaa u-boot_8k.bin

  cat u-boot_256k.bin >> u-boot_mmc.bin

  cat u-boot_8k.bin >> u-boot_mmc.bin

  经过这些处理,实际上是将u-boot.bin内容重复一次后(为了保证达到256K,如果这个bin更小,那么可能需要重复3次、4次,直到超过256K 为止),将前256K制成u-boot_256k.bin,再将前8K制成u-boot_8k.bin,将u-boot_256k.bin u-boot_8k.bin合并成一个256K 8K大小的文件u-boot_mmc.bin,这个文件前256K就是u-boot_256k.bin 而后8K就是u-boot_8k.bin.把这个u-boot_mmc.bin通过IROM_Fusing_tools烧写到SD卡就可以成功启动系统了.

Empire CMS,phome.net

  为什么要做这样的处理这个bin文件呢?下面通过分析IROM_Fusing_tools、uboot的源码来揭示其中的由来.

  从网上可以下载到IROM_Fusing_tools的源码,在按下这个软件的start控件后,先是读取这个SD卡的第一个扇区,也就是这个磁盘的MBR 扇区,判断是不是FAT32格式的磁盘(这也是为什么用来做启动的SD格式化为FAT32格式),接着获取总的扇区数目TOTAl_SECOTR,并将所要烧写的bin文件烧写到磁盘的这个扇区:TOTAL_SECTOR – 2 - SIZE_OF_IMAGE/512.其中TOTAl_SECTOR是这个磁盘总的扇区数目;SIZE_OF_IMAGE/512是这个bin文件将要占据的扇区数(这里是以512为扇区大小的,因此对于扇区更大的SD卡也就没办法使用了,而现在的大容量SD都可能使用了2K甚至4K的扇区,除非修改这个程序,并同步地在uboot中修改程序);至于2则是保留的2个扇区,至于为什么要保留这2个扇区,需要分析uboot的源码情况,下面将做进一步的阐述.

  在SD启动方式下,S3C6410内部的IROM程序BL0运行,并将SD中的18个扇区开始的16个扇区内容复制到片内的8K SRAM,也就是SteppingStone,接着跳转到这块SRAM的开始地址开始运行,这8K的代码实际上就是上面u-boot_mmc.bin这个文件的8K,也是u-boot.bin的最开始8K代码,这段代码也叫BL1.从BL0跳转到BL1的时候uboot也就接管了CPU.

  Uboot的入口在start.S这个文件,cpu/s3c64x0/start.S中有这样一段代码:

  #ifdef

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号