win7上怎么用qemu模拟arm环境

win7上怎么用qemu模拟arm环境,第1张

使用Qemu模拟Cortex-A9运行U-boot和Linux 作者来源于网络

我的开发环境: Ubuntu-12.04 所有软件包为最新

1. 安装GNU工具链

sudo apt-get insatll gcc-arm-linux-gnueabi

sudo apt-get insatll g++-arm-linux-gnueabi

安装完成后会在 /usr/arm-linux-gnueabi/ 目录下生成库文件、头文件等。 我安装的GCC版本为:

arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Copyright (C) 2011 Free Software Foundation, Inc.

2. 安装Qemu模拟器

sudo apt-get install qemu qemu-system qemu-utils

这时应该已经可以运行qemu-system-arm命令了, 其版本为:

qemu-system-arm --version

QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2), Copyright (c) 2003-2008 Fabrice Bellard

3. 编译和运行U-boot:

到 ftp://ftp.denx.de/pub/u-boot/ 下载最新版本的U-Boot源代码, 我用的目前最新版本 u-boot-2012.04.tar.bz2

解压后进入源代码目录,在Makefile里面增加两行:

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-gnueabi-

其实就是告诉它使用ARM编译器来编译。

make ca9x4_ct_vxp_config

make

这里配置目标板为 Cortex-A9x4 vexpress. 之所以选这个配置可以从 boards.cfg文件里看到, vexpress是ARM公司使用Cortext-A9的一个开发板,相关的代码在 board/armltd/vexpress/ 目录,配置文件为include/configs/ca9x4_ct_vxp.h。 而且关键的是Qemu里面已经支持这个板卡。

编译完成后会生成u-boot文件

运行:

qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot

或者

qemu-system-arm -M vexpress-a9 -m 256M -serial stdio -kernel u-boot

发现,如果没有指定-nographics, 则必须要加-serial stdio才会有打印。

参数-m 256M为指定内存大小。-M 指定板卡的名称, 支持的板卡可以用-M ?查看, 如下:

#qemu-system-arm -M ?

Supported machines are:

beagle Beagle board (OMAP3530)

beaglexm Beagle board XM (OMAP3630)

............

versatilepb ARM Versatile/PB (ARM926EJ-S)

versatileab ARM Versatile/AB (ARM926EJ-S)

vexpress-a9 ARM Versatile Express for Cortex-A9

vexpress-a15 ARM Versatile Express for Cortex-A15

正常运行的结果:

qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot

U-Boot 2012.04 (Jul 08 2012 - 00:14:08)

DRAM: 256 MiB

WARNING: Caches not enabled

Flash: ## Unknown flash on Bank 1 - Size = 0x00000000 = 0 MB

## Unknown flash on Bank 2 - Size = 0x00000000 = 0 MB

*** failed ***

MMC: MMC: 0

*** Warning - bad CRC, using default environment

In: serial

Out: serial

Err: serial

Net: smc911x-0

Hit any key to stop autoboot: 0

VExpress#

VExpress# printenv

baudrate=38400

bootcmd=run bootflash

bootdelay=2

bootflash=run flashargscp ${ramdisk_addr} ${ramdisk_addr_r} ${maxramdisk}bootm ${kernel_addr} ${ramdisk_addr_r}

console=ttyAMA0,38400n8

。。。。。

注意:如果在检测Flash failed后停止运行,是因为在 arch/arm/lib/board.c里面 board_init_r()函数里检测Flash失败后调用了hang(), 暂时先把hang()去掉就可以运行下去了。

对于项目需求什么的多么奇葩都不为过啦,然后就是收到一个需要在centos7上装个KVM,然后在上面装个win7系统,本来以为就是装个虚拟机嘛,应该很简单,可是第一步就遇到一个bug,天呐,下面就来看看这一系列的奇妙之旅吧:

1、确定虚拟机可以安装的条件是否符合

grep'(vmx|svm)'/proc/cpuinfo

2、开始安装KVM

