linux的ppc64,ubuntu11.04上安装qemu ppc虚拟ppc64系统安装Axianux3.0SP1 ppc

前因:

因为项目需要,用qemu虚拟机模拟一个ppc64的环境,然后安装Axianux 3.0 SP1 ppc64版本。过程曲折,最后成功了。虽然慢点,但是测试还是可用的。

宿主机环境:ubuntu 11.04,因为我本上装的是11.04,需要哪些包直接升级即可,不需要自己编译了。

qemu:ubuntu11.04源中自带的0.14.50。

||/ 名称 版本 描述

+++-==============-==============-============================================

ii qemu-system 0.14.50-2011.0 QEMU full system emulation binaries

GuestOS:Axianux 3.0 SP1 ppc64。

宿主机环境准备:

找一台配置稍微好点的机器,安装ubuntu11.04,安装完毕之后,可以使用新立得安装kvm、qemu、qemu-system、openssh、xvnc4viewer。如果希望支持pxe,还需要安装kvm-pxe。依赖关系都是自动解决的。

安装完毕可以使用qemu-system-ppc命令创建一台ppc64的虚拟机了。

意外问题1:openbios-ppc不存在。

qemu安装完毕,使用qemu-system-ppc命令时却报出一个错误:没有找到openbios-ppc。

root@fan3838:/vm/kvm# qemu-system-ppc

qemu: hardware error: qemu: could not load PowerPC bios 'openbios-ppc'

CPU £;0:

NIP fffffffc LR 00000000 CTR 00000000 XER 00000000

MSR 00000040 HID0 00000000 HF 00000000 idx 1

TB 00000000 00000000 DECR fffffffe

GPR00 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR04 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR08 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR12 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR20 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR24 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000

CR 00000000 [ - - - - - - - - ] RES ffffffff

FPR00 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR04 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR08 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR12 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR20 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR24 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPSCR 00000000

SRR0 00000000 SRR1 00000000 SDR1 00000000

Aborted

这个问题在网上搜索了一下还是有很多人碰到的,只需要安装openbios-ppc即可。

虽然ubuntu源里面没有这个包,但是从网上海选了一下,有人提供方法:可以使用debian上的相应包。

下载地址如下(ubuntu 11.04可用):

安装完毕,将/usr/share/openbios-ppc/openbios-ppc拷贝到/usr/share/qemu下面。然后执行qemu-system-ppc可以正常打开一个界面,说明ppc可以正常模拟了。

意外问题2:无法从ppc的光盘启动。

首先将Asianux3.0SP1的光盘镜像iso下载到宿主机上,并创建一个img文件当作磁盘

qemu-img create -f qcow2 /opt/ppc.img 8G

然后使用qemu-system-ppc加上参数从光盘启动开始安装。

root@fan3838:/vm/kvm# qemu-system-ppc -hda /opt/ppc.img -cdrom /home/test/Asianux-3-ppc-dvd-200902230051.iso -boot -d

但是按照上面的命令能出现窗口,但是没有任何提示。无法安装,应该是无法从光驱引导。

原因不明。

看网上有人安装ubuntu-ppc版本,并不时使用iso镜像引导,而是使用内核和initrd文件引导,也下载常识一下。

root@fan3838:/vm/kvm# qemu-system-ppc -hda /opt/ppc.img -kernel /tmp/vmlinux -initrd initrd.gz

既然ubuntu0-ppc是可以通过kernel文件正常启动安装界面的,那么Asianux 3.0 SP1也常识用kernel和initrd方式来启动。

root@fan3838:/vm/kvm#mount -oloop /home/test/Asianux-3-ppc-dvd-200902230051.iso /mnt/dc/

root@fan3838:/vm/kvm# cd /mnt/dc

root@fan3838:/mnt/dc# cd ppc/ppc64/

root@fan3838:/mnt/dc/ppc/ppc64# ls

ramdisk.image.gz TRANS.TBL vmlinuz yaboot.conf

root@fan3838:/mnt/dc/ppc/ppc64# qemu-system-ppc -hda /opt/ppc.img -kernel vmlinuz -initrd ramdisk.image.gz

qemu-system-ppc虚拟机里面仍然无法引导启动?这是为何?

后来惯性尝试了一下qemu-system-ppc64,终于看到了期盼已久的安装界面。

root@fan3838:/mnt/dc/ppc/ppc64# qemu-system-ppc64 -hda /opt/ppc.img -kernel vmlinuz -initrd ramdisk.image.gz -cdrom /home/test/Asianux-3-ppc-dvd-200902230051.iso -m 512 -boot d

其实Asiaunx 3.0 SP1 ppc是ppc64位的操作系统,而qemu-system-ppc应该是启动类似苹果系统那样的32位ppc。

正常安装系统:

启动安装已经成功,安装过程没有什么问题,只是慢,特别的慢。

意外问题3:无法从安装好的硬盘启动。

安装完毕之后,却无法从ppc.img启动,刚看到bios相关提示,马上就退出了。

root@fan3838:~# qemu-system-ppc64 -hda /opt/ppc.img -boot c

qemu: fatal: Trying to execute code outside RAM or ROM at 0xfffffffffff088c8

