免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3477 | 回复: 15
打印 上一主题 下一主题

请教使用过qemu的高手 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-15 16:40 |只看该作者 |倒序浏览
请问我现在有一个操作系统的内核,内核编译后共生成4个文件,其中A是启动文件(在grub中启动点kernel=A),但是B、C、D也都是内核运行时需要用到的文件(在grub中以module的形式出现的)。请问我怎么用qemu来虚拟这个操作系统?

    我以前没有用过qemu等虚拟机软件,从网上找了一个,同时从网上找了一些教程,但是现在网上的教程都是在linux上虚拟windows,大都有以下两步:

1、用dd命令来创建一个虚拟硬盘
2、用qemu从cdrom上安装windows(或者用iso文件)
3、启动qemu

但是我现在没有安装程序,只有已经编译好的内核和原程序,而且内核二进制文件和原代码都在硬盘上,请问怎么才能使用?

是不是需要将这4个文件直接放到虚拟硬盘中?如果是的话请问怎么放啊?

能不能帮我列一个简单的操作步骤?我从网上找了相关资料,但都是在linux上安装windows的(就连在windows上安装linux的我都没有找到),谢谢

另:好象qemu manager是qemu的windows版本吧,无论在windows上或是在linux上虚拟出来都可以(网上关于windows版qemu的说明更少),谢谢

论坛徽章:
0
2 [报告]
发表于 2005-06-15 16:47 |只看该作者

请教使用过qemu的高手

听说安装成功率比较低,而且速度及慢,于是放弃

论坛徽章:
0
3 [报告]
发表于 2005-06-15 17:08 |只看该作者

请教使用过qemu的高手

还行啊,我这样从没有使过的一个白板试的人物,按照网上说明的步骤,第一次安装就成功了,速度我还不知道,因为还不知道怎么用!

之所以用它是听说它有单步跟踪调试的功能,这个很不错。

顺便再问一下,有人知道它的单步跟踪调试功能怎么用吗?

论坛徽章:
0
4 [报告]
发表于 2005-06-15 21:33 |只看该作者

请教使用过qemu的高手

why not try bochs?
support a lot of debug commands!

btw: 操作系统应该有A,引导扇区中的文件,负责把内核加载到内存中,然后跳到内核处开始执行,你得知道A最后会把内核(BCD)加载到内存中哪个地方,以及A如何读取BCD? linux中, bootsect.s -->; A setup.s -->;B 以及B存放到磁盘的那个扇区,因为A肯定在代码中使用bios中断来读取包含B的扇区。

论坛徽章:
0
5 [报告]
发表于 2005-06-16 13:39 |只看该作者

请教使用过qemu的高手

谢谢,A当然是在最后通过jmp直接跳入B的_start:程序段,在grub中按照如下方式进行配置:

kernel=A
module=B
module=C
module=D

我对grub不熟悉,但是我估计grub在启动的时候应该把A、B、C、D都加载进内存,然后先从A开始执行,A在执行到特定步骤再jmp到B。
暂时先不讨论该内核的启动过程,我还想问一下在LINUX下如何制作该操作系统的.img文件?

我下了个bochs,感觉好象比qemu的配置简单些,用bochs已经基本能够运行linux和minix,但是运行的img文件都是从网上下载的,请问我怎么把自己硬盘上的操作系统压缩成img文件?我的硬盘上的操作系统共有4个主要文件,这4个内核用到的文件都是在LINUX下编译的,然后配置GRUB后用GRUB启动可以进入这个内核,请问我怎么把这4个内核文件的运行环境做成硬盘映像 (.img)文件让bochs来引导?

论坛徽章:
0
6 [报告]
发表于 2005-06-17 09:39 |只看该作者

请教使用过qemu的高手

假设A是引导代码,BCD是操作系统的其它代码,A最后执行jmp跳到B开始执行,不过,请不要忘记,A中必须包含有把BCD从磁盘读入内存相应地点的代码!

假设BCD,从磁盘的第二个扇区开始。把img文件最后输出到软盘,则可以:

dd if=A of=/dev/fd1 seek=0
cat C >;>; B
cat D >;>; B
dd if=A of=/dev/fd1 seek=1

这样A就在引导扇区,BCD从第2扇区开始了。

论坛徽章:
0
7 [报告]
发表于 2005-06-17 11:47 |只看该作者

请教使用过qemu的高手

非常感谢,我基本明白了,我还想再问一下,

dd if=A of=/dev/fd1 seek=0
cat C >;>; B
cat D >;>; B
dd if=A of=/dev/fd1 seek=1

的最后一个命令是不是应该写成
dd if=B of=/dev/fd1 seek=1

