(原创文章,转载请注明出处,谢谢)
这里就把我在mini2440上的一些调试小技巧拿出来,做个记录。本人愚钝,希望高手宽宥,低手一起加油。
1.图形化的调试端:
Linux下使用gdb单步调试比较痛苦,文本界面很不方便,有没有图形化界面的工具呢?有一个,Insight。关于它,我有一个好消息,和一个坏消息。 :)
坏消息就是,人家已经停止更新这个玩意了……好消息是,我实际使用了一下,调试 rtems 4.9 的代码是可以使用的。
(使用这个链接下载insight http://sourceware.org/insight/downloads.php )最近的一个版本是insight 6.8 -1
tar xjvf insight-6.8-1.tar.bz2
cd insight-6.8-1
./configure --target=arm-rtems4.9 --enable-sim --prefix=/usr/local
make all;make install
编译时间较长,耐心等待。
编译完成后,使用arm-rtems4.9-insight,看看。 :),这里注意一下,insight-6.8-1的目录不要删除,不然用一段时间后insight会出一些奇奇怪怪的问题,估计是安装不全面。
打开qemu/mini2440/mini2440_start.sh的脚本,(如果您看不懂这步,请参考 Linux 下 QEMU mini2440 网络配置 一文)。在脚本 cmd = "$base/../arm-softmmu/qemu-system-arm / 后添加一空行,写上(红字为添加部分):
cmd = "$base/../arm-softmmu/qemu-system-arm /
-S -s /
-M mini2440 $* /
然后重命名为debug.sh
回到qemu文件夹下输入命令运行qemu:
./mini2440/debug.sh
这时启动 arm-rtems4.9-insight,选择菜单File->Open,打开一个rtems编译好的elf文件。然后选择菜单File->Target Settings...
在 connection 中的 Target:选择 Remote/TCP;Hostname:中写入127.0.0.1;Port:写入1234 点击OK。
选择菜单 Run->Download,速度很快,你也许看不到进度条。:), 拖动文本,设个断点,试试菜单control->Step,快捷键s……
insight还比较稳定,虽然比文本的差了一些,但是方便很多了。Enjoy it !!!
关于这个呢,其实还有一招,朋友教我的,但我用insight,还没去试过,大家就当研究之用了。rvmdk可以加载 elf 文件单步调试,这可是一个好消息。但牵涉D版的问题,劝大家谨慎从事。不过如果没有版权问题的话,在ARM上使用起来应该是相当爽。
2.print
Linux下的人都知道printf夹杀大法,但rtems是应用程序和核心混在一起的,printf是库函数,有重入性的问题,不是到处可以乱用的。如果你不知道怎么区分,一个安全的办法是使用printk函数打印你需要的数据。如果您能分得清楚,保证代码的完整性和可读性,在合适的地方选择printf、printk,一般来说内核、中断选择printk,应用程序使用printf。
3.使用rtems的命令行终端
RTEMS的命令行终端提供了非常丰富的命令,如果资源允许的情况下,跟踪应用程序,是非常不错的选择。具体也不多说了,大家可以选择network-demos-4.9.5.tar.bz2中的telnetd示例编译运行一下,使用命令:telnet $(rtems地址) 呵呵,进入命令行,用户名是:root,密码直接回车,进入后。
试试 malloc info、malloc stats
看看 netstats -i -m
还有很多其他命令,请参考rtems官方手册 shell.pdf。
4.如果资源不够,可以采用一些其他的办法来实现与shell同样的功能。
比如说要打印 malloc info,可以在代码合适的地方调用:malloc_info 函数。
比如说打印cpu的利用率,可使用:rtems_cpu_usage_report函数。
如果您有更好的技巧,请不吝赐教!!!
(原创文章,转载请注明出处,谢谢)