Chinaunix首页 | 论坛 | 博客
  • 博客访问: 196127
  • 博文数量: 20
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 346
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-23 14:37
文章分类
文章存档

2016年(2)

2015年(3)

2014年(11)

2013年(4)

我的朋友

分类: 嵌入式

2014-12-04 12:29:16

    首先,各位能够看到这片文章肯定已经入手了飞凌的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地址处。其他的关于重定位的知识就去看视频学习吧。本人亲测哦。











阅读(2746) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~