版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DaVinci DM355 Linux核调试和NAND闪存编程关键词: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文件比较复杂,可以从这里下载一
2、个 下面的都是关于FLASH设置的描述。如果你想编写四个不同的模块(UBL, U-BOOT, Linux核 和根文件系统),你需要在CFG里面定义四个FLASH图。你要设定CORE0_PATH参数指向文件的所在目录。这种FLASH的概述或者你需要的指令仅仅是文件的名字,不是整个路径。然后,你想用PEEDI单机模式的时候,你可以拷贝这个文件到MMC/SD卡里,你仅需要该改变CORE0_PATH。现在我设置这个参数直接指向你的TFTP服务器根目录。PLATFORM_ARMCORE0_FLASH0 = NAND_UBLCORE0_FLASH1 = NAND_UBOOTCORE0_FLASH2 = N
3、AND_KERNELCORE0_FLASH3 = NAND_ROOTFSCORE0_PATH = ""NAND_UBLCPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02000000 ; dataCMD_BASE = 0x02000010 ; commands (CLE)ADDR_BASE = 0x0200000A ; addresses (ALE)FILE = ubl.bin, BIN, 64*2048OOB_INFO = DAVINCI_ECC_HW10_512BURST_MODE = YESDAVINCI_UBL_DES
4、C_TYPE = 0DAVINCI_UBL_DESCRIPTOR_MAGIC = 0xA1ACED00DAVINCI_UBL_DESCRIPTOR_ENTRY_POINT = 0x20DAVINCI_UBL_DESCRIPTOR_LOAD_ADDR = 0DAVINCI_UBL_MAX_IMAGE_SIZE = 28*1024NAND_UBOOTCPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02000000 ; dataCMD_BASE = 0x02000010 ; commands (CLE)ADDR_BASE = 0x0200000A ;
5、addresses (ALE)FILE = u-boot-DM355.bin, BIN, 8*64*2048 ; 64 pages per block;FILE = u-boot-DM355.bin, BIN, 8*128*2048; 128 pages per blockOOB_INFO = DAVINCI_ECC_HW10_512BURST_MODE = YESDAVINCI_UBL_DESC_TYPE = 1DAVINCI_UBL_DESCRIPTOR_MAGIC = 0xB1ACED22DAVINCI_UBL_DESCRIPTOR_ENTRY_POINT = 0x81080000DAV
6、INCI_UBL_DESCRIPTOR_LOAD_ADDR = 0x81080000DAVINCI_UBL_MAX_IMAGE_SIZE = 1024*1024NAND_KERNELCPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02000000 ; dataCMD_BASE = 0x02000010 ; commands (CLE)ADDR_BASE = 0x0200000A ; addresses (ALE)FILE = uImage, BIN, 0x00400000OOB_INFO = DAVINCI_ECC_HW10_512BURST_M
7、ODE = YESNAND_ROOTFSCPU = TMS320DM355CHIP = NAND_FLASHDATA_BASE = 0x02004000 ; dataCMD_BASE = 0x02004010 ; commands (CLE)ADDR_BASE = 0x0200400A ; addresses (ALE)FILE = rootfs.bin, BIN, 0x20800000OOB_INFO = YAFFSBURST_MODE = YES 如果你能够看到前两行的概述PEEDI可以根据用户给定的信息自动编写程序指令符。我的板是2GBNAND 的集成电路。这个装置实际上是每个集成里有2
8、x1GB NAND的装置,所以从硬件的角度来说它有两个NAND的集成,并且各自有自己的部分。然而这个Linux NAND把这两个部分和在一个2GB的装置里面。但是对于PEEDI来说它仍然是具有2x1GB的装置。在这个例子里,ROOTFS被安排在第二个装置的位置上。对于Linux 来说,地址是0x60800000,但是对于PEEDI来说,它需要从第二块装置的一开始就要计算出地址来,所以你一定要用0x20800000 (0x60800000 1GB)。你也可以注意到它用来驱动第二块集成装置,另外的NAND指令,地址和数据地址的时候都要用得到。“CPU = TMS320DM355”这个参数告诉PEE
9、DI去检测不良块,如果没有发现,让它产生在最近的好的模块。PEEDI同时也产生镜像的BBT。现在需要编写进NAND模块UBL, U-BOOT和KERNEL使系统运行,然后从以太网装载YAFFS。用flash set 指令,你可以选择你想要用的FLASH,然后 flash program 指令对NAND进行编写:peedi> flash set 0peedi> flash erasepeedi> flash programpeedi> flash set 1peedi> flash programpeedi> flash set 2peedi> flas
10、h program 现在把板从PEEDI分离并且复位它,它会正常运行。请看这个链接如何编写YAFFS的根文件系统:(从里面拷贝:Put_YAFFS_Image_to_Flash.html)现在重新把板连接到PEEDI上。因为没有好的工具把YAFFS 程序给DM355 CPU(如果用 HW ECC 将会产生很多问题) ,你可以把 YAFFS程序从NAND里面删除,以后用它来做快速修复,或者手工的编程。用flash set 3 和 flash query PEEDI指令检测坏的模块,确定YAFFS NANE区域里没有了坏的模块:peedi> flash set 3peedi> flas
11、h query 首先你要检测出YAFFS区的结尾在哪里,你可以放弃整个分区,但是如果这个分区没有满,放弃很多FF将没有意义。首先得计算出在tarball里所有文件的大小的和,然后在地址(就是partition里的基地址)里读取NAND (这个分区的基地址)乘于这个文件的大小,用来确定有一个数据在地址里面。在写有YAFFS 数据的分区里找到最好的NAND页,用flash read指令,确定在0x2B900000页的地址全部是FF,即它是空的。peedi> flash read 0x2B800000 考虑到系统是从0x20800000开始的,这意味这你将要放弃0xB000000字节。现在你可
12、以放弃这块地址,但是YAFFS程序文件包含OOB数据,这个OOB数据不包括在NAND记忆空间里,事实上你需要放弃更多一点的数据用来纠正从2048到2112的页数。peedi> flash dump 0x20800000 0xB000000/2048*2112 rootfs.bin 确定一切都ok了,你可以核实刚才放弃的程序:peedi> flash verify rootfs.bin 0x20800000 4、对板的编写你现在准备完成烧写,下次你想修复你的板或者只想对一部分进行编程,你可以跳过这个当前的整个部分,直接指向编程的那个部分:peedi> flash set 0pe
13、edi> flash erasepeedi> flash programpeedi> flash set 1peedi> flash programpeedi> flash set 2peedi> flash programpeedi> flash set 4peedi> flash erasepeedi> flash program 将板分离,确定它运行正常,跟得上根文件系统。你可以把所有的指令放在一起使它能够自动执行:prog_allflash set 0flash eraseflash programflash set 1flash
14、programflash set 2flash programflash set 4flash eraseflash program 把这个指令放到ACTIONS目录下,用PEEDI的按钮它就会开始运行了:ACTIONS ; user defined scripts;AUTORUN = 1 ; executed on every target connect1 = prog_all 这个脚本可以通过三个方法启动:通过 PEEDI 的run $prog_all指令通过选择和开始脚本1,用PEEDI的前按钮如果AUTORUN = 1没有描述这个脚本,它将会每次启动这个板连接到PEEDI。The w
15、ay 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核。这个板设置成装入和启动这个核
16、,不仅仅是NAND,任何一个都可以。调试的话,最好通过以太网来装载,这个方法你不需要一个一个编写,你一旦把核建立好,找出vmlinux文件(它可能在Linux核的工程目录下)和用nm工具找出start_kernel函数所在目录,像这样:nm vmlinux | grep start_kernel 用不带INIT部分的CFG,当PEEDI连接到CPU时,它不做任何的初始化,确定断点模式设置为SOFT(我们将在RAM里面调试)。当PEEDI连接后,在 start_kernel地址下用"break add hard ADDRESS"加一个硬件断点。arm-elf-insight
17、vmlinux 在insight console里连接PEEDI :target remote YOUR_PEEDI_IP:2000 下一步用“si”指令更新界面,现在开始你可以加breakpoints, step, go, stop等到目标上,要执行的话用c按钮,在insight console用(c)ontinue指令或者在eclipse下按复位按钮。你之前做过这些后,你可以在INIT里面自动完成你的工作:break add hard ADDRESS ; add hardware break at start_kernelgo ; start the CPUwait 30000 stop ; wait for the target to break with timeout of 30 sec, it might need
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论