最低成本的ARM调试解决方案——有关于Wiggler、H-Jtag、OpenOCD、GDB、Insight2008-07-2323:00又是一个多月没有动这个Blog嘿嘿,我发现一个有趣的现象,我的Blog在每年的1月底到2月中旬,7月、8月是淡季,每天访问量基本都在100以下,其它时间都是旺季,尤其9月和3月,每天可以到200以上,最高甚至500。我想因该是因为学生们是EE小站访问的主力吧——9月和3月是开题的日子,这资料搜索做的,哈哈。现在是淡季,祝大家假期愉快,多陪陪父母。我现在就很后悔,大学的时候放假都在学校研究东西,就算回家,也背着全套的设备回去……现在工作了,根本没有时间回家看父母,唉。这段时间以来我一直在研究和调试相关的东西,最开始是想给MPC8313找一个便宜的调试方案,后来就找出来一大堆东西,但是就是没有合适8313用的。今天写的这个话题和学生们有很大关系,嘿嘿,怎样用最低的成本调试ARM,包括裸机调试和调试ARMLinux相关的东西。转载请注明来自EE小站,邮件cosine@126.com。先给大家介绍个大概情况,现在国内都有什么著名的ARM开发工具和解决方案,价格从高低排:BDI1000/2000/3000目前我知道的最牛X的调试工具,可以调试ARM、MIPS、PPC、ColdFire、XScale等多种处理器。无需更换硬件,只需要买不同的软件授权就可以调试不同的CPU。JTAG下载速度可以上兆,以太网接口。因为太贵了(BDI2000好像要人民币50000吧),我没怎么研究它到底配合什么软件来调试,不过GDB它是肯定支持的,它一直是我心目中的神话啊。J-Link原版J-Link是IAR公司为ARM开发的调试工具,支持RDI协议的调试工具,如Keil、ADS、IAR等;支持GDB调试;什么SWD之类的用得很少,有没有都一样;但J-Link不支持ARM10以上的内核。JTAG下载的速度可以达到400~500K,正版价格大约5000人民币(全功能)吧,这么贵基本也不考虑了。Multi-ICE原版ARM公司的原创调试工具,支持全系列ARM芯片,现在多少钱我也不知道了,反正在2000~3000人民币这个级别。我这里指的是国内做得比较好的那些,比如Realview之类的。仅仅支持ADS、SDT之类的裸奔代码调试,JTAG下载速度130K左右。虽然这几年Multi-ICE是国内ARM调试绝对的霸主,但现在ARM公司已经停止对ADS的维护了,Multi-ICE会开始走向没落。Multi-ICE盗版国内有很多Multi-ICE的盗版,功能和Multi-ICE原版一样,并口的、USB的都有,价钱几百块人民币,淘宝上到处都有。但是和J-Link盗版相比,不推荐购买。J-Link盗版最近这段时间,J-Link盗版渐渐开始多起来了,淘宝上也很多,功能和原版没有区别。价格大约在几百人民币左右,从性价比来看,推荐购买。我之后还会写一篇用J-Link调试ARM的文章,当你入门之后,绝对无法忍受今天介绍的这个低成本方案的JTAG下载速度,那时就买个J-Link来爽爽。U-Link盗版U-Link是Keil公司做的用于ARM和某些增强型8051调试的工具,由于Keil公司做U-Link的时候没有加密,导致现在盗版满天飞,只需要100多块钱就可以买到一个。现在Keil已经被ARM收购,U-Link也是ARM一家的了。U-Link正版在盗版的排挤下,根本没有什么买的必要;U-Link仅仅支持Keil,而且JTAG下载速度仅有20~30K。Wiggler电缆Wiggler是世界上最泛滥的一种调试工具,它非常简单,只需要一片74HC244,一个9013,几个电阻就可以。本来Wiggler是Macraigor()制作的,可以支持Macraigor的OCDRemote这个GDBServer,可以支持ARM、PPC、ColdFire、MIPS、XScale等多种CPU。后来因为它结构太简单,被人破解后搞得全世界都是,于是Macraigor怒了,现在用OCDRemote必须是Macraigor原厂的Wiggler了……尽管如此,后人又在Wiggler的硬件基础上开发了很多的调试工具,例如H-Jtag;另外也有其他的调试工具增加了对Wiggler的支持,例如OpenOCD。Wiggler电缆的成本特别低,当然它的性能也和成本一样低;用H-Jtag下载速度大约20~30KB/s,用Linux虚拟机下的OpenOCD下载速度大约2KB/s。不过对于囊中羞涩的学生们来说,是一个非常不错的入门工具。本文就针对Wiggler进行介绍。估计看这篇文章的人会有一些是从单片机起步,转到ARM上来的,我先梳理下各种CPU调试的知识。从MCS-51/96、PIC之类的单片机转入ARM这条路是学校教学比较传统的路子。条件好点的学校开单片机课的时候都有实验,用实验箱和仿真器做实验,那种仿真器就是一种最早的CPU/MCU仿真器,仿真器通过仿真头连接电路板,完全模拟CPU/MCU的功能;仿真器通过串口或者其他什么口连接计算机,计算机上有集编译器、调试器为一体的集成开发环境,可以监控和运行程序。这种仿真器的成本一般比较高,而且仿真不同的CPU/MCU需要不同的硬件,结构也很复杂,使用软件模拟的断点。解释下软件模拟的断点——就是用特殊的函数调用指令替换断点所在位置的指令,这些特殊的函数具有和仿真器的监控软件交互的功能。应该有很多的同学平时没有条件用上这么奢侈的设备,多半是用的是ISP,采用“点灯大法”——就是借助LED、串口之类的调试程序,每修改一次程序就重新下载一次,调试非常的艰苦。我刚开始玩单片机的时候AT的89S52还没有出来,我花一个月的生活费买了个烧写器,每次改程序都把芯片撬下来放到烧写器上,烧完再装回去继续点灯……走这条路,要明白的事情有:ARM的寄存器可不是51那寥寥可数的几个,是没有必要也不可能背下来的;ARM芯片一般都内置了JTAG调试逻辑,不需要CPU仿真器,需要的是一个JTAG协议转接器(虽然现在大家还叫这种东西为仿真器);集成开发环境在使用者看来和单片机的没有任何区别,这点请放心。从AVR、C8051F之类有JTAG的单片机转入ARM时代是不断进步的,AVR、C8051F具有JTAG口的单片机。JTAG(JointTestActionGroup)组织定了一个最初是用于测试生产出来的芯片是不是良品的测试接口和标准,在芯片的各个管脚上放上锁存器,然后串起来构成移位寄存器,可以监控芯片管脚的输入和输出;后来大家发现这东西用来搞芯片的在线调试不错,于是就出现了现在JTAG调试风行的局面。再说的明白些,也就是利用JTAG可以控制CPU内核,每个CPU都可以成为自己的“仿真器”,而不需要专用的设备。“人人都是食神。”——周星星语录。从理论上来说,世界上只需要一种仿真器,哦,确切的说应该叫做JTAG协议转换器,就可以调试所有的兼容JTAG标准的芯片;BDI2000这种超级贵的“仿真器”以及Wiggler这种什么都通吃的便宜货的存在是很合理的事情。走这条路,应该已经明白了JTAG是什么,所以不用多说了。GDB是什么正像Windows和Linux的对比,集成开发环境比GDB在嵌入式开发领域,拥有更多的用户,但这并不意味的GDB不好。GDB(GNUProjectDebugger)是开源软件组织GNU开发和维护的一种调试工具,它能调试目前所有的能跑Linux的CPU,当然ARM也是其中一员。对于初学者来说,不建议使用GDB,还是先从集成开发环境入手,例如ADS、SDT、Keil、IAR之类的。其实从编译器的层面来讲,集成开发环境和GDB所用的编译器GCC没有什么区别,但集成开发环境里面提供了源文件组织与浏览、工程文件管理、调试等多种功能,用起来很友好。GCC+GDB光学习写相当于工程文件的Makefile就要花很多的时间。但是,一旦你的学习进了一步到了Linux的Loader和内核,集成开发环境就无能为力了。前面已经提到了,本文覆盖了从刚开始的裸奔代码到涉足操作系统的GCC+GDB调试环境的建立方法。本文关于GDB的部分应该是国内挺难找到的HOWTO,转载请注明来自EE小站。关于GDB,可以参考下我之前的这篇文章!4201FDC93932DDAF!268.entry。在开始之前请先确认你的电脑有并口,如果是笔记本就算了,买个PCMIA转并口的卡的钱够买个盗版U-Link了;要是肯下血本买盗版J-Link,那就看我以后写的文章。首先说代码裸奔怎么做你需要的东西有:●带并口的电脑一台●并口延长线一根●Wiggler一个●随便什么ARM7或ARM9的开发板一个如果没有并口延长线,可以去电脑城买一根。如果没有Wiggler,你可以选择DIY,下面这张图是Wiggler的一种版本:如果不想DIY,上淘宝淘一个去。ARM开发板也可以在淘宝上淘淘,看你的经济能力了。你需要的软件有:●ADS(ARMDeveloperSuite)V1.2●H-JtagADS在一般学校的FTP上都有,H-JTAG请访问。在此再拜一下Twentyone大侠,可以为大家写出这么好的免费软件。H-Jtag和ADS的使用方法在H-Jtag的网站上的手册里写得很清楚了,我就不再啰嗦了,给出地址(CN).pdf。说说GDB怎么做如果你对Linux下ARM的开发没有概念,先看我还是菜菜鸟的时候写的这篇文章!4201FDC93932DDAF!121.entry。GDB使用GDB工具链,调试解决方案的结构是GDB前端---GDB---GDB服务程序---JTAG协议转换器(仿真器)---目标CPU(ARMCPU)|控制接口GDB有一个很大的缺点——文本界面,使用非常不方便。但幸运的是,有很多热心的开发者为GDB写了一些图形“外壳”——GDB前端,大大方便了GDB的使用。因为我们做的是交叉开发(即在x86结构的电脑上开发ARM等非x86结构的CPU程序),所以GDB无法直接调试编译出来的程序,这就需要一个服务程序。这个服务程序可以是一个可以控制目标CPU的程序(可能运行于计算机上;也可能运行于某些仿真器上,例如如BDI2000就是这样),也可以是一个运行于目标CPU上的服务程序,由它来装载被调试的程序。但是后者一般需要目标CPU上已经运行起了Linux内核;调试Bootloader和Linux内核本身,需要前一种服务程序。GDB和GDB服务程序之间的连接方式可以是以太网或者串口,而且GDB服务程序一般还有别的控制接口,例如Telnet接口,可以实现对目标CPU的控制,如初始化和程序文件下载等。比较复杂哦,一会儿说到软件的时候就会用上这些知识。你需要的东西和裸奔代码一样你需要的软件有:●一个可以运行的Linux虚拟机里的、真实的都可以,推荐使用OpenSuse10.3,下载地址●本机GCC编译器OpenSuse自己带的就可以●交叉GCC编译器可以去下载一个,随便给个地址把值得注意的是U-Boot1.2.0之后需要使用支持软浮点的交叉编译器,如果没有,可以用Crosstool制作一个,可以看我之前的这篇文章ht
本文标题:ARM调试解决方案
链接地址:https://www.777doc.com/doc-2901844 .html