qemu-system-aarch64使用记录

news2024/11/20 20:39:22

qemu-system-aarch64 使用记录

      • 下载安装qemu
      • 查看是否支持KVM
      • 运行qemu
        • -M
        • 内核启动
        • 问题
      • 内核编译

下载安装qemu

#!/bin/bash

sudo apt update  > /dev/null
sudo apt upgrade  > /dev/null
sudo apt-get install -y make gcc g++ git > /dev/null

cd
sudo apt-get install -y re2c > /dev/null

ninja --version

if [[ $? -ne 0 ]]; then
    if [[ ! -d ${HOME}/ninja ]]; then
        git clone https://gitee.com/gitmirror/ninja.git
        if [[ $? -ne 0 ]]; then
            echo " git clone ninja fail"
            exit 1
        fi
    fi
    cd ${HOME}/ninja
    python3 ./configure.py --bootstrap  
    sudo cp ./ninja  /usr/bin
    # 测试
    ninja --version

    if [[ $? -ne 0 ]];then
    echo " ninja install fail"
        exit 1
    fi 
fi

# 安装依赖包
sudo apt-get install -y build-essential zlib1g-dev pkg-config libglib2.0-dev > /dev/null
sudo apt-get install -y binutils-dev libboost-all-dev autoconf libtool libssl-dev libpixman-1-dev > /dev/null
# 支持enable-virtfs 共享文件
sudo apt-get install -y libcap-ng-dev libattr1-dev > /dev/null

cd
if [[ ! -d ${HOME}/qemu7 ]]; then
    wget https://download.qemu.org/qemu-7.0.0.tar.xz
    if [[ $? -ne 0 ]];then
        echo " qemu download fail"
        exit 1
    fi 
    tar xJf qemu-7.0.0.tar.xz
    mv qemu-7.0.0 qemu7
fi

${HOME}/qemu7/build/qemu-system-aarch64 -version

if [[ $? -ne 0 ]]; then
    echo "qemu not compile"
    cd ${HOME}/qemu7
    # arm64 编译
    ./configure --target-list=aarch64-softmmu --enable-debug --enable-debug-info  --enable-kvm  \
        --enable-trace-backends=simple --enable-virtfs 
    if [[ $? -ne 0 ]];then
        echo " qemu configure fail"
        exit 1
    fi
    # 开始编译
    make -j$(nproc)
    if [[ $? -ne 0 ]];then
        echo " qemu make fail"
        exit 1
    fi
    ${HOME}/qemu7/build/qemu-system-aarch64 -version
fi

cd

查看是否支持KVM

参考:

  • ARM平台检测是否支持虚拟化的几种常见方法
  • 如何验证内核是否支持KVM虚拟化?
  • ARM对KVM支持概述

对于aarch64(arm64)架构,若支持KVM虚拟化,那么KVM代码会直接编译进内核

2020年3月,Linux 5.7 Kernel宣布将放弃支持 32位架构的 KVM虚拟化支持,所以目前来看,要想较好的在ARM架构上运行KVM虚拟化,需要使用现代化的64位ARM架构

# 如果/dev/kvm和/sys/module/kvm二者之一不存在说明KVM虚拟化是不支持的
ls -l /dev/kvm
ls -l /sys/module/kvm

cat /boot/config-`uname -r` | grep VIRTUAL
CONFIG_VIRTUALIZATION=y
# CONFIG_GKI_HIDDEN_VIRTUAL_CONFIGS is not set
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
CONFIG_FB_VIRTUAL=y
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
# CONFIG_DEBUG_VIRTUAL is not set

运行qemu

参考

  • linux把用户添加到组
  • 使用 QEMU 启动 ARM aarch64 架构 Ubuntu 虚拟机
  • failed to find romfile “efi-virtio.rom“
  • qemu 文档

ubuntu-22.04.1-live-server-arm64.iso 下载

# 用户添加到多个次要组中
usermod -a -G kvm ostest

# 创建虚拟机硬盘
${HOME}/qemu7/build/qemu-img create -f qcow2 ${HOME}/disk/ubuntu.img 100G

sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
     -m 2048M -smp 4 -M virt -enable-kvm  \
     -boot order=dc \
     -drive file=${HOME}/disk/ubuntu.img,index=0,media=disk,format=qcow2  \
     -cdrom ${HOME}ubuntu-22.04.1-live-server-arm64.iso  \
     -vnc :1
qemu-system-aarch64: KVM is not supported for this guest CPU type
qemu-system-aarch64: kvm_init_vcpu: kvm_arch_init_vcpu failed (0): Invalid argument