[root@localhost ~]# yum

install qemu-kvm libvirt virt-install bridge-utils

3、查看是否加载KVM模块成功

[root@kvm ~]# lsmod|grep kvm

kvm_intel

138567 0

kvm

441119 1 kvm_intel

#如果没有这两条,可以用"modprobe kvm"加载;

#相关命令"insmodrmmodmodinfo"

4、#启动libvirtd

[root@localhost ~]# systemctl start libvirtd

[root@localhost

~]# systemctl enable

libvirtd

[root@localhost ~]# systemctl list-unit-files|grep

libvirtd

libvirtd.service

enabled

这个时候如果在之前没有设置网络 的话就会出现如下错误:

Redirecting to /bin/systemctl start

libvirtd.serviceFailed to issue method call: Unit

libvirtd.service failed to load: No such fileor

directory.

然后就该用# ifconfig来查看自己网卡信息,将每个网卡的配置文件里的

/etc/sysconfig/network-scripts/ ifcfg-XXX(XXX代表每个网卡的名字)文件中 HWADDR参数改为上述结果对应网卡的MAC地址

5、安装VNC-server、VNC-viewer组件来进行虚拟机可视化安装

目前VNC主要有两个版本,即realVNC和tigerVNC,关于服务器安装VNC-server,两种版本都可以,但客户端的VNC-viewer,建议安装tigerVNC-viewer,因为realVNC-viewer会在创建虚拟机的端口如590x由于连接加密的问题连接不上服务器。

安装序列号,进行注册# /usr/bin/vnclicense -add VKUPN-MTHHC-UDHGS-UWD76-6N36A这里贡献部分licenseVKUPN-MTHHC-UDHGS-UWD76-6N36A

69NCN-JRLBC-QD28Y-5KLY2-UEE6A

6GQQQ-HXLBS-U2H8Q-B6UB7-R7R6A

8XWCU-ZRJBF-U7BXZ-G5EAE-ZPQ2A

6XQQQ-WXL4Q-NN4KX-NUTC6-8ZK6A

PGUFQ-HTZBB-WNHU7-YHDQC-A7R6A至此服务器端的安装已经完成

客户端安装tigerVNC-viewer首先下载tigerVNC,本客户端采用64位win7,所以下载64位的windows

版本http://sourceforge.net/projects/tigervnc/这里仅安装客户端tigerVNC-viewer然后就可以用vnc viewer远程桌面连接了,这里要用系统帐号的密码登录,

默认端口为5900,远程桌面连接端口则是5900+n(n是vncserver命令指定的)

7、下面就可以安装虚拟机了

1)、创建centOS虚拟机

通过qemu-img创建一个40G的映像文件

#qemu-img create -f qow2 /var/lib/libvirt/images/win710.img 40G

2)、创建运行脚本

#!/bin/.sh

virt-install --connect qemu:///system \

--name win7test2 --ram

2048 --vcpus=2 --cpuset=auto \

--disk

path=/var/lib/libvirt/images/win710.img,bus=virtio,size=100,format=qcow2

\

--network=network=default,model=virtio,mac=RANDOM \

--graphics vnc,port=5910

\

--disk

device=cdrom,path=/var/lib/libvirt/images/cn_windows_7_professional_with_sp1_x64_dvd_621744.iso

\

--disk

device=cdrom,path=/var/lib/libvirt/images/virtio-win-1.iso \

--os-type=windows

--os-variant=win7 --boot cdrom,hd

以上结果:

[root@localhost Admin]#

./installvm.sh

WARNING 需要图形,但未设置 DISPLAY。未运行

virt-viewer。

WARNING 没有为该虚拟机启动控制台,默认为 --wait

-1

开始安装......

创建域......

|0 B

00:00

域安装正在进行。请等待 以便安装完成。

在此过程中可能会出现“域连接不正确的错误”

是因为win710.img文件和cn_windows_7_professional_with_sp1_x64_dvd_621744.iso

