硬件工程师的软件之路—— ARM板卡的调试流程
2014-01-10 06:56
253 查看
文章呢,是写给我这样的软件新人和广大涉及底层调试的硬件工程师的。软件大神们姑且略过吧。
先描述一下状况:公司其它的工程师画了一块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啥的以后再和大家说。
先描述一下状况:公司其它的工程师画了一块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啥的以后再和大家说。
相关文章推荐
- 硬件工程师之路上的8个软件必通绝招
- 硬件工程师之路上的8个软件必通绝招!!!
- 从硬件到纯软件,回顾一个老工程师的经历之路!
- 从硬件到纯软件,回顾一个老工程师的经历之路!
- STM32 使用 Keil MDK 中的软件逻辑分析仪参与硬件调试
- day11 ARM混合调用案例、ARM核 异常处理流程、软件处理异常
- Ubuntu12.04使用串口调试Android实现(硬件USB转串口PL2303+软件Minicom)
- 软件开发工程师的职场之路(转一篇2005年的旧文章,你准备走那条路?)
- TMS320C6678外部存储器SPI FLASH硬件设计以及软件调试
- arm 硬件和软件对异常的处理
- Andriod 软件与硬件调试 无线调试
- 软件测试工程师发展之路
- 软件硬件开发流程
- ATSAMV7Xult板卡调试Nuttx系统----NuttX系统初始化流程简介
- ARM软件访问硬件的核心理论
- 诊断之美-调试(Debug)的软件和硬件手段
- 硬件工程师调试法宝
- 中国软件开发工程师之路到底在何方?
- 软件断点和硬件断点及在调试PMON时应注意之区别
- (转)硬件&软件——NiosII开发流程