qemu-system-aarch64: The 'host' CPU type can only be used with KVM or HVF

# qemu 文档
-cpu model
	Select CPU model (-cpu help for list and additional feature selection)

sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
    -M virt \
    -m 2048M -smp 4 \
    -cpu host \
    -enable-kvm  \
    -boot order=dc \
    -drive file=${HOME}/disk/ubuntu.img,index=0,media=disk,format=qcow2  \
    -cdrom ${HOME}/ubuntu-22.04.1-live-server-arm64.iso  \
    -vnc :1
qemu-system-aarch64: failed to find romfile "efi-virtio.rom"

# 查看qemu 文档
-L  path
	Set the directory for the BIOS, VGA BIOS and keymaps.
	To list all the data directories, use -L help.

sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
    -M virt \
    -m 2048M -smp 4 \
    -cpu host \
    -enable-kvm  \
    -L /home/ostest/qemu7/pc-bios/ \
    -boot order=dc \
    -drive file=${HOME}/disk/ubuntu.img,index=0,media=disk,format=qcow2  \
    -cdrom ${HOME}/ubuntu-22.04.1-live-server-arm64.iso  \
    -vnc :1

在这里插入图片描述

在这里插入图片描述

-M

ostest@firefly:~$ ${HOME}/qemu7/build/qemu-system-aarch64  -M help | grep a7
ostest@firefly:~$ ${HOME}/qemu7/build/qemu-system-aarch64  -M help | grep A7
ast2600-evb          Aspeed AST2600 EVB (Cortex-A7)
bletchley-bmc        Facebook Bletchley BMC (Cortex-A7)
fuji-bmc             Facebook Fuji BMC (Cortex-A7)
mcimx6ul-evk         Freescale i.MX6UL Evaluation Kit (Cortex-A7)
mcimx7d-sabre        Freescale i.MX7 DUAL SABRE (Cortex-A7)
orangepi-pc          Orange Pi PC (Cortex-A7)
rainier-bmc          IBM Rainier BMC (Cortex-A7)
tacoma-bmc           OpenPOWER Tacoma BMC (Cortex-A7)
ostest@firefly:~$ ${HOME}/qemu7/build/qemu-system-aarch64  -M help | grep A5
xlnx-zcu102          Xilinx ZynqMP ZCU102 board with 4xA53s and 2xR5Fs based on the value of smp
ostest@firefly:~$ ${HOME}/qemu7/build/qemu-system-aarch64  -M help | grep a5
ostest@firefly:~$                                                                                                  

测试记录

ostest@firefly:~$ sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
>     -M ast2600-evb \
>     -m 1G -smp 2 \
>     -cpu host \
>     --enable-kvm  \
>     -bios ${HOME}/QEMU_EFI.fd \
>     -drive if=none,file=${HOME}/ubuntu-22.04.1-live-server-arm64.iso,id=cdrom,media=cdrom\
>     -drive file=${HOME}/disk/ubuntu.img,index=1,media=disk,format=qcow2,id=ubuntuhd \
>     -vnc :1 \
>     -monitor none
Unexpected error in arm_cpu_realizefn() at ../target/arm/cpu.c:1471:
qemu-system-aarch64: Cannot enable KVM when guest CPU has EL3 enabled
Aborted

ostest@firefly:~$ sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
>     -M orangepi-pc   \
>     -m 1G -smp 4 \
>     -cpu host \
>     --enable-kvm  \
>     -bios ${HOME}/QEMU_EFI.fd \
>     -drive if=none,file=${HOME}/ubuntu-22.04.1-live-server-arm64.iso,id=cdrom,media=cdrom\
>     -drive file=${HOME}/disk/ubuntu.img,index=1,media=disk,format=qcow2,id=ubuntuhd \
>     -vnc :1 \
>     -monitor none
qemu-system-aarch64: BIOS not supported for this machine

ostest@firefly:~$ sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
>     -M orangepi-pc   \
>     -m 1G -smp 4 \
>     -cpu cortex-a7 \
>     --enable-kvm  \
>     -drive if=none,file=${HOME}/ubuntu-22.04.1-live-server-arm64.iso,id=cdrom,media=cdrom\
>     -drive file=${HOME}/disk/ubuntu.img,index=1,media=disk,format=qcow2,id=ubuntuhd \
>     -vnc :1 \
>     -monitor none
qemu-system-aarch64: Cannot enable KVM when guest CPU has EL3 enabled

内核启动

