之前介绍过Xentrace可以用来记录Hypervisor中发生的事情,不过有时我们希望手动触发print log的行为(比如观看此时Xen的页表结构、内存状态或者打印当前的cpu栈等等). 亦或是按下某个按键之后的Hypercall就会输出Log,再按一次后就停止输出Log等等。此时Xentrace或者手动添加Hypercall就不能满足我们的需求,而Xen提供了一套方便的接口可以解决这个问题: Debug Key
Debug 系列:
- Add New Hypercall to Xen
- Debug Xen on Physical Machine
- Xentrace
- Debug Key(本篇)
Register a key handler
Debug Key的使用同样非常简单,Xen的源码里面已经实现了一个用例:
1 | /* Code is in source is stale, you can refer it in latest xen source code */ |
代码中首先注册了一个key handler, 并通过register_keyhandler
注册到按键m
上, 之后定义
struct keyhandler
变量并在其中指定handler函数pagealloc_info
。而自己需要实现的功能
就在pagealloc_info
中。
我们自己使用的时候可以再任何Xen的源文件中include xen/keyhandler.h
而后按样例实现自己的函数即可,比如设置某个全局变量的值来控制log的打印和关闭等等。
Using debug key
使用同样也很简单, 在dom0中输入:
1 | sudo xl debug-key m |
debug-key需要xen tools
的支持,因此安装了tool的dom0是调用debug-key最简单的地方。上面的log就是默认的pagealloc_info
的信息输出。
Note
如果根据Xen Log-5中配置配好了后,log同样是可以通过串口打印出来的,这又提供了一种方便的调试手段:)