原创 DaVinci DM365 Linux核调试和NAND闪存编程

2010-10-11 15:10 1397 6 6 分类: EDA/ IP/ 设计与制造

关键词:DM365 Linux核调试,PEEDI编程器,自动操作,FTP服务器



1、概述


这个案例给你演示Linux核的调试和用PEEDI来对DM365 EVM板的编程。这种方法可以把出厂的程序写在板上同时终止了产品配置的编制,首先演示如何手动操作,然后看如何通过简单的设置PEEDI达到这个效果。



2、工具要求


-一块PEEDI 仿真器


-一块DM365板


- UBL, U-BOOT, KERNEL 和RAMDISK


-一个运行FTP服务器的主机


3、设置PEEDI


首先你需要准备一个CFG的文件,如果你以前的CFG文件比较复杂,可以从这里下载一个http://download.ronetix.info/peedi/cfg_examples/arm9/tms320dm365-DM365EVM.cfg.下面的都是关于FLASH设置的描述。如果你想编写四个不同的模块(UBL, U-BOOT, Linux核 和RAMDISK),你需要在CFG里面定义FLASH。你要设定CORE0_PATH参数指向文件的所在目录。这种FLASH的描述或者你需要的指令仅仅是文件的名字,而不是整个路径。然后,你想用PEEDI单机模式的时候,你可以拷贝这个文件到MMC/SD卡里,你仅需要该改变CORE0_PATH。现在我设置这个参数直接指向你的FTP服务器根目录。




[PLATFORM_ARM]

CORE0_FLASH0 = NAND_UBL
CORE0_FLASH1 = NAND_UBOOT
CORE0_FLASH2 = NAND_KERNEL
CORE0_FLASH3 = NAND_RAMDISK

CORE0_PATH = "ftp://user:password@192.168.1.1/"

[NAND_UBL]
CPU = TMS320DM365
CHIP = NAND_FLASH
DATA_BASE = 0x02000000 ; data
CMD_BASE = 0x02000010 ; commands (CLE)
ADDR_BASE = 0x0200000A ; addresses (ALE)
FILE = ubl.bin, BIN, 0x40000
OOB_INFO = DM365_BOOT
BURST_MODE = YES
DAVINCI_UBL_DESC_TYPE = 0
DAVINCI_UBL_DESCRIPTOR_MAGIC = 0xA1ACED00
DAVINCI_UBL_DESCRIPTOR_ENTRY_POINT = 0x100
DAVINCI_UBL_DESCRIPTOR_LOAD_ADDR = 0
DAVINCI_UBL_MAX_IMAGE_SIZE = 30*1024

[NAND_UBOOT]
CPU = TMS320DM365
CHIP = NAND_FLASH
DATA_BASE = 0x02000000 ; data
CMD_BASE = 0x02000010 ; commands (CLE)
ADDR_BASE = 0x0200000A ; addresses (ALE)
FILE = u-boot.bin, BIN, 0x320000
OOB_INFO = DM365_BOOT
BURST_MODE = YES
DAVINCI_UBL_DESC_TYPE = 0
DAVINCI_UBL_DESCRIPTOR_MAGIC = 0xA1ACED66
DAVINCI_UBL_DESCRIPTOR_ENTRY_POINT = 0x81080000
DAVINCI_UBL_DESCRIPTOR_LOAD_ADDR = 0x81080000

[NAND_KERNEL]
CPU = TMS320DM365
CHIP = NAND_FLASH
DATA_BASE = 0x02000000 ; data
CMD_BASE = 0x02000010 ; commands (CLE)
ADDR_BASE = 0x0200000A ; addresses (ALE)
FILE = uImage, BIN, 0x00600000
OOB_INFO = DM365_LINUX
BURST_MODE = YES

[NAND_RAMDISK]
CPU = TMS320DM365
CHIP = NAND_FLASH
DATA_BASE = 0x02000000 ; data
CMD_BASE = 0x02000010 ; commands (CLE)
ADDR_BASE = 0x0200000A ; addresses (ALE)
FILE = ramdisk.bin, BIN, 0x00900000
OOB_INFO = DM365_LINUX
BURST_MODE = YES 


就像你刚才看到的两个介绍——PEEDI可以用用户指定的内容自动烧入程序描述符。


"CPU = TMS320DM365"这条指令告诉PEEDI检测坏的模块区域(主体和镜像),没有错误,在最后两个好的模块里面产生。下面我们将准备对NAND chip UBL, U-BOOT, KERNEL and RAMDISK. 进行编程。
4、板的程序编写


用 flash set 指令可以选择你想用来编写NAND的 FLASH文件,然后闪存编程器对NAND进行编写:



peedi> flash set 0
peedi> flash erase
peedi> flash program
peedi> flash set 1
peedi> flash program
peedi> flash set 2
peedi> flash program
peedi> flash set 3
peedi> flash program 


分开这块板,证实它是正常的。你或许需要设置U-BOOT不同的环境去写入核和适当的命令行。你可以放弃U-BOOT环境,然后仅对它编程。因此你每次擦除的时候不需要再用手设置它。下面你可以把所有的命令放在一个脚本上。它就会自动的执行:



把这个脚本放到  [ACTIONS] 目录下,它就可以通过PEEDI按钮自动运行了。



[prog_all]
flash set 0
flash erase
flash program
flash set 1
flash program
flash set 2
flash program
flash set 3
flash program 


这个脚本可以通过三个方法启动:


· 通过 PEEDI 的run $prog_all指令


· 通过选择和开始脚本1,用PEEDI的前按钮


· 如果AUTORUN = 1没有描述这个程序,它将会每次启动这个板连接到PEEDI。



第1种方法是用来复位板的。第2、3种方法,如果人工不能掌握的话,通过production programming很快就可以知道怎么用PEEDI了。


5、Linux核的调试


你想调试Linux核,你需要一个带调试程序和最佳的开关的ELF核。这个板设置成装入和启动这个核不仅仅是NAND板,任何一个板都可以。调试的话,最好通过以太网来装载,这个方法你不需要一个一个编写,你一旦把核建立好,找出vmlinux文件(它可能在Linux核的工程目录下)和用nm工具找出它的所在目录,这个start_kernel函数像这样:



[ACTIONS] ; user defined scripts
;AUTORUN = 1 ; executed on every target connect
1 = prog_all 


用不带INIT部分的CFG,当PEEDI连接到CPU时,它不做任何的初始化,确定breakpoint模式设置为SOFT(我们在RAM里面调试)。当PEEDI连接上了,用"break add hard ADDRESS"在 start_kernel地址下加一个硬件breakpoint。


现在“go”开始启动目标,直到它在中断的时候停止。下一步,你就可以看到在核的根目录指向ELF格式的程序:


在可视的操作台里连接PEEDI :



nm vmlinux | grep start_kernel 


下一步用“si”指令更新界面,现在开始你可以加breakpoints, step, go, stop等到目标上,要执行的话用c按钮,在insight console用(c)ontinue指令或者在eclipse下按复位按钮。你之前做过这些后,你可以在INIT里面自动完成你的工作:




arm-elf-insight vmlinux 



你也可以忽略对象,把si指令放在gdbinit文件夹里,这样的话它在gdb/insight start下也能自动执行。当然你也可以用eclipse调试。


6、结论


第一眼看起来很复杂,但是第一个流程下了它就变得很简单。另外,所有复杂的设置搞定之后,其他的都会变得像推动一个按钮那么简单。


更多资料,请联系我们:


广州虹科电子 http://www.hkaco.com 


吴工 020-38743030  wj@hkaco.com  QQ:534807413

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条