还剩9页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
最低成本的ARM调试解决方案-------有关于Wiggler、H-Jtag OpenOCD、GDB、Insight2023-07-2323:00又是一个多月没有动这个Blog嘿嘿,我发觉一个好玩的现象,我的Blog在每年的1月底到2月中旬,7月、8月是淡季,每天访问量基本都在100以下,其它时间都是旺季,尤其9月和3月,每天可以到200以上,最高甚至500我想因该是因为学生们是EE小站访问的主力吧一一9月和3月是开题的日子,这资料搜寻做的,哈哈现在是淡季,祝大家假期开心,多陪陪父母我现在就很懊悔,高校的时候放假都在学校探讨东西,就算回家,也背着全套的设备回去……现在工作了,根本没有时间回家看父母,唉这段时间以来我始终在探讨和调试相关的东西,最起先是想给MPC8313找一个便宜的调试方案,后来就找出来一大堆东西,但是就是没有合适8313用的今日写的这个话题和学生们有很大关系,嘿嘿,怎样用最低的成本调试ARM,包括裸机调试和调试ARM Linux相关的东西转载请注明来自EE小站,邮件先给大家介绍个也许状况,现在国内都有什么闻名的ARM开发工具和解决方案,价格从凹凸排•BDT1000/2000/3000目前我知道的最牛X的调试工具,可以调试ARM、MIPS、PPC、ColdFires 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人民币(全功能)吧,这么贵基本也不考虑了•MultiTCE原版ARM公司的原创调试工具,支持全系列ARM芯片,现在多少钱我也不知道了,反正在2000〜3000人民币这个级别我这里指的是国内做得比较好的那些,比如Realview之类的仅仅支持ADS、SDT之类的裸奔代码调试,JTAG下载速度130K左右虽然这几年Multi-ICE是国内ARM调试确定的霸主,但现在ARM公司已经停止对ADS的维护了,Mui ti-TCE会起先走向没落•Multi-ICE盗版国内有许多Multi-ICE的盗版,功能和Multi-ICE原版一样,并口的、USB的在运用的过程中就会发觉,用Wiggler下载的速度实在不怎么样,U-Boot的可执行映像至多只有200KB,所以还是可以忍受的用同样的方法也可以调试其他Boot Loader,甚至是Linux内核;但是Linux内核的可执行映像一般有2MB之大,用眄gglcr调试也是不现实的我之前已经做了广告了,内核的调试要用卜Link来搞,敬请期盼EE小站的后续文章我对ARM CPU的在线Flash Download这件事情不是很感冒,所以H-JTAG和OpenOCD的这部分功能EE小站是不会涉及了,请见谅今日就到这里都有,价钱几百块人民币,淘宝上到处都有但是和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这个GDB Server,可以支持ARM、PPC、ColdFire MIPS、XScale等多种CPU后来因为它结构太简洁,被人破解后搞得全世界都是,于是Macraigor怒了,现在用OCDRemote必需是Macraigor原厂的Wiggler了……尽管如此,后人又在Wiggler的硬件基础上开发了许多的调试工具,例如H-Jtag;另外也有其他的调试工具增加了对Wiggler的支持,例如OpcnOCD Wiggler电缆的成本特殊低,当然它的性能也和成本一样低;用H-Jtag下载速度大约20~30KB/s,用Linux虚拟机下的OpcnOCD下载速度大约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 JointTest ActionGroup组织定了一个最初是用于测试生产出来的芯片是不是良品的测试接口和标准,在芯片的各个管脚上放上锁存器,然后串起来构成移位寄存器,可以监控芯片管脚的输入和输出;后来大家发觉这东西用来搞芯片的在线调试不错,于是就出现了现在JTAG调试风行的局面再说的明白些,也就是利用JTAG可以限制CPU内核,每个CPU都可以成为自己的“仿真器”,而不须要专用的设备“人人都是食神”一一周星星语录从理论上来说,世界上只须要一种仿真器,哦,准确的说应当叫做JTAG协议转换器,就可以调试全部的兼容JTAG标准的芯片;BDI2000这种超级贵的“仿真器”以及Wiggler这种什么都通吃的便宜货的存在是很合理的事情走这条路,应当已经明白了JTAG是什么,所以不用多说了•GDB是什么正像Windows和Linux的对比,集成开发环境比GDB在嵌入式开发领域,拥有更多的用户,但这并不意味的GDB不好GDB GNUProject Debugger是开源软件组织GNU开发和维护的一种调试工具,它能调试目前全部的能跑Linux的CPU,当然ARM也是其中一员对于初学者来说,不建议运用GDB,还是先从集成开发环境入手,例如ADS、SDT、Keil、IAR之类的其实从编译器的层面来讲,集成开发环境和GDB所用的编译器GCC没有什么区分,但集成开发环境里面供应了源文件组织与阅读、工程文件管理、调试等多种功能,用起来很友好GCC+GDB光学习写相当于工程文件的Makefile就要花许多的时间但是,一旦你的学习进了一步到了Linux的Loader和内核,集成开发环境就无能为力了前面已经提到了,本文覆盖了从刚起先的裸奔代码到涉足操作系统的GCC+GDB调试环境的建立方法本文关于GDB的部分应当是国内挺难找到的HOWTO,转载请注明来自EE小站关于GDB,可以参考下我之前的这篇文章aces,live/blog/cns!4201FDC93932DDAF!
268.entry在起先之前请先确认你的电脑有并口,假如是笔记本就算了,买个PCMIA转并口的卡的钱够买个盗版U-Link了;要是肯下血本买盗版J-Link,那就看我以后写的文章•首先说代码裸奔怎么做你须要的东西有•带井口的电脑一台•并口延长线一根•Wiggler一个•随意什么ARM7或ARM9的开发板一个假如没有并口延长线,可以去电脑城买一根假如没有Wiggler,你可以选择DIY,下面这张图是Wiggler的一种版本假如不想DTY,上淘宝淘一个去ARM开发板也可以在淘宝上淘淘,看你的经济实力了你须要的软件布••ADS ARMDeveloper SuiteVI.2•H-JtagADS在一般学校的FTP上都有,H-JTAG请访问在此再拜一下Twentyone大侠,可以为大家写出这么好的免费软件H-Jtag和ADS的运用方法在H-Jtag的网站上的手册里写得很清晰了,我就不再啰嗦了,给出地址〃hjtag/download/USER%20MAMD\L%20CN.pdf•说说GDB怎么做假如你对Linux下ARM的开发没有概念,先看我还是菜菜鸟的时候写的这篇文章〃xianzilu.spaces,live/b1og/cns!4201FDC93932DDAF!12L entry0GDB运用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服务程序一般还有别的限制接口,例如Telnel接口,可以实现对目标CPU的限制,如初始化和程序文件下载等比较困难哦,一会儿说到软件的时候就会用上这些学问你须要的东西和裸奔代码一样你须要的软件有■一个可以运行的Linux虚拟机里的、真实的都可以,举荐运用Open Suse
10.3,下载地址•本机GCC编译器Open Suse自己带的就可以•交叉GCC编译器可以去下载一个,随意给个地址把可M/SoftwareTools#Cross Toolchain值得留意的是U-Boot之后须要运用支持软浮点的交叉编译器,假如没有,可以用Crosstool制作一个,可以看我之前的这篇文章〃xianzi lu.spaces.I ive/blog/cns!4201FDC93932DDAF!
274.entry#OpenOCD源码OpenOCD的主页是OpenOCD是一个运行于PC上的程序,它可以限制包括W igg1er之内的许多JTAG硬件;我们可以将它理解为一种GDB服务程序OpenOCD的源码只能通过SVN下载,地址是svn://svn.berlios.de/openocd/trunk,在写这篇文章的时候OpenOCD已经是R818版本了,这个版本对Wiggler的支持有问题,我编译的是r520版本的,假如没有SVN Client,这个版本只能通过曲线的方式获得先到下载这个由YAGARTO供应的OpenOCD ForCygwin的版本,安装它,在安装书目例如C:\Program Filcs\opcnocd-r520\source里找到源码压缩包#Insight源码Insight是一个GDB的图形前端,我感觉它比DDD更适合嵌入式系统程序的调试[nsight的下载地址:〃sourcowarc.org/insight/downloads.php#随意什么程序的源码,例如U-BootU-Boot就不用介绍了,假如不知道可以Google下U-Boot的下载地址是下面起先编译,先是OpenOCD,假设源代码已经解压缩到了/home/lxz/build-openocd,先设定权限#cd/home/1xz/bui1d-openocd#chmod
755./bootstrap#./bootstrap等一会儿,输入#./configure-prefix=/usr/local/arm/openocd-enab1e-parport这里一prefix指定的是安装的路径,一enable-parporl使能并口,然后#make#sudo makeinstal1输入root密码,等一会儿,安装就完成了然后是insight,假设源码已经解压缩到了/home/lxz/insight-
6.8,然后#cd/home/lxz/insight-
6.8#./configure-prefix=/usr/local/arm/arm-linux-insight-target=arm-linux这里一prefix指定的是安装的路径,一target指的是为ARM编译GDB,等一会儿,输入#make等一会儿,输入#sudo makeinstall输入root密码,等一会儿,安装就完成了然后编译一个U-Boot用于测试”假设源码已经解压缩到了/home/1xz/at91rm9200/u-boot-,假设已经修改完了Makefile中的交叉编译器的选项,假设我为AT91RM9200DK开发板编译,然后#cd/home/lxz/at91rm9200/u-boot-#make at91rm9200dk config#make于是得到了/home/1xz/at91rm9200/u-boot-/u-boot这个映像为了能让OpenOCD正常运用,我们还须要2个脚本,第一个是OpcnOCD的配置脚本,这个脚本的作用是配置GDB服务程序、JTAG仿真器写这个脚本可以看OpenOCD的文档我给出我的AT91RM9200DK开发板的配置文件at91rm
9200.cfg,每一条配置信息的作用我就不说明了,请细致阅读OpenOCD的文档#Daemon configurationtelnet_port23gdb_port2331daemon_startup reset#JTAGinterface configurationinterface parportjtag_speed0reset_config trst_and_srstjtag_device40x1Oxf Oxe#parport optionsparport_port0x378parport_cablewiggler#Target configurationtarget arm920t littlerun_and_init0arm920trun_and_halt_time01000target_script0reset at91rm9200_init.scriptworking_area00x002000000x1000backup我还是提二下,上面这段配置信息中的target_script0reset at91rm9200_init.script这句就是指定其次个脚本的,而且让OpenOCD在当前书目下搜寻这个脚本也就是说,假如at91rm
9200.cfg在/home/lxz/at91rm9200下,那么你在/home/lxz/at91rm9200下启动OpenOCD服务程序,OpenOCD就会在/home/1xz/at91rm9200下搜寻at91rm9200_init.script这个脚本;假如在与at91rm
9200.cfg所在路径不同的路径下启裕OpenOCD服务程序,OpenOCD就无法找到at91rm9200_init.script,此时,targct_script0reset at91rm9200_init.script这句就应当写成target_script0reset/home/1xz/at91rm9200/at91rm9200_init.scripto其次个脚本的作用是初始化ARM CPU,因为U-Boot往往是在SDRAM里运行的,其连接位置也都在SDRAM里用GDB或GDB前端下载程序的时候,必需保证SDRAM是可用的AT91用9200这个CPU上电的时候假如从片内Boot ROM启动(不举荐从外部启动,因为假如没有启动程序,AT91RM9200将运行于慢时钟,这样JTAG仿真盐可能工作不正常),须要进一步配置PLL,PIO,SDRMC之类的外设之后,SDRAM才可以运用其次个脚本就是一系列寄存器读写和延时吩咐的集合,如何编写请看OpenOCD的手册,给出我的at91rm9200_init.scriptomww0xfffffc280x00000000mww Oxfffffc2c0x00000000OxOOOOffOlmww Oxfffffc20sleep20mww Oxfffffc28sleep0x20263e0420mww Oxfffffc2c sleep0x10483㊀Oe20mww Oxfffffc30sleep0x0000000020mww Oxfffffc30sleep0x0000020220mww Oxfffff870OxffffOOOOmww Oxfffff804OxffffOOOOmww Oxffffff600x00000002mww Oxffffff640x00000000mww Oxffffff980x2188cl59mww Oxffffff900x00000002mww0x200000000x00000000mww Oxffffff900x00000004mww0x200000000x00000000mww0x200000000x00000000mww0x200000000x00000000mww0x200000000x00000000mww0x200000000x00000000mww0x200000000x00000000mww0x200000000x00000000mww0x200000000x00000000mww Oxffffff900x00000003mww0x200002000x00000000mww Oxffffff940x000002e0mww0x200000000x00000000mww Oxffffff900x00000000mww0x200000000x00000000arm7_9sw_bkpts enable这个血本写意来很困难,建议从一些样例代码上把寄存器的数值扒过来另外,有些CPU,例如S3c2410,它上电的时候,SDRAM是默认可以用的,就不须要这个脚本了还有一个值得留意的是,由于我们用的是晅ggler这种简洁的JTAG协议转换器,初始化脚本里必需加上arm7_9sw_bkpts enable这句现在最终可以起先调试了,假设把OpenOCD安装在了/usr/local/arm/openocd,把Insight安装在了/usr/local/arm/arm-1inux-insight,两个初始化脚本都放在了/home/lxz/at91rm9200;你已经正确连接了Wiggler,开发板已经上电接下来还是用吩咐来说明#cd/home/1xz/at91rm9200#sudo/usr/local/arm/openocd/bin/openocd-f at91rni
9200.cfgroots password:Open On-Chip Debugger
1.02008-07-21-20:15svn:$URL:://svn.berlios.de/svnroot/repos/openocd/trunk/src/openocd.c$Info:jtag.c:1329jtag examinechain:JTAG devicefound:0x05b0203f Manufacturer:OxOlf,Part:0x5b02,Version:0x0Info:target.c:240target inithandler:executing resetscriptat91rm9200_init.scriptInfo:options.c:50configuration_output_hand1er:softwarebreakpoints enabled这就说明OpenOCD己经起先工作了然后启动Insight#cd/home/1xz/at91rm9200/u-boot-/#/usr/local/arm/arm-linux-insight/bin/arm-linux-insight出现下面的窗口EileRunyiewContro-preferencesHelpFind:SOURCEProgramnotrunningClickonrunicontostart然后选择菜单FileTarget Settings.,在出现的窗口中进行如下设置,然后点0KTargetSelection・Set breakpoint at main1Connect ionJSet breakpointat exifTarget:|Remote/TCPJ Setbreakpointat」Port:2331Display DownloadDialogJ Usexterm asinferiors tty▼Fewer OptionsRunOpt ionsRun Method・Attach toTargetv-Run Program・Download Program♦Continue fromLast StopCommandto issueafter attaching:选择菜单FileOpen,打开/home/lxz/at91rm9200/u-boot-/u-boot这个映像;然后选择菜单RunDownload,将U-Boot程序下载到目标CPU然后在程序运行的必经之路reset:/**set thecpu toSVC32mode*/mrs rO,cpsrbic rOrO#Oxlfz zorrrO,rO#0xd3zmsr cpsrrOz/#*iftudrenfinedoCffOthNeFIG_Sw3Cat2c4h0d0og*/ii_J_U•__T.rm-C4LCCCCCC设定一个断点,如下图所示选择菜单ConlroDContinure,程序就会从头起先执行,并停在断点处了Insight还有许多不错的功能,并且很简洁上手,大家探讨下就好补充一点,假如你对你的初始化脚本是否起作用没有信念,可以在启动Insight之后只选择菜单OJCA1X1X1on432109xdxdx4dx.dXxo19x8d7X615*1xdxdxdxdxdRunConnect totarget,然后选择菜单ViewMemory查看各个寄存器和内存最终给出一张我用Insight调试U-Boot的截图。
个人认证
优秀文档
获得点赞 0