RTEMS 4.9.5 关于 QEMU MINI2440 的开发小技巧

来源:互联网 发布:mhx控制卡软件 编辑:程序博客网 时间:2024/05/18 02:11

(原创文章,转载请注明出处,谢谢)

 

这里就把我在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函数。

 

如果您有更好的技巧,请不吝赐教!!!

 

(原创文章,转载请注明出处,谢谢)