OK6410 SD卡启动裸机程序

原博客地址:http://blog.chinaunix.net/uid-28492690-id-4671393.html

首先,各位能够看到这片文章肯定已经入手了飞凌的OK6410开发板,想开始裸机调试是吧。我就是这种情况,我之前为了学习ARM斟酌再三入手了这块板子,无奈还要买一个Jlink,呵呵,作为一个学生Jlink还是需要不少银子,SD卡倒是有一个4G的那就研究研究怎么从SD卡启动吧。
    现在手头只有飞凌OK6410-A开发板一块,4G-SD卡,电源线,SD卡读卡器,Ubuntu12.04系统(我装的是双系统Win7),这些是硬件资源,软件资源要有飞凌给的u-boot源码,s3c6410的数据手册,还有一个文档是S3C6410_Internal_ROM_Booting.pdf,这个文档是数据手册的一个补充,是说CPU启动的细节,讲解相当详细。
    废话不多说,这里假设你已经搭建好了开发环境:交叉编译器,等等。你要是只需要从SD卡来启动整个Linux系统的话,直接解压飞凌给的u-boot1.1.6.tar.gz(注意是飞凌给的哦,其他的应该不行吧),
    cd u-boot1.1.6
    make clean
    make forlinx_sd_ram256_config
    make
   
这样你就能得到一个能够从sd卡启动的u-boot.bin文件了。但是这还不够哦,研读S3C6410_Internal_ROM_Booting.pdf这篇文档之后你会了解一切的亲。
这里你可以参考这篇博客:http://blog.chinaunix.net/uid-9185047-id-3175464.html
这里我假设你已经大概阅读过上面前辈的文章了,我来讲我的情况:我的卡是4G的,应该属于SDHC(容量4G及以上的都是SDHC),如图所示:

4G的SD对应的有7626752(可以用fdisk命令查看,不会百度去)个sector(SD里面的最小单位是sector,每个sector大小是512B),我们需要将u-boot.bin的前8KB(截取成文件BL1.bin)烧写到SD卡的7626752-1025-1-16=7625710个sector处:sudo dd if=BL1.bin of=/dev/sdc seek=7625710 bs=512 count=16,当然你编译出来的u-boot.bin文件应该有196kB大小,但是这里只有区区8KB,远远不够。系统的启动都是分各种阶段的,如个人PC一样,这里第一阶段BL1是8K,第二阶段如图是BL2,BL2的容量大小在文档中没有提到,但是我们在源码中可以找到:在start.S中的movi_bl2_copy(在movi.c中)中的CopyMovitoMem函数中有五个参数(HSMMC_CHANNEL, MOVI_BL2_POS, MOVI_BL2_BLKCNT, (uint *)BL2_BASE, MOVI_INIT_REQUIRED),其中第二个参数MOVI_BL2_POS就是代码会拷贝的起始sector位置,是Total - 2 - 16 - 512 - 32 - 1024,代入我们的SD卡是(7626752 - 2 - 16 - 512 - 32 - 1024 = 9625166)我们要把整个u-boot.bin烧到BL2部分去:sudo dd if=u-boot.bin of=/dev/sdc seek=7625166 bs=512 count=544 这样你就可以通过SD卡来进行启动了。本人亲测成功,附带一个前辈的成果:http://blog.chinaunix.net/uid-26009923-id-3331236.html

     到这里,需要用SD卡启动的孩纸已经可以高高兴兴去玩了,用SD卡裸机开发的孩子还在惆怅,推荐韦东山老师的ok6410的裸机开发视频,讲的很好。要是用SD卡裸机开发的代码两不大的话推荐用sudo dd if=BL1.bin of=/dev/sdc seek=7625710 bs=512 count=16这个命令,当你的bin文件不超过8KB的话足够了。要是bin文件的大小超过了8KB,则要用到上面所说的CopyMovitoMem函数了,这个是s3c6410内部rom自带的函数,函数入口地址在0x0C004008,函数有五个参数:(HSMMC_CHANNEL, MOVI_BL2_POS, MOVI_BL2_BLKCNT, (uint *)BL2_BASE, MOVI_INIT_REQUIRED),HSMMC_CHANNEL 和 MOVI_INIT_REQUIRED写0就是了,MOVI_BL2_POS是你要复制的SD卡的起始sector数,MOVI_BL2_BLKCNT这个是复制的sector数,(uint *)BL2_BASE这个是复制到内存的地址,一般会是SDRAM中的地址,上面所说的u-boot就是复制到0x5FE00000地址处。其他的关于重定位的知识就去看视频学习吧。本人亲测哦。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值