当前位置:文档之家› trace32仿真器使用教程+

trace32仿真器使用教程+

简介大家可能会对uTrace-ICD比较陌生,简单介绍一下,uTrace-ICD 是TRACE32-ICD的兼容机。

在这里我首先感谢国人的努力能让我用很少的RMB用上这么高端仿真器。

废话少说,下面我给大家介绍一下uTrace-ICD下具体实现Linux调试的具体过程。

大概介绍一下实现的具体原理,首先要有一块可用的目标板,我选用的是SMDK2410评估板。

编译环境是在虚拟VMware+RedHat9.0,调试环境是uTRACE。

在这里有个问题:就是在虚拟机下编译的arm linux内核如何传递给安装在Windows下的uTRACE。

我用的方法就是通过SMB服务器。

在Redhat9.0下配置SMB Server将arm linux的源码包通过网络共享的方式共享给Windows XP。

在XP下的Windows 资源管理器中将Redhat9.0共享的arm linux源码包影射为本地的一个虚拟盘比如是:Z盘。

这样uTRACE就可以象操作本地盘一样来读取Redhat9.0中的arm linux源码包以及编译生成的内核映像及内核的符号表。

对于uTRACE调试器来说,需要的东东就是包含调试信息的arm linux的内核映像vmlinux。

在这里要注意"包含调试信息",arm linux内核配置选项默认可能是不包含调试信息,如果将没有包含调试信息的vmlinux供uTRACE使用是实现不了内核源码级调试的。

所以我们在配置arm linux内核时一定要将包含内核调试信息的选项选上。

具在"kernel hacking"下。

其次uTRACE调试器需要的就是arm linux内核源码树。

调试器的工作原理就是通过给定的地址查找对应的符号表找到对应的符号,以及符号所在文件的路径信息,行信息等,近而找到源程序所对应的函数或变量。

简单介绍了uTRACE调试的基本原理,接下来,具体介绍一下arm linux内核,驱动,及应用层源码级调试的具体实现过程。

具体实现上一节简单介绍了uTrace-ICD调试的基本原理,下面将详细介绍调试的具体实现过程。

首先介绍一下我用的评估板SMDK2410的具体情况。

目标板是nor flash启动,大小为8M,SDRAM配置情况是32M,首地址是0x30000000。

软件配置情况:bootloader为ppcboot2.0,arm linux内核为2.4内核(实现过程对2.6内核也适用)。

第一步:配置虚拟机Redhat9.0编译环境。

安装交叉编译器arm-elf-gcc,解压arm linux源码包到“\SMDK2410\kernel”下,解压ppcboot到“\SMDK2410\ppcboot-2.0.0”下。

配置SMB Server将“\SMDK2410”目录网络共享出去。

在WindowsXP下同过网上邻居访问此目录并映像为本地磁盘“Z盘“,这样uTRACE 就可以像访问本地文档一样访问Linux下的文档了。

接下来编译ppcboot以及arm linux内核生成可执行映像,分别为ppcboot及vmlinux(注意在配置arm linux内核时将“Kernel Hacking”下“Include debugging Information in kernel binary”选项选上--生成调试信息)。

第二步:bootloader的调试。

以上开发环境都建立好,我们可以开始PPCBOOT的调试。

打开uTRACE-ICD调试软件,目标板上电。

在System Settings里选CPU 为S3C2410X,然后点UP使CPU进入调试状态。

打开反汇编窗口,命令为Data.list,可以查看当前PC处反汇编情况。

此时PC指向arm复位地址0x0即nor flash上内容的反汇编,此时我们也可以在flash上进行调试。

以下连结是反汇编图。

NOR Flash反汇编图此时查看的代码为Flash上固化的代码。

我们可以在Flash上进行单步调试,设置断点(注意在Flash上调试,只能设置Onchip断点,并且ARM9最多支持两个)。

如果要在Flash上实现源码级的调试,我们需要加载包含当前代码的带调试信息的目标文件。

对ppcboot来说,在ppcboot源代码目录下经交叉编译会生成ppcboot档,这个就是带调式信息的目标文件,本例就是要加载它,并且要注意,编译生成的目标文件与烧录到Flash上的代码是同一个版本,否则加载的调试信息将是错误的调试信息,代码对应上将会出错。

我们用命令行方式加载调试信息,命令如下:Data.LOAD.ElfZ:\ppcboot-2.0.0\ppcboot /gnu /nocode /strippart"/SMDK2410/" /path "Z:\"其中Data.LOAD.Elf指定是以ELF档格式加载Z:\ppcboot-2.0.0\ppcboot 指定文件的全路径/nocode 指定只加载调试信息,而不加载可执行代码,此时代码已经固化到Flash上,不需要再加载。

