Chinaunix首页 | 论坛 | 博客
  • 博客访问: 741999
  • 博文数量: 124
  • 博客积分: 3156
  • 博客等级: 中校
  • 技术积分: 1584
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-02 10:29
文章分类

全部博文(124)

文章存档

2012年(3)

2011年(2)

2010年(61)

2009年(34)

2008年(24)

我的朋友

分类: LINUX

2010-06-04 18:29:14

做过嵌入式开发的人都知道,在ADS1.2或者SDT2.5下面,单步调试是很简单的,但是gnu/uClinux下就要麻烦一些。

下载了一个u-boot.1.1.4,按照u-boot的架构,在smdk2410的基础上,新建工程,并用cygwin编译成功。

调试方面麻烦一些,手头上有一个仿真器TechorICE Emulator,但是调试arm-elf-gcc编译出来的文件把握不是很大。

找到u-boot-1.1.4目录下面,有3个文件,一个是u-boot,一个是u-boot.srec,一个是u-boot.bin。其中u-boot是带调试信息的elf格式文件。就是这个了!

打开axd debugger (ADS1.2带的),连接Emulator,用Load Image,装载u-boot。u-boot文件装载到RAM里面成功。

接下来可以单步运行。

一开始是gnu汇编文件(start.S),ARMCC的汇编语法与gnu的不一样,所以不能显示出源代码。

进入了C函数,可以进入源代码调试,不过先要设定源代码的目录。在adx Debugger的Options --> Source Path,将源代码的几个目录都一一加入。就可以做C语言的单步调试了。^_^

也许有人问:调试信息也包含了这些信息啊,为什么还要设定源代码的目录呢?因为我是在cygwin环境下编译的,在该环境中,u-boot- 1.1.4的全路径是“/arm/u-boot-1.1.4/”,而不是windows下的目录“c:\cygwin\arm\u-boot- 1.1.4”,所以调试信息里的路径全是“/arm/u-boot-1.1.4/”,可以看看的depend的信息。

设定源代码的目录非常重要,否则就实现不了源代码的单步调试了。^_^

用cygwin作为开发环境,也就是这个道理。基本上都是在Windows下编译,修改,调试。效率比linux环境下要高一些。(当然这只是我的个人见解 ^__^)

我跟一个写uClinux的同事讨论了蛮久,如何源代码级的调试uClinux。用上面的方法是可以调试kernel的,但是调试应用程序(app)好像不行(他说不行)。如果哪位大大实现了,请务必告诉我,谢谢了!

 简单总结一下:
1)产生带调试信息的elf格式的文件。
2)用ADS1.2带的调试器Debugger装载这个文件。
3)修改源代码的目录。
4)完成。



其实AXD的功能非常强大,特别是其命令行。

打开AXD,按下 Alt + L ,就可以打开一个命令行,

非常有用的命令如:
LoadBinary = 将一个文件导入SDRAM
LoadSymbols = 导入符号表
SetPC = 设置PC寄存器
Run = 开始运行
OB + 文件名 = 按照批处理文件运行

所有的命令在GUI里面也是有的,可以利用批处理文件(OB命令)来免去敲命令和点菜单的麻烦,

以调试u-boot为例,写一个批处理文件放在D盘,文件名为u-boot.txt,内容如下:
loadbinary Y:\u-boot-1.1.4\u-boot.bin 0x00100000
loadsymbols Y:\u-boot-1.1.4\u-boot.axf
setpc 0x00100000
run

打开AXD,按下ALT+L,键盘输入:ob d:\u-boot.txt

那么AXD会自动运行批处理文件内的命令,自动载入u-boot的二进制代码,自动载入符号表,设置指针为0x00100000,并开始运行,如果在AXD中断运行,会自动显示源代码! cool~~!

如果有命令不清楚的话,在命令行下,输入 help ,可以打开帮助文件!

------------------------------------------------------------
axf文件的获取:
在linux下编译u-boot后,有一个u-boot文件,把它改名为u-boot.axf即可!

阅读(2211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~