权限不同造成的,将其放到一个文件夹下就可以啦!

其中,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd,在脚本中我们将此驱动进行了加载即:virtio-win-1.iso

virt-install命令解析见http://blog.csdn.net/starshine/article/details/6998189

3)、通过vncviewer观察安装进度连接端口处写192.168.1.193:5910,连接上之后出现安装界面,继续安装即可,因为默认没有virtio驱动,所以识别

不了硬盘,需要手动选择,整个过程如下:http://www.centoscn.com/CentOS/Intermediate/2015/1106/6393.html

镜像制作方法一:

centos6.5镜像制作:(首先将CentOS-6.5-x86_64-minimal.iso镜像拷贝到/home下面)

1:

qemu-img create -f qcow2 /home/ttxImg/ttx_centos6.5.img 2.8G

2:

virt-install --connect qemu:///system -n ttx_centos6.5 -r 1024 --vcpus=2 --disk path=/home/ttxImg/ttx_centos6.5.img -c /home/ttxImg/CentOS-6.5-x86_64-minimal.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type linux --network=bridge:br100 --hvm --noautoconsole

windows7镜像制作:

qemu-img create -f qcow2 /home/ttxImg/ttx_win7.qcow2 40000M

virt-install --connect qemu:///system -n ttx_win7 -r 2048 --vcpus=2 --disk path=/home/ttxImg/ttx_win7.qcow2,bus=virtio,format=qcow2,cache=writeback --disk path=/home/ttxImg/virtio-win-0.1-81.iso,device=cdrom,perms=ro --force -c /home/ttxImg/win7_x86_64.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type windows --os-variant=win7 --network=bridge:virbr0 --hvm --noautoconsole

注:假若安装系统时,磁盘损坏,则可以将上述bus=virtio修改为bus=ide

若是还找不到,使用如下命令:

virt-install --connect qemu:///system -n neokylin_lst -r 1024 --vcpus=2 --disk path=/neokylinlst.qcow2,bus=virtio,format=qcow2,cache=writeback --force -c /home/neokylin.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type linux --network=bridge:virbr0 --hvm --noautoconsole

使用virtio网卡驱动:

virt-install --connect qemu:///system -n ttx_win7 -r 2048 --vcpus=2 --disk path=/home/ttxImg/ttx_win7.qcow2,bus=virtio,format=qcow2,cache=writeback --disk path=/home/ttxImg/virtio-win-0.1-81.iso,device=cdrom,perms=ro --force -c /home/ttxImg/win7_x86_64.iso --vnc --vncport=5914 --vnclisten=0.0.0.0 --noautoconsole --os-type windows --os-variant=win7 --network=bridge:virbr0,model=virtio --hvm --noautoconsole

<interface type='bridge'>

<mac address='52:54:00:ac:9c:4c'/>

<source bridge='br1'/>

<target dev='vnet3'/>

<model type='virtio'/>

<alias name='net3'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>

</interface>

windows镜像上传命令:

glance add name="windows" is_public=true container_format=ovf disk_format=qcow2 <windowsxp.img

centos镜像上传命令:

glance image-create --name centos --is-public true --container-format ovf --disk-format qcow2 </home/agen/centos63.img

centos镜像上传命令:

glance add name=centos_6.2_ramdisk disk_format=ari container_format=ari is_public=True <initrd-2.6.32-220.el6.x86_64.img

输出:Added new image with ID: 9

以上命令是先上传镜像的ramdisk文件,注意类型必须是ari

glance add name=centos_6.2_kernel disk_format=aki container_format=aki is_public=True <vmlinuz-2.6.32-220.el6.x86_64

输出:Added new image with ID: 10

以上命令是上传镜像的kernel文件,格式必须是aki

glance add name=centos_6.2_final disk_format=ami container_format=ami is_public=True ramdisk_id=9 kernel_id=10 <centos_6.2_final.img

以上命令是上传主要镜像文件,格式必须是ami,ramdisk_id是刚上传的ramdisk的id,kernel_id同理。

