AXD Multi-ICE进行裸机程序调试的功效相信已经为大家所接受。uClinux内核比较裸机程序,有较大的不同。这里简单介绍如何用AXD源代码级调试uClinux内核。
所提到的uClinux版本是uClinux-dist-20030522.tar.gz,并且已经使用了www.dailzh.net上提供的patch。并且我有义务告诉您,这一调试方法可行,但尚需要完善。
步骤一:使编译器输出dwarf-2格式的调试信息
修改uClinux-dist/linux-2.4.x下Makefile,将CFLAGS_KERNEL设置为-gdwarf-2
然后重新编译uClinux
步骤二:取得所需要的文件
使用image.ram进行调试。同时需要system.map文件,它提供了内核各个符号的位置,并且需要名为linux的文件,它含有调试器所需要的调试信息,这个文件可能有30M或更大。千万别告诉我你不知道我说的文件在什么地方找。
步骤三:使用AXD加载各文件
假设Multi-ICE已经与目标板连接,使用 File à Load Memory From File读入image.rom。这里必须将读入的基地址设置为TEXTADDR
使用File - Load Debugger Symbols读入linux文件,这可能要花费1-2分钟左右时间。请注意,这个文件是提供给调试器,而非下载到板上,因此目标板不需要额外的空间用于存储此文件内容。如果一切顺利,已经可以看到一些符号出现在了AXD中。这表示下载已经成功。
步骤四:用任何文本编辑软件打开 system.map文件,通过查找功能找到你所希望设置断点的函数的入口地址,并跳至该处设置断点。选择process view à source,这将列出所有被编译的源代码列表,选择你所需要的文件双击。建议将image.ram/linux和你的源代码文件放在同一目录中,这样即使因为windows/linux系统路径表示方法不同,你的源代码也能被肢解打开。也可以在option à source path中设置存放源代码的路径。
至此,已经可以开始源代码级的调试了,也许你会遇到一些问题,这是正常的,基本的调试都可以进行了。并且感觉上Interleave Disassembly将能获取更多便利。