参考

  • 编译qemu/arm64的uefi
  • 为QEMU创建基于UEFI的AARCH64虚拟机

在arm64上启动qemu虚拟机有两种方式,一种是通过-kernel 的方式boot kernel,另一种是先启动uefi再boot kernel。

QEMU默认将会采用seabios的启动方式

# 下载 QEMU_EFI.fd
wget http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd

在这里插入图片描述

参考通过qemu-system-aarch64在x86上安装aarch64虚拟机

sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
    -M virt \
    -m 2G -smp 6 \
    -cpu cortex-a57 \
    -bios ${HOME}/QEMU_EFI.fd \
    -drive if=none,file=${HOME}/ubuntu-22.04.1-live-server-arm64.iso,id=cdrom,media=cdrom \
    -device virtio-scsi-device -device scsi-cd,drive=cdrom \
    -drive if=none,file=${HOME}/disk/ubuntu.img,id=hd0 \
    -vnc :1 \
   	-monitor stdio
   
# 不知道为啥这个monitor 重定向到 vnc里去了

# qemu 文档
-monitor dev
	Redirect the monitor to host device dev (same devices as the serial port). 
	The default device is vc in graphical mode and stdio in non graphical mode. 
	Use -monitor none to disable the default monitor.

在这里插入图片描述
带上kvm 选项


sudo ${HOME}/qemu7/build/qemu-system-aarch64 \
    -M virt \
    -m 2G -smp 6 \
    -cpu host \
    -enable-kvm  \
    -bios ${HOME}/QEMU_EFI.fd \
    -drive if=none,file=${HOME}/ubuntu-22.04.1-live-server-arm64.iso,id=cdrom,media=cdrom \
    -device virtio-scsi-device -device scsi-cd,drive=cdrom \
    -drive if=none,file=${HOME}/disk/ubuntu.img,id=hd0 \
    -vnc :1 \
    -monitor stdio

在这里插入图片描述

问题

  • 虚拟机开机时出现Press ESC in 5 seconds to skip startup.nsh, any other key to continue问题的解决办法

内核编译

参考

  • ARMv8架构下修改Linux内核并打开kvm硬件虚拟化支持

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/10688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一起来庆祝属于GISer的节日GIS DAY

概述 作为一名GISer的你,有没有想过其实我们GISer也有自己的节日?这个节日便是GIS DAY,今年的GIS DAY恰在今天(2022年11月16日)。究竟什么是GIS DAY?这里为大家介绍一下这个节日。 什么是GIS DAY GIS DA…

Python学习----异常、模块、安装第三方包

异常 异常的含义就不用解释了 打开一个不存在的文件: 异常的捕获 语法: 捕获所有异常 try:可能发生错误的代码 except:发生错误之后执行的代码try:可能发生错误的代码 except Exception as e:发生错误之后执行的代码两种写法都行 捕获指定异常&…

【maptplotlib大全图】一段代码洞查matplotlib图片真谛

