概述
文章呢,是写给我这样的软件新人和广大涉及底层调试的硬件工程师的。软件大神们姑且略过吧。
先描述一下状况:公司其它的工程师画了一块S3C6410的板子,外设就是一个USB口,一个DM9000 ,521MB的NAND,512MB的DDR。
我手头有天嵌6410的板子,于是乎想按照天嵌的流程搞定这件事,当然这不太太现实,天嵌的方式是SD卡直接烧写。我怎么办呢?
第一步,搞清天嵌的SD卡一键烧写原理
天嵌的流程:
1.向SD卡中写入U-boot,然后拷入一份U-boot,系统镜像和文件系统。板卡设置成SD卡启动后,上电。
2.板卡首先从SD卡启动U-boot,然后在U-boot环境下执行NANDFLASH的擦除命令。
3.然后将U-boot拷贝到内存中,再将内存中的U-boot拷贝到NANDFLASH里。
4.板卡将SD卡中的内核拷贝到内存中,再将内存中的内核拷贝到NANDFLASH里。
5.文件系统的操作也和上面的步骤一样。
源代码的真相在这里:
uboot_sourcecodeuboot1.1.6commonmain.c
ExecuteCmd("nand erase"); 擦除NANDFLASH
ExecuteCmd("fatload mmc 0:1 50008000 u-boot.bin"); 从SD卡中拷贝U-boot.bin到内存0x50008000
ExecuteCmd("nand write.uboot 50008000 0 200000"); 将U-boot写入到NANDFLASH的0x0地址上去
ExecuteCmd("fatload mmc 0:1 50008000 zImage"); 下面的大家自行脑补
ExecuteCmd("nand write.e 50008000 200000 500000");
ExecuteCmd("fatload mmc 0:1 50008000 rootfs.yaffs2");
ExecuteCmd("nand write.yaffs2 50008000 700000 $filesize");
6.断电后切换到NAND启动模式,就从NANDFLASH中启动了。
第二步,我的方法——Jlink调试
我的板卡上是没有SD卡的,显然这种方法不行。
我的方法是(当然啦,整个流程和天嵌的一样。应该这是个通法吧,我搞硬件的不太懂):
1. 先用Jlink向S3C6410的片上RAM中拷贝一段初始化代码,然后执行,这段代码要能够初始化外部的DDR。
2. 将移植好的U-boot拷贝到DDR中,并且执行。
3. 等U-boot起来之后,在串口控制台上,通过网口将U-boot拷贝到DDR的另一个地址(TFTP协议),然后擦除NANDFLASH,将U-boot放到NAND里
4.同理将内核和文件系统放进去。
这样一个模仿天嵌的启动方法的流程就完成了。中心思想就是用网口代替SD卡。好了,我娘叫我吃饭,对不住了,不能继续写了。大家其他的自行脑补,楼主实在人,不懂打我电话13333375715。移植U-boot啥的以后再和大家说。
最后
以上就是怡然小熊猫为你收集整理的硬件工程师的软件之路—— ARM板卡的调试流程的全部内容,希望文章能够帮你解决硬件工程师的软件之路—— ARM板卡的调试流程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复