/strippart "/SMDK2410/"将调试信息中包含"/SMDK2410/"的部分去掉,因为可执行档是在linux环境中编译的,其中,编译出的调试信息中路径信息包含 "/SMDK2410/",由于Windows中无法以包含这个字符串的路径来搜索文件,所以要将其剥去。

/path "Z:\" 告诉uTRACE-ICD搜索路径在Z:\盘。

加载后,我们就可以以源码的方式来调试PPCBOOT了,如下:PPCboot源码调试图C与汇编混合模式:第三步:ARM Linux的调试。

首先将C:\T32\demo\arm\kernel\(uTrace安装目录)目录下的linux 整个目录拷贝到自己的工作目录,比如说E:\SMDK2410下。

Linux目录下是关于linux内核调试的一些配置文件。

打开E:\SMDK2410下linux 目录,新建一个目录取名为SMDK2410,将integrator目录下的内容完全拷贝到新建的目录中。

然后根据自己的目标板修改linux.cmm文件。

修改后载入uTrace调试运行。

linux.cmm脚本调试图单步调试运行linux.cmm脚本。

脚本会控制程序运行到linux内核入口start_kernel(具体实现是在start_kernel这个地址处设置Onchip端点)如下图所示:start_kernel处源码调试我们在这里可以单步跟踪内核启动流程,来学习内核的初始化过程并且可以通过符号表来定位程序或变量所在的文件,并且可以在程序或变量所在处设置断点(硬件断点或软件断点或WatchPoint断点)。

加载linux内核感应模块(即uTrace对arm linux的支持模块,因为uTrace可以支持多种操作系统调试比如Wince, Vxworks等基本上所有常用操作系统的调试,为了支持对应操作系统必须将对应操作系统的支持模块加载近来以支持该系统内核模块的调试),会在主菜单增加linux 主菜单,其下是关于linux内核的多种信息。

增加的linux菜单其中有Display Tasks,ps,Display Moduoles,Display File System等子菜单。

下面详细介绍其中每个菜单项的作用。

1.Display Tasks查看系统内核心中每个任务的详细状态。

Display Tasks菜单图双击任务前的magic可以查看每个任务的详细情况。

其中包含:relationship标志本进程父子进程关系。

Arguments标志本进程运行参数Environment标志本进程运行环境变量。

Open files 标志本进程打开的档Addresses 标志本进程代码地址,数据地址,堆栈地址及大小。

Code file 标志代码由哪些档组成,包括可执行文件,动态连接库,以及它们的起始地址。

Times 标志进程时间信息启动时间,休眠时间等。

TreeView任务图2.PS子菜单同linux控制台命令ps命令。

PS菜单命令图3.Display modules显示系统中加载的模块信息,包含模块名,模块的代码地址,数据地址,以及模块被使用情况。

Display modules菜单命令图4.Display File System查看系统中支持的文件系统的类型Display File System菜单命令图查看系统中加载的文件系统的类型Mounted file System菜单命令图查看/proc文件系统proc文件系统菜单命令图第四步:ARM Linux任务调试。

下面以调试简单的打印”Hello World”任务为调试对象,介绍任务级调试的实现方法。

可执行档为hello。

要调试hello可执行档,在linux.cmm档中执行do ../app_debug hello然后对app_debug.cmm做必要修改,主要是修改任务的调试信息。

Data.LOAD.Elf Z:\applications\hello\&process &spaceid:0 /gnu /nocode /noclear /strippart "/SMDK2410/" /path "Z:\"任务级源码调试图Display Tasks 可以看到在做好多了一个hello项。

Display Tasks命令图不单独发表文章了,就在这里接着写了!下面我在给大家介绍一下uTrace-ICD调试WinCE的具体实现方法。

我不是经常写文章,所以文章的组织能力比较差。

可能大家想知道的我没写出来或是写的不是很详细,我会慢慢完善,希望能给大家带来帮助。

以后我会陆续介绍uTrace-ICD调试VXwork,ucos,uclinux,ecos,nucleus,rtems,symbian等嵌入式操作系统的调试方法。

下面就具体介绍WinCE的具体调试方法。

WinCE调试的具体实现首先目标板还是选用SMDK2410评估板,上面有移植好的bootloader,如果没有移植好的,可以按上节所介绍的方法用uTrace来调试BootLoader。

软件环境的配置:安装WinCE开发编译环境Platform Builder。

利用Platform Builder 进行WinCE内核配置,裁减,编译生成Eboot.exe 及nk.exe目标文件供uTrace加载。

注意:编译时也要将生成调试信息的选项选上。

关于wince的调试的具体实现可参考uTRACE-ICD安装目录\T32\demo\arm\kernel\wince。

相关主题