?要不然B怎么考到fd1中?
还有执行了cat C(D) >;>; B 之后,是不是就不用将C、D考到fd1中了?

还有如果我不放在软盘中,而是放在x.img中的话,是不是执行了
mount -oloop x.img /usr/root/x 之后,就可以用dd if=A of=/dev/x seek=0 来把A考到x.img的启动扇区中?这样的x.img是不是就可以用来启动了?






原帖由 "dzbjet" 发表:
假设A是引导代码,BCD是操作系统的其它代码,A最后执行jmp跳到B开始执行,不过,请不要忘记,A中必须包含有把BCD从磁盘读入内存相应地点的代码!

假设BCD,从磁盘的第二个扇区开始。把img文件最后输出到软盘,则?.........

论坛徽章:
0
8 [报告]
发表于 2005-06-17 22:34 |只看该作者

请教使用过qemu的高手

汗~~

对,我打错了,应该是:
dd if=B of=/dev/fd1 seek=1

另外:
try:

losetup /dev/loop1 x.img
dd if=A of=/dev/loop1 seek=0

enjoy~~~

论坛徽章:
0
9 [报告]
发表于 2005-06-20 14:42 |只看该作者

请教使用过qemu的高手

非常感谢您的回复,以下是我实际操作的结果:

   A = kickstart
   B = ia32-kernel
   C = pingpong
   D = sigma0

因为该内核符合Multiboot规范,所以在grub的menu.lst中有如下配置:

   kernel  = kickstart
   module = ia32-kernel
   module = pingpong
   module = sigma0

所以我猜测(我对操作系统是“只通一窍”,对grub是“一窍不通”):
ia32-kernel不是由kickstart来读取的,而是由grub来读取的,不知道对不对。

创建img文件的步骤如下:

1     dd of=/root/x.img bs=1024 seek=50000 count=0
2        losetup /dev/loop2  /root/x.img
3       cat pingpong >;>; ia32-kernel
4       cat sigma0   >;>; ia32-kernel
5       dd if=kickstart  of=/dev/loop2 seek=0
6       dd if=i32-kernel of=/dev/loop2 seek=1
7       losetup -d /dev/loop2

然后用bochs来引导这个img文件,但是“事情总是向着不好的方向发展”(这好象是一个非常有名的话,是谁说的来着?忘了!)

bochs引导后只是一闪然后就退出了
错误的日志中有如下描述:

......
......(以上省略)
00000730599i[BIOS ] ata0-0: PCHS=10/16/63 translation=none LCHS=10/16/63
00000779199e[HD   ] device set to 1 which does not exist
00000806193i[BIOS ] Boot from Hard Disk 0 failed
00000827969p[BIOS ] >;>ANIC<< Not a bootable disk
00000827969i[SYS  ] Last time is 1119239493
00000827969i[CPU0 ] real mode
00000827969i[CPU0 ] CS.d_b = 16 bit
00000827969i[CPU0 ] SS.d_b = 16 bit
00000827969i[CPU0 ] | EAX=0000040a  EBX=0000d730  ECX=000b0001  EDX=00000402
00000827969i[CPU0 ] | ESP=0000ffa6  EBP=0000ffaa  ESI=0000733d  EDI=00000003
00000827969i[CPU0 ] | IOPL=0 NV UP DI PL ZR NA PE NC
00000827969i[CPU0 ] | SEG selector     base    limit G D
00000827969i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D
00000827969i[CPU0 ] |  CS:f000( 0000| 0|  0) 000f0000 0000ffff 0 0
00000827969i[CPU0 ] |  DS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00000827969i[CPU0 ] |  SS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00000827969i[CPU0 ] |  ES:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
00000827969i[CPU0 ] |  FS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00000827969i[CPU0 ] |  GS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00000827969i[CPU0 ] | EIP=00000508 (00000507)
00000827969i[CPU0 ] | CR0=0x00000010 CR1=0 CR2=0x00000000
00000827969i[CPU0 ] | CR3=0x00000000 CR4=0x00000000
00000827969i[     ] restoring default signal behavior
00000827969i[CTRL ] quit_sim called with exit code 1
(结束)

这个提示的3、4、5行清清楚楚的写着从硬盘(应该就是img文件的映象磁盘)的0磁道引导失败,我真的很郁闷,是不是0磁道不应该放kickstart啊?

实在不明白错在哪里了,是不是我应该在0磁道放grub啊?

论坛徽章:
0
10 [报告]
发表于 2005-06-20 15:19 |只看该作者

请教使用过qemu的高手

你的x.img文件的引导扇区没有0xaa55标志,所以启动时,系统认为不是启动盘~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP