kvm内核调试小记

换了一台Ubuntu 12.04的机器,很久以前一份实验用内核在新的机器kvm环境下无法启动了。内核没有任何打印输出,也没有panic,就是无信息,有些无所适从。
用bochs试了试,可以进入内核运行啊,很是奇怪。突然灵光一闪,会不会打开我这份内核的paravirt相关配置就好了呢?

果然,修改配置如下:

1
2
3
4
5
6
7
8
CONFIG_PARAVIRT_GUEST=y
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
# CONFIG_XEN is not set
# CONFIG_XEN_PRIVILEGED_GUEST is not set
CONFIG_KVM_GUEST=y
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_CLOCK=y
# CONFIG_PARAVIRT_DEBUG is not set

运行kvm测试:

1
sudo kvm -serial stdio -kernel ../linux-stable/arch/x86/boot/bzImage -append "console=ttyS0,9600"

打印出现,终于可以恢复实验环境了。

附上一份kvm启动脚本:

1
sudo kvm -serial stdio -hda busybox.img -boot c -smp 4 -m 3000 -net nic,model=e1000 -net tap,script=./scripts/qemu-ifup.sh -localtime -display none

qemu-ifup.sh如下:

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
set -x
switch=virbr1
if [ -n "$1" ];then
/usr/bin/sudo tunctl -u `whoami` -t $1
/usr/bin/sudo ip link set $1 up
/usr/bin/sudo brctl addif $switch $1
exit 0
else
echo "Error: no interface specified"
exit 1
fi