X86_64平台上利用qemu安装aarch64架构的虚拟机
2018-01-03 11:37
736 查看
前一段时间摸索了以下在x86平台上安装arm架构(包括aarch64和armhf)的虚拟机,中间遇到了不少问题。把经验总结下来希望能帮到大家。
1.安装qemu-system-aarch64
2.UEFI固件下载
3.操作系统下载
4.创建虚拟硬盘
5.虚拟机安装
6.虚拟机启动
6.利用virt-manager启动虚拟机
7.参考链接
可以通过下载源代码并编译安装:
在安装的过程中可能会报缺少一些依赖包,我在安装过程中安装了以下依赖包后成功安装。
安装成功后qemu-system-aarch64会安装到/usr/local/bin/目录下。
上图启动过程详细我也不太清楚,大家可以看看wiki上的进一步介绍,这里需要说明的是,UEFI启动中最开始执行的也是专门的UEFI固件。因此,我们要想引导到安装光盘(支持UEFI模式)进一步安装aarch64架构的系统,先要下载对应架构(这里是aarch64)的UEFI固件。
QEMU_EFI.fd(下载地址:http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/)
如果没有上述命令,大家联网安装即可。
执行上述命令时确保QEMU_EFI.fd、ubuntu-16.04.3-server-arm64.iso、ubuntu16.04-arm64.img文件在当前目前下,否则需要修改成对应的文件路径。在上述参数中,指定安装光盘这里
下面是安装过程的一些截图。
上面是进入到了UEFI的交互shell里面,为什么没有执行grub并引导进入ubuntu系统咧?说明UEFI固件没有找到ESP分区(EFI system partition,安装过程中就会看见创建了一个ESP分区)或者没有找到ESP分区中的EFI文件,因为系统需要该EFI文件来引导。在该shell下执行
终于进入到了系统中……
首先是安装virt-manager工具。
安装完成后启动virt-manager,如下图。在选择Architecture为aarch64后,出现了图中所示的warning,表示找不到aarch64架构的UEFI固件,并且在安装方式上自动选择了Import existing disk image。一想也是,系统最开始执行的就是UEFI固件,而我们并没有指定UEFI固件的路径。
这种情况下需要提供系统镜像外,还要提供vmlinuz内核文件和initrd文件。
这里给出了安装UEFI固件的步骤,网页打开较慢,我这里给出步骤的截图。
安装完成后,从下面的图中可以看到,warning消失了,并且只需要导入硬盘镜像文件,说明UEFI固件已经起作用了。只要UEFI固件能够执行到硬盘ESP分区上的EFI文件,那就能够成功启动系统了。
指定镜像文件后启动系统,出现了下面错误
通过查阅资料,发现这是由于libvirt库的版本导致的,将libvirt版本升级到3.10.0。在libvirt官网上最新稳定版本是3.10.0,但通过yum直接安装还没有这个最新版本。我直接找到了一个可用源。在/etc/yum.repos.d目录下建一个virt.repo文件,将下面代码复制到文件中。
运行
更新完成后再次启动虚拟机,本以为会没有问题了额,结果卡在了下面的界面中
个人觉得是新安装的UEFI固件的问题,在网上也没有找到可用的解决方法。如果有读者能够找到上面问题的解决方法,也可以留言告知我。
最终不得不采用内核启动的方式。将前面的系统镜像/boot目录挂载到本地,然后提取其中的vmlinuz和initrd文件。
首先用fdisk查看系统镜像的分区和偏移,下图是我的系统镜像的信息。
可以看到,我的/boot在/所在的第二个分区中,执行下面命令将/所在分区挂载到本地的/mnt目录下(注意偏移量的修改),并将两个文件拷贝出来。命令如下
然后再导入过程中指定虚拟机镜像和vmlinuz、initrd文件、内核参数指定为
再次启动系统,成功进入到系统中……
如果发现采用内核启动方式仍然无法启动,并停留在下图所示的界面,说明是还是该UEFI固件的问题,我就遇到了这个问题。大家可以将最前面用到的QEMU_EFI.fd文件,采用如下命令对安装的UEFI固件进行替换即可
https://kennedy-han.github.io/2015/06/16/QEMU-debian-ARMv8.html
https://en.opensuse.org/openSUSE:AArch64
https://gmplib.org/~tege/qemu.html
https://marcin.juszkiewicz.com.pl/2015/04/17/running-vms-on-fedoraaarch64/
https://bugzilla.redhat.com/show_bug.cgi?id=1449837
https://marcin.juszkiewicz.com.pl/2015/04/17/running-vms-on-fedoraaarch64/
1.安装qemu-system-aarch64
2.UEFI固件下载
3.操作系统下载
4.创建虚拟硬盘
5.虚拟机安装
6.虚拟机启动
6.利用virt-manager启动虚拟机
7.参考链接
1.安装qemu-system-aarch64
如果在宿主机上只安装了qemu-kvm的话,宿主机上只能运行X86构架的虚拟机,并能够利用kvm加速,并不能将arm指令翻译成X86指令运行。所有还需要安装qemu-system-aarch64,它提供了aarch64架构虚拟机在x86架构上的运行支持。可以通过下载源代码并编译安装:
wget https://download.qemu.org/qemu-2.11.0.tar.xz tar xvJf qemu-2.11.0.tar.xz cd qemu-2.11.0 ./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启动方式的考虑),这种情况下系统启动过程如下图所示。上图启动过程详细我也不太清楚,大家可以看看wiki上的进一步介绍,这里需要说明的是,UEFI启动中最开始执行的也是专门的UEFI固件。因此,我们要想引导到安装光盘(支持UEFI模式)进一步安装aarch64架构的系统,先要下载对应架构(这里是aarch64)的UEFI固件。
QEMU_EFI.fd(下载地址:http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/)
3.操作系统下载
我这里采用的是arm64架构的ubuntu 16.04 server版:ubuntu-16.04.3-server-arm64.iso4.创建虚拟硬盘
利用qemu-img指令可以创建1个空的虚拟硬盘,便于后面安装的时候将系统安装到虚拟硬盘上。qemu-img create ubuntu16.04-arm64.img 16G
如果没有上述命令,大家联网安装即可。
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.3-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=ubuntu16.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0
执行上述命令时确保QEMU_EFI.fd、ubuntu-16.04.3-server-arm64.iso、ubuntu16.04-arm64.img文件在当前目前下,否则需要修改成对应的文件路径。在上述参数中,指定安装光盘这里
-drive if=none,file=ubuntu-16.04.3-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom我在有些网站上找到了不同的方式并尝试,但进入到光盘的安装界面后会报如下图所示错误,最后发现上述指定能正确的完成安装。
下面是安装过程的一些截图。
6.虚拟机启动
安装完成之后,下面就是启动虚拟机。正常情况下,安装完成后会自动重新启动,然后发现进入到下面的界面。顿时慌了,又出问题了。安装过程中出现问题大家不要轻易放弃,一定要理性的分析问题和解决问题。上面是进入到了UEFI的交互shell里面,为什么没有执行grub并引导进入ubuntu系统咧?说明UEFI固件没有找到ESP分区(EFI system partition,安装过程中就会看见创建了一个ESP分区)或者没有找到ESP分区中的EFI文件,因为系统需要该EFI文件来引导。在该shell下执行
exit进入到UEFI的管理界面,并手动选择EFI文件启动系统,如下图所示。
终于进入到了系统中……
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu16.04-arm64.img,id=hd0 -device virtio-blk-device,drive=hd0
6.利用virt-manager启动虚拟机
前面能够利用命令成功启动虚拟机啦,但是对于我这种入门级的选手来说更想用带界面的virt-manager工具去直观地管理虚拟机(开关虚拟机、添加删除网络接口也很方便),于是进行了一番尝试,找到了一个可行的方法。首先是安装virt-manager工具。
sudo yum install virt-manager
安装完成后启动virt-manager,如下图。在选择Architecture为aarch64后,出现了图中所示的warning,表示找不到aarch64架构的UEFI固件,并且在安装方式上自动选择了Import existing disk image。一想也是,系统最开始执行的就是UEFI固件,而我们并没有指定UEFI固件的路径。
这种情况下需要提供系统镜像外,还要提供vmlinuz内核文件和initrd文件。
这里给出了安装UEFI固件的步骤,网页打开较慢,我这里给出步骤的截图。
安装完成后,从下面的图中可以看到,warning消失了,并且只需要导入硬盘镜像文件,说明UEFI固件已经起作用了。只要UEFI固件能够执行到硬盘ESP分区上的EFI文件,那就能够成功启动系统了。
指定镜像文件后启动系统,出现了下面错误
通过查阅资料,发现这是由于libvirt库的版本导致的,将libvirt版本升级到3.10.0。在libvirt官网上最新稳定版本是3.10.0,但通过yum直接安装还没有这个最新版本。我直接找到了一个可用源。在/etc/yum.repos.d目录下建一个virt.repo文件,将下面代码复制到文件中。
[virt] name=CentOS-$releasever - virt #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://mirrors.nwsuaf.edu.cn/centos/$releasever/virt/$basearch/libvirt-latest/ ailovermethod=priority enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
运行
sudo yum update libvirt完成更新!
更新完成后再次启动虚拟机,本以为会没有问题了额,结果卡在了下面的界面中
个人觉得是新安装的UEFI固件的问题,在网上也没有找到可用的解决方法。如果有读者能够找到上面问题的解决方法,也可以留言告知我。
最终不得不采用内核启动的方式。将前面的系统镜像/boot目录挂载到本地,然后提取其中的vmlinuz和initrd文件。
首先用fdisk查看系统镜像的分区和偏移,下图是我的系统镜像的信息。
可以看到,我的/boot在/所在的第二个分区中,执行下面命令将/所在分区挂载到本地的/mnt目录下(注意偏移量的修改),并将两个文件拷贝出来。命令如下
sudo mount -o loop,ro,offset=$((1050624*512)) xxx.img /mnt sudo cp /mnt/boot/vmlinuz . sudo cp /mnt/boot/initrd .
然后再导入过程中指定虚拟机镜像和vmlinuz、initrd文件、内核参数指定为
root=/dev/sda2,或者在自定义阶段配置,如下图所示。
再次启动系统,成功进入到系统中……
如果发现采用内核启动方式仍然无法启动,并停留在下图所示的界面,说明是还是该UEFI固件的问题,我就遇到了这个问题。大家可以将最前面用到的QEMU_EFI.fd文件,采用如下命令对安装的UEFI固件进行替换即可
dd if=QEMU_EFI.fd of=/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw conv=notrunc
7.参考链接
https://wiki.linaro.org/LEG/UEFIforQEMUhttps://kennedy-han.github.io/2015/06/16/QEMU-debian-ARMv8.html
https://en.opensuse.org/openSUSE:AArch64
https://gmplib.org/~tege/qemu.html
https://marcin.juszkiewicz.com.pl/2015/04/17/running-vms-on-fedoraaarch64/
https://bugzilla.redhat.com/show_bug.cgi?id=1449837
https://marcin.juszkiewicz.com.pl/2015/04/17/running-vms-on-fedoraaarch64/
相关文章推荐
- centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课
- Linux 适用硬件平台/系统架构(i386 / i586 / i686 / x86_64)解释
- 在Fedora 23 x86_64安装Longene QQ 7.8并利用该容器安装Wine Photoshop CS6过程摘录
- CentOS-6.5-x86_64-bin-DVD1.iso在虚拟机里安装时的注意事项
- Qemu&KVM 第一篇 (1)使用qemu-system-x86_64 创建虚拟机
- kvm命令(qemu-system-x86_64)启动虚拟机过程记录(虚拟机中启动虚拟机、创建镜像)
- 利用easybcd在win7下安装Fedora-19-x86_64-DVD双系统
- Oracle Database 11.2.0.1 for RHEL5 Server(包括x86和x86_64平台)的静默安装指南
- qemu-system-x86_64新建虚拟机,键盘输入乱码
- 虚拟机内x86平台linux内核配置、编译与安装 RHEL5
- 利用U盘与163的yum源镜像网站安装Centos6.5 x86_64系统 推荐
- 在虚拟机以及pc机上安装ubuntu 9.10_x86_64系统搭建android开发环境
- X86_64平台下Oracle 11g R2 X64 for Linux的软件安装、数据库安装、服务配置、数据库启动和停止、SQLPLus使用
- VanlOS 10 RedWhale Kube coVirt 套件 --- 一套框架同时管理X86_64和aarch64容器和虚拟机
- Virtualbox 虚拟机Red Hat Enterprise 6.5 x86_64 安装oracle11g数据库
- RHEL6.3_x86_64平台安装11.2.0.3 64-bit (x86-64)
- Centos7 x86_64 安装MariaDB
- ubuntu16.04下安装cx-Oracle报错:error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
- Intel pin 2.14/CentOS 6 X86-64/安装
- deepmind_lab msys2-x86_64-20161025的下载----安装相关的东西