镜像制作方法二:

1、将iso镜像文件转换为img镜像

qemu-img convert -f raw CentOS_6.2_Final64bit.iso /home/createvm/test.img

2、创建配置文件setup.xml

<domain type='kvm' id='21'>

<name>test_mini_centos</name>

<uuid>7e7f54d0-4b62-7c5e-d385-ed72473a5785</uuid>

<memory>1048576</memory>

<currentMemory>1048576</currentMemory>

<vcpu>1</vcpu>

<os>

<type arch='x86_64' machine='pc-0.14'>hvm</type>

<boot dev='hd'/>

</os>

<features>

<acpi/>

<apic/>

<pae/>

</features>

<clock offset='utc'/>

<on_poweroff>destroy</on_poweroff>

<on_reboot>restart</on_reboot>

<on_crash>restart</on_crash>

<devices>

<emulator>/usr/libexec/qemu-kvm</emulator>

<disk type='file' device='disk'>

<driver name='qemu' type='raw' cache='none'/>

<source file='/var/lib/libvirt/images/test_mini_centos.img'/>

<target dev='vda' bus='virtio'/>

<alias name='virtio-disk0'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>

</disk>

<disk type='block' device='cdrom'>

<driver name='qemu' type='raw'/>

<target dev='hdc' bus='ide'/>

<readonly/>

<alias name='ide0-1-0'/>

<address type='drive' controller='0' bus='1' unit='0'/>

</disk>

<controller type='ide' index='0'>

<alias name='ide0'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>

</controller>

<interface type='bridge'>

<mac address='52:54:00:7a:d2:93'/>

<source bridge='br0'/>

<target dev='vnet1'/>

<model type='virtio'/>

<alias name='net0'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

</interface>

<serial type='pty'>

<source path='/dev/pts/0'/>

<target port='0'/>

<alias name='serial0'/>

</serial>

<console type='pty' tty='/dev/pts/0'>

<source path='/dev/pts/0'/>

<target type='serial' port='0'/>

<alias name='serial0'/>

</console>

<input type='tablet' bus='usb'>

<alias name='input0'/>

</input>

<input type='mouse' bus='ps2'/>

<graphics type='vnc' port='5901' autoport='yes'/>

<sound model='ich6'>

<alias name='sound0'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

</sound>

<video>

<model type='cirrus' vram='9216' heads='1'/>

<alias name='video0'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>

</video>

<memballoon model='virtio'>

<alias name='balloon0'/>

<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>

</memballoon>

</devices>

</domain>

3、virsh define setup.xml //创建虚拟机 查看当前系统所有的虚拟机信息:virsh list --all

4、virsh start vm_name //启动你创建的相应名字的虚拟机

注意:假若出现br0 没有此设备则使用sudo /usr/sbin/brctl addbr br0命令

qemu-img create -f raw /home/ttxImg/centos6.5_openstack_ttx.img 3000M

virt-install -n CentOS6.5-openstack-ttx -r 2048 --cpu host -c /home/ttxImg/CentOS-6.5-i386-minimal.iso --disk path=/home/ttxImg/centos6.5_openstack_ttx.img,device=disk,bus=virtio,size=10,format=qcow2 --vnc --vncport=5908 --vnclisten=0.0.0.0 -v --network bridge=br0

用 vncviewer 登录后按照屏幕提示完成 CentOS 安装。需要注意的是在分区阶段把 10GB 硬盘全部划分成一个 ext4 root 分区,不要创建多个分区也不要创建 swap 区:

$ vncviewer 172.16.39.111:5900

安装完后会自动重启,如果没有重启的话按照下面的命令启动刚刚安装好的虚拟机镜像 centos.img,如果出现 failed to find romfile “pxe-rtf8139.bin” 的错误提示可以通过安装 kvm-pxe 解决:

$ sudo qemu-kvm -m 512 -drive file=centos.img -boot c -net nic -net user -nographic -vnc :10

kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.bin"

