免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: dnyr
打印 上一主题 下一主题

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

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

请教使用过qemu的高手

看看你的kiskstart是512字节吗? 最后一个word是不是0xaa55?

论坛徽章:
0
12 [报告]
发表于 2005-06-20 16:37 |只看该作者

请教使用过qemu的高手

谢谢您的提醒,我想kickstart并不是那个应该放在0磁道的程序,它的大小是122kb,开头和结尾都没有“0xaa55”,我越来越觉得应该把grub也打在img文件中了,呵呵。

   从kickstart的源码中可以看出来kickstart从grub中接收了一些参数,我猜可能是这样的:
    grub按照menu.lst中的配置先把各个程序的起始地址保存起来然后把这个地址传递给了kickstart (或者是kickstart通过寄存器主动接收的,kickstart 是grub第一个调用的程序),然后kickstart通过grub传递过来的地址来引导i586-kernel。

请问,“0xaa55”是做什么用的,有什么含义吗?除了这个还有什么需要注意的吗?

我在windows下用winimage创建了一个1.img,然后用uedit32把1.img开头的winimage的特殊说明删除,这样开头就是“55 aa .. ..”,然后用bochs引导的结果还是一样的,错误提示和上面一模一样啊?

如果在LINUX下怎么才能生成一个开头是“55 aa .. .. .. .. ”的img文件呢?


另:

如果方便的话,您能不能在空闲的时间里帮我试试怎么才能做出这个img文件?非常感谢!

我是从这个连接下载的内核二进制文件
http://www.l4ka.org/download/pistachio/pistachio-ia32-0.4.tar.bz2

其中i586-kernel、kickstart、pingpong、sigma0是4个主要文件

在LINUX2.4中将grub的menu.lst按照下面样子配置就能够启动了

(操作系统名字)
kernel  =kickstart
module=i586-kernel
module=sigma0
module=pingpong

其中i586-kernel才是真正的内核程序,kickstart只是做一些初始化然后最后跳入i586-kernel中执行,这个内核启动后只有一些选项。

我现在需要把它们放进一个img文件中用bochs来启动它

再次谢谢了!

[quote]原帖由 "dzbjet"]你的x.img文件的引导扇区没有0xaa55标志,所以启动时,系统认为不是启动盘~~~[/quote 发表:

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

请教使用过qemu的高手

0xaa55应该在引导扇区的第510字节的位置。

至于如何把0xaa55写入,我看不用,因为grub应该是放在引导扇区中的,否则怎么会执行grub,或者说引导扇区的代码把grub读入内存,然后执行grub程序,所以你就不用在弄引导扇区的代码了。

你猜得差不多,kickstart应该是干这个用的,它应该从grub接收参数,得知要把kernel读到内存的哪个地方,然后就会跳到那个地方来执行kernel的程序。

论坛徽章:
0
14 [报告]
发表于 2005-06-24 09:55 |只看该作者

请教使用过qemu的高手

您好:

我从网上找了一个镜象的地址,这个镜象确实可以在BOCHS中使用。
http://www.l4ka.org/download/pistachio/pistachio-ia32-0.4-demodisk.bin.bz2
我想如果以后再遇到这种情况总不能老是从网上找相应的镜象吧,所以我很象自己制作出一个能够引导的img文件。

我看了一下这个镜象,里面确实包含了GRUB,和其他几个主要文件,所以我也制作了一个IMG文件,执行以下步骤:

1、(dd命令创建镜象文件,假定为x.img)
2、(用losetup命令将x.img与/dev/loop2挂上)
3、(用mkfs把/dev/loop2格式化成vfat)
4、(mount /dev/loop2 到/mnt)
5、(把grub拷贝到/mnt中,在这里我想应该拷贝到一个固定的地点,但是我基础不好,实在不知道应该从x.img的哪一点开始拷贝,根据您上面的提示,我认为grub应该是在引导扇区的,引导扇区是不是就是0磁道,但是经过mkfs命令之后,文件的最开始的位置是fat格式的一些描述,如果把grub放在那里会不会破坏fat格式的描述?)
6、(然后考虑到grub是在启动的时候会自动查找kernel和module的文件存放位置,所以kickstart和i32-kernel和simga0和pingpong就不需要拷贝到固定的位置了,只要把它们拷贝进/mnt就行)

我这么做了,但是不能用bochs启动,用uedit32比较的时候,两个文件的差别很大,我想最大的错误就是grub保存的起使位置,我该怎么来确定grub的起使位置啊?

从那个正确的镜象上看,是从第40个字节开始的,但是两个文件中grub数据的保存地址是不一样的,难道文件拷贝操作不是连续向文件中写入数据的吗?(比如从A拷贝一个1K的文件到B,假设B里面拷贝之前什么也没有,是空文件,难道这1K的数据不是保存在B中连续的一段空间中吗?)

或者是那个正确的镜象文件用grub做了什么其他的操作?(比如说用执行grub命令并附加某些参数,由grub自己象磁盘中的固定位置写入一些数据来告诉磁盘“启动的时候用我来启动”?),如果是这样的话,是什么命令啊?

论坛徽章:
0
15 [报告]
发表于 2005-06-25 00:50 |只看该作者

请教使用过qemu的高手

顶一下

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

请教使用过qemu的高手

这个版块刷新太快了,再顶一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP