葡萄籽油
在x86_64平台利⽤qemu搭建基于aarch64的虚拟机测试环境
1.安装qemu-system-aarch64
2.UEFI固件下载
3.操作系统下载
4.创建虚拟硬盘
5.虚拟机安装
6.配置⽹络
7.虚拟机启动
8.换源
9.参考链接
1.安装qemu-system-aarch64
直接⽤apt安装 sudo apt install -y qemu-system-arm
或者是从源码安装
wget /qemu-2.12.1.tar.bz2
tar -xjvf qemu-2.12.1.tar.bz2
cd qemu-2.12.1/
./configure --target-list=aarch64-softmmu
make
sudo make install
在安装的过程中可能会报缺少⼀些依赖包,我在安装过程中安装了以下依赖包后成功安装。
sudo yum install zlib-devel
sudo yum install glib2-devel
sudo yum install pixman-devel
安装成功后qemu-system-aarch64会安装到/usr/local/bin/⽬录下。液面传感器
2.UEFI固件下载
以前系统的启动过程可以简化为 BIOS固件—->引导程序—->操作系统,但是由于传统的BIOS启动⽅式存在许多问题,如bios运⾏在16位模式,寻址空间⼩,运⾏慢等,所以现在X86、ARM架构等架构都改采⽤了改进的 UEFI 启动⽅式(当然会有兼容传统BIOS启动⽅式的考虑),这种情况下系统启动过程如下图所⽰。
UEFI模式下系统启动流程
上图启动过程详细我也不太清楚,⼤家可以看看wiki上的进⼀步介绍,这⾥需要说明的是,UEFI启动中最开始执⾏的也是专门的UEFI固件。因此,我们要想引导到安装光盘(⽀持UEFI模式)进⼀步安装aarch64架构的系统,先要下载对应架构(这⾥是aarch64)的UEFI固件。
3.操作系统下载
我这⾥采⽤的是arm64架构的ubuntu 16.04 server版:ubuntu-16.04.3-server-arm64.iso
4.创建虚拟硬盘
利⽤qemu-img指令可以创建1个空的虚拟硬盘,便于后⾯安装的时候将系统安装到虚拟硬盘上。
qemu-img create -f qcow2  ubuntu16.04-arm64.qcow2 40G
创建40G⼤⼩的镜像,格式为qcow2,相⽐raw有个优势,⽐如同样创建40G的镜像,qcow2格式的size是真正使⽤的size⽽不是40G
5.虚拟机安装
执⾏如下命令:
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu-16.04.6-server-arm64.iso,id=cdro
韦拔
执⾏上述命令时确保QEMU_EFI.fd、ubuntu-16.04.6-server-arm64.iso、ubuntu16.04-arm64.qcow2⽂件在当前⽬前下,否则需要
修改成对应的⽂件路径。在上述参数中,指定安装光盘这⾥-drive if=none,file=ubuntu-16.04.3-server-
arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom我在有些⽹站上到了不同的⽅式并尝试,但进⼊到光盘的安装界⾯后会报如下图所⽰错误,最后发现上述指定能正确的完成安装。
如果不想做镜像,可以使⽤现成的镜像:
提取码:14dx
⽤户名和密码都是jefby
6.配置⽹络
虚拟机启动后,为了和宿主机连接,就需要采⽤桥接模式,需要⾃⼰在宿主机上搭建⽹桥
qemu采⽤两种⽅式配置上⽹:
其⼀,默认⽅式为⽤户模式⽹络(Usermode Networking),数据包由NAT⽅式通过主机的接⼝进⾏传送。
其⼆,使⽤桥接⽅式(Bridged Networking),外部的机器可以直接联通到虚拟机,就像联通到你的主机⼀样。
⽬标拓扑如下:
主机上tap0和eth1通过br0桥接在⼀起,tap0对应虚拟机的eth0。HOST上的br0配置地址192.168.1.2/24作为主机地址,虚拟机的
eth0配置地址为192.168.1.5/24
教导处教学工作总结
1.配置host
桥接就是把⼀台机器上的若⼲个⽹络接⼝“连接”起来。其结果是,其中⼀个⽹⼝收到的报⽂会被复制给其他⽹⼝并发送出去。以使得⽹⼝之间的报⽂能够互相转发。
⽬的:使得局域⽹内可以通过ssh登陆虚拟机
1.1⾸先,安装两个配置⽹络所需软件包:
apt-get install bridge-utils        # 虚拟⽹桥⼯具
apt-get install uml-utilities      # UML(User-mode linux)⼯具
1.2创建⽹桥,并添加端⼝,如下显⽰的是/etc/network/interface配置⽂件下的设置
auto lo
iface lo inet loopback
auto br0
iface br0 inet static          #之前上⽹时采⽤静态IP,所以这⾥依然使⽤此
address 192.168.0.66        #将之前上⽹的ip地址分配给⽹桥
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.2
bridge_ports ens33 tap0    #为⽹桥添加两个接⼝,分别是ens33 (之前默认的上⽹⽹⼝)和tap0
bridge_stp off
bridge_fd 0
bridge_maxwait 0陈奕迅最好听的歌
dns-nameservers 114.114.114.114
#添加接⼝ens33,上⽹⽅式采⽤⾃动
auto ens33
iface eth0 inet manual
此时,查看当前⽹络配置:注意:ens33是未分配ip的。
1.3使⽤brctl配置⽹桥:
tunctl -t tap0 -u root      # 创建⼀个tap0接⼝,只允许指定⽤户访问
brctl addif br0 tap0                # 在虚拟⽹桥中增加⼀个tap0接⼝宋佳和小宋佳
ifconfig tap0 0.0.0.0 promisc up    # 打开tap0接⼝
  brctl showstp br0          br0⽹桥显⽰如下:
1.4修改/etc/qemu-ifup和/etc/qemu-ifdown 虚拟机的启动脚本
/etc/qemu-ifup 内容如下
#! /bin/sh
switch=br0
ifconfig $1 up
#ip link set $1 up
brctl addif ${switch} $1
/etc/qemu-ifdown 内容如下
#! /bin/sh
switch=br0
brctl delif ${switch} $1
ifconfig $1 down
#ip link set $1 down
#tunctl -d $1
并给赋执⾏权限
chmod +x /etc/qemu-ifup
chmod +x /etc/qemu-ifdown
7.虚拟机启动
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -device virtio-scsi-device -drive if=none,file=ubuntu16.04-ar
安装完成之后,下⾯就是启动虚拟机。正常情况下,安装完成后会⾃动重新启动,然后发现进⼊到下⾯的界⾯。顿时慌了,⼜出问题了。安装过程中出现问题⼤家不要轻易放弃,⼀定要理性的分析问题和解决问题。
上⾯是进⼊到了UEFI的交互shell⾥⾯,为什么没有执⾏grub并引导进⼊ubuntu系统咧?说明UEFI固件没有到ESP分区(EFI system partition,安装过程中就会看见创建了⼀个ESP分区)或者没有到ESP分区中的EFI⽂件,因为系统需要该EFI⽂件来引导。在该shell下执⾏exit进⼊到UEFI的管理界⾯,并⼿动选择EFI⽂件启动系统,如下图所⽰。