Qemu 2.6.2
为了对接,将QEMU版本切换为2.6.2重新编译。
准备
首先下载,更改2.6.2源码。
wget https://download.qemu.org/qemu-3.1.0.tar.xz
tar xvJf qemu-3.1.0.tar.xz
然后进行编译,花费时间。
cd qemu-3.1.0
./configure --target-list=x86_64-softmmu
sudo make -j4 && sudo make install
编译时可能出现的问题:
检查qemu版本。
qemu-img --version
qemu虚拟机
创建qemu镜像文件,分配空间40G。
qemu-img create -f qcow2 windows7.qcow2 40G
创建win7的qemu虚拟机,64位Win7。
sudo qemu-system-x86_64 -smp 1 -m 4096 --enable-kvm windows7.qcow2 -cdrom Win_Pro_7_64.ISO
启动虚拟机
sudo qemu-system-x86_64 -smp 1 -m 4096 --enable-kvm windows7.qcow2
编译驱动
下载VS编译驱动,SDK和WDK版本必须一致。最好先按照SDK,后安装WDK;方便WDK关联SDK,或者直接在WDK配置文件进行关联。
然后按照VS提示进行编译。
安装驱动
sc命令创建驱动,name
驱动名字,binPath
驱动编译后的.sys
文件路径,type = kernel
内核驱动。
sc create name binPath= ".sys" type= kernel
bcdedit工具使系统进入无签名测试模式。
bcdedit /set testsigning on//无签名测试模式开启
启动驱动
sc start name
Trouble 1 QEMU[Stopped]
问题描述:
- 编译bitbucket上面的2.6.2之后启动QEMU[Stopped];
./recompile.sh
之后仍然这样;
探索
kvm_handle_v2e()
inqemu-2.6.2/kvm-all.c
;CPUState结构体在qemu-2.6.2/include/qom/cpu.h
;- 重要函数:
hanld_v2e_violation()
inlinux-4.10.2\arch\x86\kvm\vmx.c
cpu_exec()
inqemu-2.6.2\kvm-all.c
问题定位及解决
linux-source/include/uapi/linux/kvm.h
里面kvm_run
这个结构体需要跟Qemu里面的qemu/linux-headers/linux/kvm.h
里面kvm_run
保持一致。
里面的成员fault_gfn
原本放到最后面,但是它们后面的成员不太一样,因此我放到前面了。
所以把linux内核的fault_gfn
放到最前面,然后执行./recomplish.sh,再启动Qemu就没问题了。 –高学长
*qemu/linux-headers/linux/kvm.h
里面也要加上fault_fgn
成员。:)
T2 VNC
问题如下:
vnc server running on "127.0.0.1: 5900"
通过VNC打开QEMU客户机,可远程操控QEMU GUEST。
T3 recompile.sh
问题:每次重启后需要重新执行sh文件。 这个问题年前就已经解决了,原因是recompile之后没有更新grub。
sudo update-grub2
update 3.21
打开QEMU2.6.2时候,如果不加--enable-kvm
,出现蓝屏,qemu console报错信息:
main-loop:WARNING: I/O thread spun for 1000 iterations.
qemu-system-XX
的一个bug,网上从qemu 2.3.0
开始就有,最终Fix included in qemu-kvm-rhev-2.12.0-5.el7
,应该是qemu 2.12.0-5.e17
版本解决该bug。
vl.c
在qemu-2.6.2\
目录下。
diff -u a/vl.c b/vl.c
--- a/vl.c 2015-11-20 01:45:00.179169442 +0100
+++ b/vl.c 2015-11-20 01:44:22.181778840 +0100
@@ -1914,6 +1914,7 @@
#endif
do {
nonblocking = !kvm_enabled() && !xen_enabled() && last_io > 0;
+ nonblocking = 0;
#ifdef CONFIG_PROFILER
ti = profile_getclock();
#endif
hah,蓝屏和死锁竟然不是一个bug,蓝屏是QEMU(no KVM)启动Windows客户机长存的问题。
qemu-1.2.0时提出的,但是2.6.0已经集成了这个补丁。