关键词:DM355 Linux核调试,PEEDI,FTP服务器,CFG文件;
1、概述
这个案例向你演示Linux核调试和用PEEDI来对DM365 EVM板的编程。这种方法可以重建板上的程序,同时终止了继续对它编程,首先演示如何手动操作,然后看如何通过简单的设置PEEDI达到这个效果。
2、硬件要求
-一块PEEDI
-一块DM365板
- UBL, U-BOOT, KERNEL and 数据输入系统
-一个运行FTP服务器的主机
3、设置PEEDI和放弃YAFFS
首先你需要准备一个CFG的文件,如果你以前的CFG文件比较复杂,可以从这里下载一个http://download.ronetix.info/peedi/cfg_examples/arm9/tms320dm355-DM355EVM.cfg 下面的都是关于FLASH设置的描述。如果你想编写四个不同的模块(UBL, U-BOOT, Linux核 和根文件系统),你需要在CFG里面定义四个FLASH图。你要设定CORE0_PATH参数指向文件的所在目录。这种FLASH的概述或者你需要的指令仅仅是文件的名字,不是整个路径。然后,你想用PEEDI单机模式的时候,你可以拷贝这个文件到MMC/SD卡里,你仅需要该改变CORE0_PATH。现在我设置这个参数直接指向你的TFTP服务器根目录。
[PLATFORM_ARM] |
如果你能够看到前两行的概述——PEEDI可以根据用户给定的信息自动编写程序指令符。我的板是2GBNAND 的集成电路。这个装置实际上是每个集成里有2x1GB NAND的装置,所以从硬件的角度来说它有两个NAND的集成,并且各自有自己的部分。然而这个Linux NAND把这两个部分和在一个2GB的装置里面。但是对于PEEDI来说它仍然是具有2x1GB的装置。在这个例子里,ROOTFS被安排在第二个装置的位置上。对于Linux 来说,地址是0x60800000,但是对于PEEDI来说,它需要从第二块装置的一开始就要计算出地址来,所以你一定要用0x20800000 (0x60800000 – 1GB)。你也可以注意到它用来驱动第二块集成装置,另外的NAND指令,地址和数据地址的时候都要用得到。
“CPU = TMS320DM355”这个参数告诉PEEDI去检测不良块,如果没有发现,让它产生在最近的好的模块。PEEDI同时也产生镜像的BBT。现在需要编写进NAND模块UBL, U-BOOT和KERNEL使系统运行,然后从以太网装载YAFFS。用flash set 指令,你可以选择你想要用的FLASH,然后 flash program 指令对NAND进行编写:
peedi> flash set 0 |
现在把板从PEEDI分离并且复位它,它会正常运行。请看这个链接如何编写YAFFS的根文件系统:
http://wiki.davincidsp.com/index.php?title=Put_YAFFS_Image_to_Flash
(从里面拷贝:Put_YAFFS_Image_to_Flash.html)
现在重新把板连接到PEEDI上。因为没有好的工具把YAFFS 程序给DM355 CPU(如果用 HW ECC 将会产生很多问题) ,你可以把 YAFFS程序从NAND里面删除,以后用它来做快速修复,或者手工的编程。用flash set 3 和 flash query PEEDI指令检测坏的模块,确定YAFFS NANE区域里没有了坏的模块:
首先你要检测出YAFFS区的结尾在哪里,你可以放弃整个分区,但是如果这个分区没有满,放弃很多FF将没有意义。首先得计算出在tarball里所有文件的大小的和,然后在地址(就是partition里的基地址)里读取NAND (这个分区的基地址)乘于这个文件的大小,用来确定有一个数据在地址里面。在写有YAFFS 数据的分区里找到最好的NAND页,用flash read指令,确定在0x2B900000页的地址全部是FF,即它是空的。
peedi> flash set 3 |
考虑到系统是从0x20800000开始的,这意味这你将要放弃0xB000000字节。现在你可以放弃这块地址,但是YAFFS程序文件包含OOB数据,这个OOB数据不包括在NAND记忆空间里,事实上你需要放弃更多一点的数据用来纠正从2048到2112的页数。
peedi> flash read 0x2B800000 |
确定一切都ok了,你可以核实刚才放弃的程序:
4、对板的编写
你现在准备完成烧写,下次你想修复你的板或者只想对一部分进行编程,你可以跳过这个当前的整个部分,直接指向编程的那个部分:
peedi> flash dump 0x20800000 0xB000000/2048*2112 rootfs.bin |
将板分离,确定它运行正常,跟得上根文件系统。你可以把所有的指令放在一起使它能够自动执行:
peedi> flash verify rootfs.bin 0x20800000 |
把这个指令放到[ACTIONS]目录下,用PEEDI的按钮它就会开始运行了:
这个脚本可以通过三个方法启动:
? 通过 PEEDI 的run $prog_all指令
? 通过选择和开始脚本1,用PEEDI的前按钮
? 如果AUTORUN = 1没有描述这个脚本,它将会每次启动这个板连接到PEEDI。
The way 1 is useful for a board restore. Ways 2 and 3 are useful for production programming since non-qualified personnel can easily be instructed on how to work with PEEDI.
第1种方法是用来复位板的。第2、3种方法,如果人工不能掌握的话,通过production programming很快就可以知道怎么用PEEDI了。
5、Linux核的调试
你想调试Linux核,你需要一个带调试程序和最佳的开关的ELF核。这个板设置成装入和启动这个核,不仅仅是NAND,任何一个都可以。调试的话,最好通过以太网来装载,这个方法你不需要一个一个编写,你一旦把核建立好,找出vmlinux文件(它可能在Linux核的工程目录下)和用nm工具找出start_kernel函数所在目录,像这样:
peedi> flash set 0 |
用不带INIT部分的CFG,当PEEDI连接到CPU时,它不做任何的初始化,确定断点模式设置为SOFT(我们将在RAM里面调试)。当PEEDI连接后,在 start_kernel地址下用"break add hard ADDRESS"加一个硬件断点。
[prog_all] |
在insight console里连接PEEDI :
下一步用“si”指令更新界面,现在开始你可以加breakpoints, step, go, stop等到目标上,要执行的话用c按钮,在insight console用(c)ontinue指令或者在eclipse下按复位按钮。你之前做过这些后,你可以在INIT里面自动完成你的工作:
[ACTIONS] ; user defined scripts |
你也可以忽略对象,把si指令放在gdbinit文件夹里,这样的话它在gdb/insight start下也能自动执行。当然你也可以用eclipse调试。
6、结论
第一眼看起来很复杂,但是第一个流程下了它就变得很简单。另外,所有复杂的设置搞定之后,其他的都会变得像推动一个按钮那么简单。
更多资料,请联系我们:
广州虹科电子 http://www.hkaco.com
吴工 020-38743030 wj@hkaco.com QQ:534807413
文章评论(0条评论)
登录后参与讨论