此文通过给大家设计一个全面的代码,帮助大家了解matplotlib库画图的全貌 代码解读,略。 图示解读: 对照上图序号和下面序号看代码解释: 1.应用风格使用代码:plt.style.use(sty) 2.文本注释 plt.annotate(‘maximum…

QSS(Qt样式表)概念

Qt样式表是一个可以自定义部件外观的十分强大的机制,除了QStyle更改的样式,其他的都可以由QSS修改。由于受到Html的CSS启发,所以叫QSS。 代码添加样式表ui界面上添加样式表代码添加样式表: setStyleSheet(&#xff09…

Beacon帧

一、简介 Beacon帧是802.11中一个周期性的帧,每隔一段时间就会向外界发出一个Beacon(信标)信号用来宣布自己802.11网络的存在。Beacon周期调高,对应睡眠周期拉长,故节能(即越来休息100ms再起来发一个包,现在休息200ms…

python学习思路

话不多说,就是开始练习,因为之前编程的经验比较少,怎么办,就像马化腾一样,先抄袭,只有抄袭完成了之后,你才会获得你自己的知识 总体思路是先抄袭,再领悟。最后一定要自己默写打一次。…

电子统计台账:垂直流水账格式数据的导入

目录 1 前言 2 新建项目并打开数据源文件 3 模板设置 4 垂直过滤模板中,流水账过滤条件详细格式说明 1 前言 不少企业记录生产销售数据采用流水账格式。我们可以通过设置过滤模板来导入流水账格式的数据。 企业数据源文件,用excel打开后可以看到格式…

API安全防护解决方案

究竟什么是API 常规定义下,API是应用程序接口(Application Programming Interface)的简称,其含义比较宽泛,泛指一组定义、程序及协议的集合。随着技术领域的细分和前后端分离架构模式的推广,App应用、小程…

Java文件操作

文章目录1、文件的基本概念2、java文件操作2.1 File概述2.2 InputStream 和 FileInputStream2.3 OutputStream 和 OutputStreamWriter1、文件的基本概念 平时说的文件一般都是指存储在硬盘上的普通文件,形如txt,jpg,mp4,rar等这些…

Mybatis源码详解

Mybatis源码详解一、JDBC与Mybatis对比JDBC调用Mybatis调用两者对比二、Mybatis资源加载数据源获取SqlSessionFactoryBuilder.buildXMLConfigBuilder.parseXMLConfigBuilder.environmentsElementSQL语句获取1.入口2.两种方式3.XML方式获取SQL3.1 XMLMapperBuilder.parse()3.2 X…

【小白学YOLO】YOLOv3网络结构细致解析

摘要:本文将详细介绍Yolov3的网络结构相关内容。Yolov3 网络结构 在博客“Yolo发展历史及网络结构”中我们已经详细的解释了Yolov1的网络结构,并简要的提到了Yolov2与Yolov3对于网络结构的改进,本篇博客将详细介绍Yolov3的网络结构&#xff…

骑行耳机哪个品牌好,推荐五款最适合骑行佩戴的五款耳机

运动训练是一件非常单调的事情,尤其是你从事的运动节奏感比较强的时候,自身的呼吸频率也会随之加快,调节不过来的时候就很容易呼吸错乱导致运动大幅度下降,这时可以选择一些同当前运动节奏相符的音乐,让音乐在运动的全…

多云管理平台发展的几个阶段

多云管理平台能够无差别地提供统一的资源管理、业务能力和运行维护等功能,从而可以屏蔽掉底层云资源池的差异性,大大降低了用户的建设成本和运行维护成本,因此也是目前算力网络异构云资源池统一管理的主流建设方案。 自Gartner首次提出多云管…

黄金价格走势软件下载,国内十大现货黄金正规平台排名(2022最新榜单)

炒金者想要参与国际现货黄金交易市场中,开户是炒金者现货黄金理财的必经之路,但是依然有不少炒金者谈到开户就会色变,他们担心的不仅仅是开户流程复杂,而是担心开户时遇到的风险难易保证,但实际上大可不必如此&#xf…

Kotlin 中的 inline 和nonline 和crossinline

inline /*** 内联 递归函数无法内联,编译不通过* 函数的 参数 没有 lambda 无需内联--只是减少了方法调用层级 对性能没大影响* 函数的 参数 有 lambda 内联 * 1 不使用内联 在调用端,会生成 Function 对象 完成 lambda的 调用(性能损耗,for 循环 或…

【小程序】微信小程序自定义导航栏及其封装

💭💭 ✨: 微信小程序自定义导航栏   💟:东非不开森的主页   💜: 因为很多东西来不及去做去看可是时间很快总是赶不上,所以要去成长呀💜💜   🌸: 如有错误或…

20221116 Dubbo+Zookeeper

DubboZookeeper实现分布式布局加入ZookeeperDubbo编写provider代码(简单示例)添加依赖代码编写consumer代码(简单示例)加入依赖代码加入Dubbo管理控制台DubboZookeeper实现分布式布局 加入Zookeeper 在服务器端使用docker 下载Z…

Word处理控件Aspose.Words功能演示:使用 C# 将 Word 文档转换为 Markdown

如今,大量的文章、博客和文档都是以Markdown ( MD ) 格式编写的。但是,对于大型文档,Markdown 语法通常变得难以记忆和编写。为方便起见,您可以在 MS Word 中编写内容,然后将DOCX或DOC文档转换为 Markdown。为了自动化…

【Redis入门笔记 09】缓存穿透、击穿与雪崩

目录🍉缓存穿透🍓缓存击穿🍑缓存雪崩☕前言: Redis 数据库常常用来充当传统数据库的缓存。一个实际的场景是当用户的请求过来,先去查缓存中的数据,如果缓存中不存在,则再去查询数据库&#xff…

快速查找qt pro文件中的用qmake language写的库函数

qt函数分为test函数和replace函数:qmake language 内置函数 自定义函数 defineTest(testfunctionname) defineReplace(repacefunctionname)_丘上人的博客-CSDN博客 qt为qmake language提供了内建函数(用C写的逻辑)和用qmake language写的库函…