qemu()一个快速处理器仿真器,目前可以仿真x86, arm, PowerPC, SPARC等处理器。在qemu的全系统仿真(full system emulation)环境下行为类似VMware。但是它又能方便的利用自带的gdb stub调试内核。(不过据说vmware的6.0版本已经在linux host上支持gdb,还没try过)
借着调试mxc_hw_event模块的机会,我试了一把qemu:
首先,ubuntu下安装qemu很方便,直接去源里取,版本目前是0.8.2的。下载一个原始的内核source,加入自己的模块,再设置CONFIG_DEBUG_INFO,使内核编译时加上debug信息。编译bzImage。下载一个rootfs。直接就将qemu跑起来:
#qemu -s -kernel bzImage -append "noinitrd root=/dev/hda" linux-0.2.img
-s 打开gdb stub功能,在1234端口监听gdb连接。这个时候kernel一路狂奔,都快跳出shell。赶快在另一边:
#gdb vmlinux
(gdb) target remote localhost:1234
连接上qemu,qemu立刻hang住,接下来就随你怎么调了。
不过调试时会碰到一些issue。首先是timer interrupt经常会在单步调试时跳出来,导致调试不顺畅,google了一下,发现一个patch,打算先看看qemu的代码,然后hack一把,解决这个问题。其次是对module的调试。module因为一般是后期insmod进去的,所以gdb并没办法自动得到debug symbol,我们可以利用以前UML的调试方式:首先获得module的加载地址(通过变量module_list去取得),然后add-symbol-file,将module object加载到该地址,gdb会去读symbol。
总之qemu调试起来还算蛮爽。不过还没装过一个完整的发行版去试试性能。
阅读(3026) | 评论(1) | 转发(1) |