LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: Debentoo Gao

用QEMU模拟运行 WIndows 98 SE (2004.12.31更新)

[复制链接]
发表于 2006-4-3 16:37:14 | 显示全部楼层
Unable to write ot drvie c:
Date or Files may be lost
回复 支持 反对

使用道具 举报

发表于 2006-4-4 09:10:39 | 显示全部楼层
看不懂
============================
   使用QEMU+GDB能够实现源代码级的内核调试,但是,存在一个问题──当内核允许
中断时,单步命令(n与s)会进入时钟中断。通过浏览QEMU的源代码,大体把原因找
了出来。

  单步命令(n与s)在gdb远程调试通讯协议中是s(参看info gdb),qemu的gdb
stub在受到s命令后将虚拟CPU进入单步状态,但是在接收到s命令前,qemu的虚拟CPU
是停止的(在等待gdb的命令),注意,这个时候,虚拟时钟计时并没有停止,所以,很
可能在qemu的虚拟CPU还没开始的时候就需要触发时钟中断了,但是虚拟CPU还在停止
状态,无法触发。接收到s命令后,虚拟CPU开始执行指令。这时,如果内核允许中断,
虚拟时钟就将触发中断,所以s命令执行一条指令后停止在时钟中断处理程序的开始处,
而不是希望的函数中下一条指令处。

  现在看一下问题的解决方法。在我看来,需要修改gdb远程调试内核时单步命令的语义。
有三个方向。
1.在gdb上修改。在处理用户的n与s命令时不是发送协议中的s命令,而是分两步。首先确
定下一条指令的开始位置(或者下一行源程序对应的指令的开始位置)。对于有些RISC机器
机器指令固定为某个长度,那么确定这个位置比较简单,但是对于像x86这样的变长指令的
体系结构就需要稍微麻烦一点(需要确定当前指令的长度等)。然后假如第一步确定的地址
是naddr。现在像处理用户的tbreak *naddr一样处理就可以了,接着发送继续运行命令
c就可以了。
2.在qemu的gdb stub上修改协议命令s的处理方法。接收到s命令后不是让虚拟CPU进入单
步执行状态,而是确定在没有中断的情况下,下一条指令的位置(注意对于当前是跳转指令
的情况处理比较复杂),然后在这个位置设置临时断点,在虚拟CPU到达这个断点进入gdb
stub后立即将其取消。
3.在虚拟CPU停止时将虚拟时钟也停止。现在这只是一个想法,要看看QEMU中与虚拟时钟
相关的地方是不是很多,如果可行,感觉这种方法比较好。

这三种处理方法中,我认为1,3比较好,实现起来清晰明了,但是需要对gdb的代码比较熟
悉。2方法比较复杂,尤其是在当前指令是跳转指令时,不太容易确定临时断点的位置。

另外作为暂时的权宜之计,我们可以只使用tbreak +offset来代替n与s命令。
回复 支持 反对

使用道具 举报

发表于 2006-4-17 09:07:29 | 显示全部楼层
正在安装win2000,不过运行到copy文件后(就是那个 copy进度条),然后是黑屏,硬盘灯一直亮.

才发现不是黑屏,是显示有问题,多涮新几次就好了,不过安装过程具慢,=吧.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-17 09:35:05 | 显示全部楼层
Post by ground
正在安装win2000,不过运行到copy文件后(就是那个 copy进度条),然后是黑屏,硬盘灯一直亮.

要加-win2k-hack参数安装
回复 支持 反对

使用道具 举报

发表于 2006-4-17 10:03:17 | 显示全部楼层
到gentoo版看看,我已经用qemu安装了2003server,爽!
回复 支持 反对

使用道具 举报

发表于 2006-4-17 10:17:53 | 显示全部楼层
谢谢!
Windows 2000 has a bug which gives a disk full problem during its installation,什么意思?
回复 支持 反对

使用道具 举报

发表于 2006-4-17 18:04:49 | 显示全部楼层
Post by 小楼东风
能不能出声,最近需要IE上网校,播放插件只支持windows。


可以出声的,运行qemu加个参数,你自己看看。不过linux下的的声音会被占用。
回复 支持 反对

使用道具 举报

发表于 2006-4-19 00:19:13 | 显示全部楼层
我有个问题请教一下,当qemu用全屏的模式启动后,如何切换到当前运行qemu的主机系统,或者说缩小/最小化qemu的窗口。
回复 支持 反对

使用道具 举报

发表于 2006-5-30 12:02:32 | 显示全部楼层
Post by Debentoo Gao

QEMU有两种模拟方式:
1.完整的系统模拟:这种模式下,QEMU模拟一个完整的系统(比如说,整个PC),包括CPU和周边的计算机设备。你可以不必重启就可以同时运行不同的系统来调试系统代码。

2.User mode模拟(只能在Linux宿主机下使用):这种模式下,QEMU能够在Linux下运行从一个CPU到另一个CPU的编译过程。这通常可以被用来运行Wine模拟器或者是交错式的编译和调试。


能否详细解说下这两种模式?
还有就是像楼主所安装的98是哪一种模式?
回复 支持 反对

使用道具 举报

发表于 2006-5-30 12:05:36 | 显示全部楼层
Post by kite
我有个问题请教一下,当qemu用全屏的模式启动后,如何切换到当前运行qemu的主机系统,或者说缩小/最小化qemu的窗口。

用Ctrl+Alt+f即可来回切换
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表