NIP fffffffffff088c8 LR 0000000000000704 CTR fffffffffff088c8 XER

0000000000000000

MSR 8000000000001000 HID0 0000000060000000 HF 8000000000000000 idx 1

TB 00000000 166492027 DECR 4128475370

GPR00 0000000000003030 0000000007de8000 0000000000000000 0000000000000704

GPR04 fffffffffff088c8 fffffffffff02464 0000000000000000 0000000000000000

GPR08 fffffffffff39000 ffffffffffffffff 0000000000000002 000000000000000e

GPR12 0000000000000012 0000000000000000 0000000000000000 0000000000000000

GPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000

GPR20 00000000fff36b32 00000000fff35fa1 0000000000000000 00000000fffbbb0c

GPR24 00000000fff36b32 00000000fff35fa1 00000000fffba018 00000000fffc0000

GPR28 0000000000000000 00000000004f4200 0000000000000000 0000000000100200

CR 24000044 [ E G - - - - G G ] RES ffffffffffffffff

FPR00 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR04 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR08 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR12 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR16 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR20 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR24 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPR28 0000000000000000 0000000000000000 0000000000000000 0000000000000000

FPSCR 00000000

SRR0 00000000003f4000 SRR1 0000000000083030 SDR1 0000000007e00000

已放弃

root@fan3838:~#

这个结果让我感觉前面的工作白费了。很沮丧。

从网上搜索了一下,很多人遇到同样的问题,但是没有成熟的解决办法。

第二天。

突然想到:既然能够从kernel启动安装,那么也可以通过kernel正常启动系统阿。

所以指定一个计划:

1、仍然用光盘中的kerenl引导通过iso进入救援模式

2、将已经安装成功的系统里面的kernel文件(vmlinuz/initrd.img)拷贝到宿主机

3、从vmlinuz引导启动

这个想法让我兴奋了半天,因为我还没有解决怎么让qemu和局域网通信,所以只能先创建一个share.img文件,有个30M就够用,然后进入救援模式。

(不过第一次忘记-cdrom参数,说救援模式找不到光盘,白等了半天。第二次犯了致命错误,将hdb1挂载到了/mnt下,导致所有命令都无效,又白费半天劲)

root@fan3838:/home/test# nohup qemu-system-ppc64 -hda /opt/ppc.img -hdb /opt/share.img --kernel /mnt/cdrom/ppc/ppc64/vmlinuz -append "rescue" -initrd /mnt/cdrom/ppc/ppc64/ramdisk.image.gz -cdrom /home/test/Asianux-3-ppc-dvd-200902230051.iso -m 1024M -vnc 172.16.86.114:1 &

--append添加内核参数

-vnc 172.16.86.114:1将界面调用vncserver输出,这样可以实现远程(多人)操作。

进入救援模式,将hdb分区格式化成vfat格式,将hdb1挂载/mnt/123/下面,将/mnt/sysimage/boot下的initrd-2.6.18-53.13AXS3.img、vmlinuz-2.6.18-53.13AXS3和etc/yaboot.conf拷贝的/mnt/123下面。关机后将share.img加到xp的虚拟机里面,结果xp不认,只能在xp里面重新分区格式化,再次将这个share.img文件以救援模式放到ppc里面,将内核和initrd.img拷贝到share.img这个虚拟硬盘中。

将share.img再次加到xp虚拟机里面,将内核和initrd.img拷贝到宿主机,然后用这内核和initrd.img启动ppc,成功。

root@fan3838:/opt# nohup qemu-system-ppc64 -hda /opt/ppc.img -hdb /opt/share.img --kernel /opt/vmlinuz-2.6.18-53.13AXS3 -append "root=/dev/VolGroup00/LogVol00" -initrd /opt/initrd-2.6.18-53.13AXS3.img -cdrom /home/test/Asianux-3-ppc-dvd-200902230051.iso -m 1024M -vnc 172.16.86.114:1 &

总结:整个过程前后费时5天,主要是硬件配置较差和前期摸索时间较长,遇到中间的3个问题找方法耗时较长。其实这些问题网上早有人遇到并解决了,只是没有人系统的整理过,所以整理出来。其实即使大家按我的过程操作估计也会有意想不到的结果而导致失败。

后记:

为了让GuestOS也能够和局域网通信,所以还需要搞定网络。以网桥的方式来实现,创建网桥的方式:

ifdown eth0

brctl addbr br0

brctl addif br0 eth0

brctl show

ifconfig br0 172.16.86.113 netmask 255.255.248.0

route add default gw 172.16.80.1 dev br0

ifconfig eth0 0.0.0.0 up

ifconfig

GuestOS启动也需要添加相应参数:

nohup qemu-system-ppc64 -hda /opt/qemu-ppc64/ppcnew.img -hdb /opt/qemu-ppc64/share.img --kernel /opt/qemu-ppc64/vmlinuz-2.6.18-53.13AXS3 -append "root=/dev/VolGroup00/LogVol00" -initrd /opt/qemu-ppc64/initrd-2.6.18-53.13AXS3.img -m 1024M -localtime -vnc 172.16.86.114:1 -net nic -net tap,vlan=0,ifname=tap0 -monitor stdio &

测试过程发现GuestOS经常与局域网的网络断开,原因待查。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值