硬件工程师的软件之路—— ARM板卡的调试流程

来源:互联网 发布:js obj 获取value 编辑:程序博客网 时间:2024/04/30 11:54

文章呢,是写给我这样的软件新人和广大涉及底层调试的硬件工程师的。软件大神们姑且略过吧。

先描述一下状况:公司其它的工程师画了一块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_sourcecode\uboot1.1.6\common\main.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啥的以后再和大家说。


0 0