$ sudo apt-get install kvm-pxe

再次用 vnc 登录虚拟机镜像,安装一些必要工具(因为这个镜像将会是模板,所以最好保持最简最小化):

$ vncviewer 172.16.39.111:5900

# yum update

# yum upgrade

# yum install openssh-server

# chkconfig sshd on

修改分区加载表(/etc/fstab),注释或删除以前的,加上 LABEL=cec-rootfs 一行:

# vi /etc/fstab

#UUID=47a90bea-2d88-4c82-a335-09c1533b1538 / ext4 defaults 1 1

LABEL=cec-rootfs / ext4 defaults 0 0

在网络接口配置里面注释或删除这行 #HWADDR= 一行,启用 DHCP:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

#HWADDR="00:11:22:12:34:56"

#NM_CONTROLLED="yes"

BOOTPROTO=dhcp

ONBOOT="yes"

注射 ssh key 以便外界可以用 ssh -i mykey.priv root@host 的形式无密码登录到虚拟机实例,在 /etc/rc.local 文件中加入下面这些:

# vi /etc/rc.local

...

mkdir -p /root/.ssh

echo >>/root/.ssh/authorized_keys

curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key

| grep 'ssh-rsa' >>/root/.ssh/authorized_keys

chmod 700 ~/.ssh

chmod 600 ~/.ssh/authorized_keys

echo "AUTHORIZED_KEYS:"

echo "--------------------"

cat /root/.ssh/authorized_keys

echo "--------------------"

别忘了还需要修改 sshd 的配置实现无密码登录:

# vi /etc/ssh/sshd_config

...

RSAAuthentication yes

PubkeyAuthentication yes

PermitRootLogin without-password

ChallengeResponseAuthentication no

PasswordAuthentication no

UsePAM no

需要关闭 SELINUX,否则即使上面 ssh 设定允许 root 无密码登录也无效:

# vi /etc/selinux/config

SELINUX=disabled

SELINUXTYPE=targeted

70-persistent-net.rules 会自动添加其他的网络接口,需要删除这个文件避免自动添加除了 eth0 以外的接口,关闭虚拟机准备发布镜像:

# rm -rf /etc/udev/rules.d/70-persistent-net.rules

# shutdown -h now

上传镜像:

glance image-create --name centos6.5_openstack_ttx --is-public true --container-format ovf --disk-format qcow2 </home/ttxImg/centos6.5_openstack_ttx.img

后面为其他地方复制,仅供参考:

Openstack kvm win7镜像制作

2012-12-13 13:35:17 我来说两句 作者:China_OS

收藏我要投稿

Openstack不但能管理linux虚拟机还能管理windows虚拟机,之前做过基于kvm的debian6镜像,今天实战一下win镜像的制作,以win7为例。 www.2cto.com

母系统环境:ubuntu12.10 server + kvm

下载virtio驱动,因为win默认不支持virtio驱动,而通过openstack管理虚拟机是需要virtio驱动的。需要两个virtio驱动,一个是硬盘的,一个是网卡的,即:virtio-win-0.1-30.iso和virtio-win-1.1.16.vfd

1

wget http://autosetup1.googlecode.com/files/virtio-win-1.1.16.vfd

2

wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-0.1-30.iso

下载一个win7的镜像,默认的名字太长了,修改短一点

1

mvcn_windows_7_professional_vl_build_x86_dvd_x15-71025.iso win7.iso

创建一个win7的镜像,raw格式,大小7G

www.2cto.com

1

kvm-img create -f raw win7.img 7G

启动基于win7的kvm虚拟机,映射驱动vfd到软盘A

1

kvm -m 1024 -cdrom win7.iso -drivefile=win7.img,if=virtio,boot=on -fda virtio-win-1.1.16.vfd -boot d -nographic -vnc 10.1.6.228:8

用vnc安装win7,因为默认没有virtio驱动,所以识别不了硬盘,需要手动选择,整个过程如下:

选择键盘


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11943357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存