利用JTAG OCD加速Linux设备开发

发布者:心灵之窗最新更新时间:2012-03-19 来源: 电子设计应用 关键字:JTAG  OCD  Linux设备 手机看文章 扫描二维码
随时随地手机看文章

  引言

  传统上,调试嵌入式Linux产品需要将硬件和软件工具结合起来,如用JTAG工具进行硬件bring-up,用基于代理(agent- based)的解决方案进行软件开发。这些JTAG和基于代理的工具相结合的方法通常可以解决单点问题,但它们最初并不是专门针对集成化的Linux开发而设计的。因而,在当今集成化的产品开发中,这些传统方法常常是不可行的。

  但是,我们可以在Linux内核的配置、补丁管理以及在基于Eclipse的IDE环境中的用户空间应用开发、调试和分析之中,将传统JTAG 硬件调试融入其中得到一种全新的方法,从而完全改变开发人员使用JTAG连接进行Linux设备软件调试的方法,这就是Wind RiverWorkbench。

  Linux设备调试的复杂性

  在嵌入式设备领域,Linux的应用正在迅速增加。根据技术市场研究机构VDC的报告,在新的设备研发项目中,有23%会采用Linux。由于开发工作跨越Boot Loader、Linux内核、内核模块和应用,调试工作很可能极为复杂。Linux开发人员必须面对的问题包括为Boot Loader建立目标配置文件,在用户模式和内核模式之间双向对硬Linux虚拟地址、映射内核符号信息以及排除遍布于用户和内核空间之中的差错。包括内核GNU调试器和GNU调试器在内,在基于代理的调试方案中,要想解决上述任何问题都会遇到极大困难。

  Boot Loader调试

  如果浪费太多的时间在BootLoader的开发与调试上,将会严重影响开发人员对于系统稳定性、设备软件与应用开发的精力投入。因此,开发人员应当借助于先进的工具,尽快逾越这个阶段。

  Linux需要依靠BootLoader来启动操作系统。这段代码存放在Flash或者其他非易失性存储器之中,在系统开机或者复位之后立即运行。Boot Loader的调试可能会非常复杂。这段代码与硬件密切相关,在系统启动之后开发人员必须把它从Flash存储重新定位到RAM之中。在今天的SoC处理器中可能包括了数百个配置寄存器,都需要在此时进行初始化,这项工作需要熟悉数千页的特殊设定文档。如果设定寄存器错误,可能导致随后Linux内核或者应用调试的异常。并且手工编辑寄存器设定是一项极为繁琐易错的工作。

  Boot Loader开发的另一项常见挑战出现在Boot Loader把Linux装入RAM并启动操作系统的时候。基于代理的调试解决方案不支持BootLoader调试,因为在此过程中还没有开始发挥作用。因此,开发人员只能寄希望于JTAG工具。

  JTAG调试解决方案提供了很强的能力来帮助开发人员快速有效地完成Boot Loader的测试与故障排除工作。它使寄存器设置工作大大简化,通过设置硬件断点以及单步执行Flash中的代码,可以快速发现原代码中的错误。IDE 可以支持反汇编,还可以让你混合查阅源代码和汇编代码,符号管理功能比较便于代码从Flash向RAM的重新定位,使整个调试工作得到很大帮助。

  JTAG调试解决方案不需要通过Boot Loader即可装载Linux内核。对于那些在Boot Loader尚未完成之前就希望开始系统开发的项目管理人员来说,这项功能具有特殊的重要意义。提供了引导行能力的JTAG调试解决方案可以支持Boot Loader和操作系统稳定化的并行开发,从而加速软件开发项目的整体进程。

  Linux内核及内核模块调试

  Linux内核及内核模块是Linux操作系统的核心构建。在系统被Boot Loader初始化之后,首先装载的就是Linux内核。Linux模块则根据需要进行装载。在进行操作系统bring-up时,开发人员必须专注于 Linux操作系统的优化或剪裁以及内核模块的开发,需要必须密切监控硬件与软件之间的互动。Linux内核调试要求具备观察寄存器、数据缓存器及其它底层数据。LinuxKGDB要求具备稳定的Linux内核,并且确保诸如设备驱动之类的客户硬件接口处于就绪状态,其中的代理才能工作。基于代理的调试不具备底层硬件的可视化能力,也不能提供完全的诊断功能,因而无法让开发者了解硬件与Linux内核之间的互动。

  如果采用代理来调试Linux内核和内核模块,在进入调试断点时可能会涉及系统暂停或者冻结方面的问题。例如,KGDB无法暂停CPU(特别是在多核或者多处理器环境中)来让开发人员检查CPU的现行状态,它也不能帮助开发人员对崩溃的系统进行调试,因为崩溃的操作系统显然已经不能再运行代理。而且,KGDB还需要以太网等通信接口实现主机系统与目标之间的沟通。总之,采用代理来实现Linux内核模式调试,需要具备由IP栈、稳定的Linux 内核和处于运行状态的设备驱动。在上述条件尚未具备,或者上述软件本身还需要调试的时候,基于代理的调试显然就无能为力。

  为了实现并验证一个目标系统中的Linux内核,必须拥有可以监控和管理Linux内核和内核模块的全面调试解决方案。基于JTAG的调试解决方案功能特性包括查看局部/全局符号和寄存器以及指令和数据缓存器。已经有商业化的JTAG调试解决方案可以把物理内存和虚拟内存顺畅地映射过来,从而帮助开发人员正确地观察内存地址和内容,也具有对Linux内核模块进行调试的能力,以及在不必反复连接和切断目标系统的前提下多次装载和卸载。

  JTAG调试解决方案的另一个重要能力是把系统完全置于暂停状态并且全面观察操作系统和应用的状态。这种能力又被称为“系统模式调试 (system mode debug)”,对于Linux内核和Linux内核模块的调试是极为有用的。有了系统模式调试能力,开发人员就可以把整个系统完全暂停下来,包括处理器、操作系统和所有的线程以及中断处理程序。以这种方式暂停系统,就有可能获得系统硬件和软件的完整细节视图,当然也可以让系统继续执行或者分步骤执行某些代码。[page]

  因此,在一些KGDB无法使用的情况下,JTAG解决方案就可大派用场,特别是在Linux内核出错或者目标崩溃的情况下更是如此。因此JTAG解决方案在提升操作系统和设备驱动稳定性方面特别有用。

      

  Linux应用调试

  Linux应用是在Linux内核控制之下运行的用户程序,它通过系统调用来访问系统资源。Linux内核负责处理系统调用并且决定如何来提供硬件和内存访问。

  对于用户模式下的应用调试,开发人员需要通过启动和停止线程、查看变量和堆栈来直接访问应用线程。由于一个应用可能由多个进程或者线程组成,所以有可能需要停止与正在调试的应用线程相关的所有线程。开发人员也常常需要跨越不同的进程和CPU来查看外设寄存器。然而,GDB只能在线程的级别上操作,而且只能启动和停止单个线程,根本不具备启动和停止整个系统或者同时启动/停止多个线程的能力。

  另外,在用户模式下进行调试的时候,可能会因为单步运行系统调用而从用户模式进入Linux内核模式,然后又单步执行回到用户模式。在 Linux的虚拟内存结构下,在两种模式之间来回转换的同时还要保持内存地址跟踪,仅仅依赖于物理地址将会效果有限。于是,基于代理的解决方案需要同时采用GDB和KGDB来跟踪系统调用进入Linux内核和内核模块。同时,这个过程将会非常复杂。

  Linux应用开发人员也常常遇到没有配备以太网或者串行通信接口的设备开发项目。即便是配有这些通信接口,相应的软件也不一定能很快就开发完成。而基于代理的调试方法必须依赖这些通信接口才能工作。如果目标设备没有通信接口,或者这些通信接口本身还需要开发与调试,或者内存对于IP栈或代理软件不可用,在这些情况下,基于代理的方法也不能使用。

  基于JTAG的调试方法对于运行在Linux用户模式下的应用则具有深度可视化能力。对于提出系统调用的应用,双模式的JTAG调试解决方案还将可视化的深度延伸到Linux内核,所有的应用线程、运行环境以及在线程变量中用到的参数都一览无遗,而且这些功能的实现不会对Linux内核本身造成任何影响。对于没有通信接口的目标设备,例如移动电话、医疗设备、车载设备等,基于JTAG的调试解决方案都显示出远高于基于代理调试的优越性。一个 Linux的软件与硬件连接如图1所示。

  采用系统模式调试可以让多线程应用调试大大简化,这是因为开发人员获得了暂停处理器并观察操作系统和全部线程运行状态的能力。如前所述,许多问题的发生是因为多个线程之间的交互。而基于代理的调试根本不具备停止全部线程的能力,自然也就难以发现问题所在,这就意味着工程进度将会因为调试工作的低效率而被大大延迟。

  基于JTAG的调试解决方案与目标硬件的连接是非干扰性的,可以连接到一个已经运行并且发生错误的目标系统之中,也可以不改变处理器寄存器的状态,即可观察到Linux内核和应用的运行状况并进行调试。例如,如果一个Linux的目标设备进入死锁状态,利用JTAG调试工具,开发人员就可以在不会破坏现场状态的前提下与目标系统连接,进而观察其中的Linux内核对象、应用运行情况,找到引发错误的线程、系统调用以及调用参数。在有些情况下,基于代理的调试工具根本无法使用,而基于JTAG的调试工具却可以简化调试工作,加快调试进度。

  Wind River基于JTAG的Linux调试工具

  Wind Rivet推出的基于JTAG的OCD((On-Chip Debugging,片上调试)解决方案运行在符合工业标准的Eclipse平台上,为嵌入式Linux设备提供了先进的基于JTAG的调试功能特性。

  Workbench OCD主要支持Wind River Linux。不过,对于开发者自行获得的Linux或者半导体厂商提供的Linux版本,Wind River也可提供片上调试功能,也为kernel.org Linux提供基于JTAG的内核及用户模式调试。Wind River调试解决方案还支持广泛的目标硬件,包括先进的多核处理器。它还支持移动终端设备市场上所有最新的主流处理器,实现各种量身定制的增强功能特性,使设备软件和硬件的开发调试变得更加简单、更加直观。

  Workbench实现了与Eclipse全整合,并且通过在Workbench基于Eclipse的环境中加入新的视图和功能模块,进一步加强了IDE的支持。

  目前,大多数移动终端设备都采用了多处理内核,对很多片上调试解决方案都造成很大的挑战。JTAG Server和JTAG Accelerator技术提供了面向多内核处理器的高速JTAG调试能力。JTAG Accelerator技术支持当前最复杂的32位和64位处理器,实现了JTAG带宽利用率的最大化。JTAG Servet技术则使开发人员能够同时连接多达128个处理器,并且在单个IDE实例中动态地调试多个处理器。

  这样,Linux开发人员可以灵活地采用JTAG连接来进行硬件bring-up、Linux内核、中间件和用户模式应用的调试,并且在适当的时候转移到基于代理的调试方式之下,而且不论是JTAG或是代理模式都在同一个IDE架构之中,这种功能可以显著改善多个开发团队之间的协同效率,节省排除差错的时间。

  结语

  由于嵌入式系统已经变得越来越复杂,软件开发人员在调试工作上所面临的挑战也越来越多。传统基于代理的Linux调试解决方案在用户模式和内核模式的调试上的有效性都面临尴尬。基于JTAG的调试可以在Linux开发中扮演极有价值的角色,当它与Eclipse之类的标准化开发环境相结合,就可以显著改善编辑-编译-调试过程。在产品上市速度已经成为关键因素的今天,拥有高效率的Wind RiverWorkbench调试工具无疑是明智的选择。

关键字:JTAG  OCD  Linux设备 引用地址:利用JTAG OCD加速Linux设备开发

上一篇:嵌入式操作系统在高速实时信号处理系统中的应用
下一篇:VxWorks下实时多任务程序的实现

推荐阅读最新更新时间:2024-05-02 21:58

采用JTAG仿真器的DSP中断检测处理技术方案
1、引言   在采用集成化的开发调试平台CCS结合基于JTAG技术的仿真器实现 DSP系统的实时性分析过程中设定中断检测点是非常重要的,中断检测点可以中断程序的执行以进行特定的操作,例如可以进行数据文件的输入输出,可以刷新图表和数据窗口等,便于在实时性分析中更有效的观察数据处理的显示结果。 2、基于 JTAG技术的仿真器   JTAG技术即边界扫描技术,是一种专用的电子系统测试技术,就是通常所指的 IEEE1149.1标准,已经在各行业中得到了广泛的应用,如图 1,一个符合 IEEE1149.1标准的 JTAG器件,有别于不同的逻辑器件,内部都包括一个 TAP(测试访问端口)控制器,其次在芯片内部经由一个扫描链路将所有
[嵌入式]
采用<font color='red'>JTAG</font>仿真器的DSP中断检测处理技术方案
keil提示仿真器SWD/JTAG Communication Failure的问题解决
问题现象 在使用CMSIS-DAP仿真器的时候,经常出现连不上仿真器,很烦人,就算你重启MDK或者重启电脑,插拔主板的电源或者仿真器的usb连接线都无济于事。错误提示: 问题分析: 把可能出现硬件问题都一遍遍排除了,剩下就是软件问题了,莫非是MDK的配置问题,打开仿真器的设置 ,上面的设置似乎也没啥问题,只提示仿真器通讯错误。心里想:莫非是工程配置文件的问题?于是打开其他工程,下载,仿真,果然没问题。再打开刚才出问题的工程,问题依旧。这样可以确定是项目配置文件的问题,可能是之前仿真出错,强制关闭Keil导致项目配置文件出错了。 问题解决 最后定位到一个以“uvoptx”后缀的配置文件,把它拷贝到有问题的工程项目里,替换原
[单片机]
keil提示仿真器SWD/<font color='red'>JTAG</font> Communication Failure的问题解决
关于MSP430-JTAG的若干个问答
1.问:在将程序通过JTAG口烧入MSP430时常遇到找不到器件,通过断电复位,重新联机几次才可以写入,一点规律没有,不知道是怎么回事?有那位仁兄也遇到此类问题?如何解决的?是不是JTAG口的问题?请指教。 答: 1、可能是目标板复位原因,最常见的就是复位芯片。 2、用户使用内外部电源,很可能是因为电源冲突。切忌!!! 2.问:我把BSL的6,8两脚不接外电分别接目标板的电压或接外电(3。6V)后再分别接目标板的电压,4种情况都还是调不通,不知道具体问题出在哪里?请指教。 答:bsl接口针对不同的MSP430 FLASH系列,其连接方式是不一样,其电源部分是一致的,您还是着重检测P1/2/3脚的接法。主要是根据FLASH系列不
[单片机]
详细讲解JLINK与JTAG的几大根本区别
调试 ARM ,要遵循arm的调试接口协议,JTAG就是其中的一种。当仿真时,IAR、KEIL、ADS等都有一个公共的调试接口,RDI就是其中的一种,那么我们如何完成RDI-- arm调试协议(JTAG)的转换呢?有以下两种做法: 1.在电脑上写一个服务程序,把IAR、KEIL和ADS中的RDI命令解析成相关的 JTAG协议,然后通后一个物理转换接口(注意,这个转换只是电气 物理层上的转换,就像RS232那样的作用)发送你的的目标板。H-JTAG就是这样的。H-JTAG的硬件就仅是一个物理电平的转换接口,所以很简单。 而电脑中装的h-JTAG软件就是前面说到的服务程序,负责协议转换的。 2.做一个板,用此板直接接收来自IAR、K
[电源管理]
MSP430编程器仿真器以及JTAG、SBW、BSL接口的区别
对于51系统来说,很容易理解编程器和仿真器。 通俗的说,仿真器是用来调试仿真的,编程器是用来批量生产时对MCU进行烧写目标代码的。 对于MSP430来说,无论仿真还是烧写程序一般可以通过:JTAG、SBW、BSL接口进行。JTAG、SBW接口可以用于仿真接口,BSL接口不能用于仿真。而编程器则三种接口都支持。 所以并不能说JTAG只支持仿真不支持编程,这是概念错误,JTAG仅仅是一种接口协议而已。 下面简单描述一下三种接口的区别: 1、JTAG是边界扫描技术,其在430内部有逻辑接口给JTAG使用,内部有若干个寄存器连接到了430的内部数据地址总线上,所以可以用JTAG访问430内部的所有资源,包括对FLASH的读写操作。所
[单片机]
linux中LCD设备驱动(3)——基于s3c6410平台
上一篇在说LCD设备驱动对应的probe函数时,没有说完,这一篇接着继续说probe函数。 s3cfb_pre_init();上一次说到了这个函数,而且还讲到了一个结构体s3cfb_fimd_info_t,并说了它的大致作用。 s3cfb_set_backlight_power(1);看名字就只到它的大致作用,与背光灯有关,源码如下: static void s3cfb_set_backlight_power(int to) { s3cfb_fimd.backlight_power = to; if (s3cfb_fimd.set_backlight_power) (s3cfb_fimd.set_backlight_
[单片机]
MAXQ微控制器中JTAG接口引脚的复用
  简介   通常在嵌入式应用中,微控制器的每个端口引脚对于实际应用来说都是必需的,没有多余的引脚。然而,开发人员可采用其他方法来解决这个问题。大部分MAXQ微控制器可重写内部程序存储器(如闪存或EEPROM),支持标准JTAG/TAP接口(也称为调试端口)。外部主机可利用该接口执行在线调试或在线编程(引导装载)功能。该接口中的所有引脚通常可复用为标准GPIO端口引脚功能,从而使这些引脚在开发阶段结束之后仍然可以被使用。本应用笔记阐述了在常规应用中如何复用这些引脚。同时,本应用笔记还指出了在复用这些引脚时需要考虑的事项。   应用系统开发阶段   在开发阶段,JTAG兼容调试端口可提供许多有用功能。首先,调试端口允许应
[嵌入式]
用openocd+jtag并口小板调试qq2440
*关于openocd openocd是一个开源的调试工具,支持一些主流的CPU,不过目前来看,支持ARM是比较多的。其主页为http://openocd.berlios.de/ . 目前openocd开发得还比较频繁,我现在用的svn revision是1833。当然,如果有新的话,最好尝试最新的revision。如果遇到了问题,比如编译通不过之类的,可以再试试稍微旧一点的版本。 编译和安装openocd的方法: 首先从svn 上将最新的代码checkout下来: svn co svn://svn.berlios.de/openocd/trunk openocd 这会将代码checkout到当前目录的o
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved