搭建arm64的qemu环境

article/2025/9/17 1:39:32

说明

qemu在调试内核方面还是比较方便、效率的。以前基本上多是用arm32的平台,网上大部分资源也是关于arm32的。现在arm64的也比较普遍了,最近刚好要看一些内核的东西,花了2天的时间搭建了这个环境,希望看到的朋友少走弯路,节约点时间。(当然,arm32的qemu环境也可以参考本文,除需要使用qemu-system-arm命令代替qemu-system-aarch64和使用arm32的交叉编译工具链,其它的内容是一样的)。本文主要包含3部分内容:1.安装qemu虚拟机,2.配置网络,3.虚拟机挂载NFS。因为每个人的环境还是有点差异的,搭建的过程中需要根据自己的实际情况做些更改。

安装qemu虚拟机

在ubuntu安装qemu:

sudo apt install -y qemu-system-arm

查看版本信息:

qemu-system-aarch64 --version

在这里插入图片描述
查看qemu支持的板子:

qemu-system-aarch64 -M ?

在这里插入图片描述
安装交叉编译工具链:

sudo apt install gcc-aarch64-linux-gnu

安装后查看下版本

aarch64-linux-gnu-gcc -v

在这里插入图片描述
编译内核和设备树

make ARCH=arm64 defconfig
make ARCH=arm64 CROSS_COMPILE=arm-linux-gnueabi- uImage
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs

制作文件系统:

dd if=/dev/zero of=rootfs_ext4.img bs=1M count=256
mkfs.ext4 rootfs_ext4.img

挂载镜像后把最小文件系统内容拷贝进去(最小文件系统可以使用busybox来制作)。

编写启动脚本:

$ vim qemu.sh
#!
qemu-system-aarch64 \-nographic \-machine virt \-cpu cortex-a53 \-smp 4 \-m size=1024M \-kernel Image \-drive format=raw,file=./rootfs_ext4.img \-append "noinitrd root=/dev/vda rw console=ttyAMA0 loglevel=8"	\

运行qemu.sh脚本启动虚拟机。

配置网络

网络是现代计算机系统不可或缺的一部分,QEMU也对虚拟机提供丰富的网络支持。qemu-kvm中主要给客户机提供了如下4种不同模式的网络。
(1)基于网桥(Bridge)的虚拟网卡
(2)基于NAT(Network Addresss Translation)的虚拟网络
(3)QEMU内置的用户模式网络(user mode networking)
(4)直接分配网络设备(包括VT-d和SR-IOV)
QEMU命令行中,对客户机网络的配置(除了网络设备直接分配之外)都是用“-net”参数来进行配置的,如果没有设置任何的“-net”参数,则默认使用“-net nic -net user”参数从而使用完全基于QEMU内部实现的用户模式下的网络协议栈。
qemu-kvm提供了对一系列主流和兼容性良好的网卡的模拟,通过“-net nic,model=?”参数可以查询到当前的qemu-kvm工具实现了那些网卡的模拟,如下命令行显示了qemu-kvm-1.1.0中能模拟的网卡种类。

[root@jay-linux ~]# qemu-system-x86_64 -net nic,model=?
qemu: 
Supported NIC models: 
ne2k_pci,
i82551,i82557b,
i82559er,
rtl8139,
e1000,
pcnet,
virtio

其中的“e1000”系列是提供Intel e1000系列的网卡模拟,纯的QEMU(非qemu-kvm)默认就是提供Intel e1000系列的虚拟网卡。而其中的virtio类型是qemu-kvm对半虚拟化IO(virtio)驱动的支持。

其中常用的有两种方式(不同的网络后端):
user mode network :
这种方式实现虚拟机上网很简单,类似vmware里的nat,qemu启动时加入-user-net参数,虚拟机里使用dhcp方式,即可与互联网通信,但是这种方式虚拟机与主机的通信不方便。用户模式网络可以很方便的访问网络资源。但是它有很多限制:

  • 默认的,它运作方式类似于防火墙,且不允许任何入站流量。这个限制可以通过端口重定向解决
  • 仅仅支持TCP、UDP协议,对于ICMP则不支持
  • 性能比较差

tap/tun network :
这种方式要比user mode复杂一些,但是设置好后 虚拟机<–>互联网 虚拟机<–>主机 通信都很容易。这种方式设置上类似vmware的host-only,qemu使用tun/tap设备在主机上增加一块虚拟网络设备(tun0),然后就可以象真实网卡一样配置它。
EMU的TAP后端利用宿主机的TAP设备,为客户机提供完整的桥接网络支持,如果外部需要使用标准端口连接到客户机,或者多个客户机需要相互通信,可以使用该方式。TAP后端还具有以下优势:

  • 非常好的性能
  • 可以配置以支持各种网络拓扑

但是,你需要在宿主机上进行网络拓扑的配置,而且各种系统的配置不同。

主机安装工具包:

sudo apt-get install uml-utilities bridge-utils -y

使用TAP后端前,你需要确认你的宿主机的内核支持TAP网络接口: /dev/net/tun 文件存在则说明支持。

$ ls /dev/net
tun

如果没有这样的文件,可以尝试手工创建:

sudo mkdir /dev/net
sudo mknod /dev/net/tun c 10 200
sudo /sbin/modprobe tun

修改网卡信息,设置桥接
使用qemu启动仿真一个虚拟开发板后,Ubuntu就不能上网了,这是因为我们的Ubuntu主机只有一块网卡,qemu启动后和虚拟开发板建立了连接,进行通信(挂载NFS根文件系统),所以Ubuntu也就无法连接互联网上网了。解决办法:在虚拟机上再添加一块网卡(在WMware启动页面添加),一个网卡和qemu连接,一个网卡用来连接互联网。
查看网卡名:

#ifconfig

在这里插入图片描述

修改网卡名称设置:

sudo vi /etc/netplan/01-network-manager-all.yaml
#Let NetworkManager manage all devices on this system
#network:
#version: 2
#renderer: NetworkManagernetwork:version: 2# renderer: networkdrenderer: NetworkManagerethernets:ens33:    #桥接的网卡dhcp4: noens36:dhcp4: yes    #上网的网卡bridges:br0:dhcp4: yesinterfaces:- ens33   #br0接入的网卡

使设置生效:

sudo netplan apply

修改配置信息:

sudo vi /etc/qemu-ifup
#!/bin/shecho sudo tunctl -u $(id -un) -t $1
sudo tunctl -u $(id -un) -t $1echo sudo ifconfig $1 0.0.0.0 promisc up
sudo ifconfig $1 0.0.0.0 promisc upecho sudo brctl addif br0 $1
sudo brctl addif br0 $1echo brctl show
brctl showsudo ifconfig br0 192.168.33.145 #根据自己的实际情况修改IP地址
sudo vi /etc/qemu-ifdown
#! /bin/sh
#Script to shut down a network (tap) device for qemu.
#Initially this script is empty, but you can configure,
#for example, accounting info here.echo sudo brctl delif br0 $1
sudo brctl delif br0 $1
echo sudo tunctl -d $1
sudo tunctl -d $1
echo brctl show
brctl show

重启网络使生效:

service NetworkManager restart或者
service network-manager restart

修改qemu启动脚本:

Vi qemu.sh
#!qemu-system-aarch64 \-nographic \-machine virt \-cpu cortex-a53 \-smp 4 \-m size=1024M \-kernel Image \-drive format=raw,file=./rootfs_ext4.img \-append "noinitrd root=/dev/vda rw console=ttyAMA0 loglevel=8"	\-nic tap #增加这项

查看测试网络:
主机
在这里插入图片描述

虚拟机
在这里插入图片描述

使用ping相互测试:
在这里插入图片描述
在这里插入图片描述

启动qemu并查看是否有下面的信息:
在这里插入图片描述

虚拟机挂载NFS

搭建nfs文件系统很简单
1.在主机上安装nfs-kernel-server服务端

sudo apt install nfs-kernel-server

2.在主机上建立共享文件夹、设置

sudo vim /etc/exports
/home/andy/nfs *(rw,sync,no_subtree_check,no_root_squash)		//设置共享目录的权限,是以根目录为开始的

重启:

sudo /etc/init.d/nfs-kernel-server start    或者  
sudo /etc/init.d/nfs-kernel-server restart

3.在qemu上直接挂载共享的文件夹

mount -t nfs 10.202.220.9:/home/andy/nfs /mnt -o nolock

http://chatgpt.dhexx.cn/article/uUq5QlSq.shtml

相关文章

x86_64(intel64、amd64)和ARM64的区别以及发展

文章目录 区别引用 区别 ARM64架构 ARM 公司研发的&#xff0c;用的是精简指令集&#xff08;追求节能&#xff0c;低功耗&#xff09;。通常用于手机、平板等CPU&#xff0c;目前笔记本电脑也会采用ARM64构架的CPU&#xff0c;比如mac m1就是arm64(查看命令&#xff1a;uname…

x86 x64 arm64的区别

x86 x64 arm64的区别 源地址&#xff1a;https://www.cnblogs.com/zhaoqingqing/p/13145115.html 我们常说的高通 865&#xff0c;麒麟990 不是 CPU 是 SoC&#xff08;System On Chip&#xff09;&#xff0c;SoC 除了 CPU 外&#xff0c;还有 GPU&#xff0c;还有可选的浮…

Python线性方程求解-矩阵左除“\“、右除“/“

目录 1 线性方程组求解方法 2 左除“\”→AxB 3 右除"/"→xAB 4 其它说明 1 线性方程组求解方法 如果AxB&#xff0c;则xA\B&#xff0c;称为左除&#xff1b;如果xAB&#xff0c;则xB/A&#xff0c;称为右除。 式中x为未知数。一般情况下&#xff0c;左除用的系…

Matlab:用矩阵的除法替代逆运算的操作(inv)

在matlab中直接用逆运算常常会提示&#xff0c;建议用矩阵的左除或右除替换&#xff0c;因为inv(A)*b速度更慢且准确度更低。 matlab中部分详细信息&#xff1a;为了求解线性方程组&#xff0c;矩阵的逆主要是理论值。 切勿使用矩阵的逆 &#xff0c;即 x inv(A)*b 来求解线性…

逆矩阵的概念、应用和求解

目录 逆矩阵的概念 求解逆矩阵 应用例子 可能没有逆矩阵 求解逆-方法1&#xff1a;初等行运算&#xff08;高斯&#xff0d;若尔当&#xff09; 求解逆-方法2&#xff1a;余子式、代数余子式和伴随 求解逆-方法3&#xff1a;程序库 逆矩阵的概念 矩阵运算中&#xff0c;…

利用矩阵的逆(伪逆)与除法求解

利用矩阵的逆&#xff08;伪逆&#xff09;与除法求解&#xff1a; 对于线性方程组Axb&#xff0c;若其为恰定方程组且A是非奇异的&#xff0c;则求x最明显的方法便是利用矩阵的逆&#xff0c;即xA\b;若不是恰定方程组&#xff0c;则可利用伪逆来求其一个特解。 运用pinv命令…

9、矩阵的简单运算

目录 一、矩阵的加减运算 二、矩阵的乘方运算 1.数与矩阵的乘法 2.矩阵与矩阵的乘法 三、矩阵的除法 四、矩阵的幂运算 五、矩阵元素的查找 六、矩阵元素的排序 七、矩阵元素的求和 八、矩阵元素的求积 九、矩阵元素的差分 一、矩阵的加减运算 进行矩阵加法、减法运…

矩阵的相乘与相除

这里写自定义目录标题 矩阵的数组乘/除及乘方参与除运算的两个矩阵同维时参与运算的矩阵有一个标量时数组乘方的运算规则Matlab的符号计算&#xff1a;Matlab画图 矩阵的数组乘/除及乘方 参与除运算的两个矩阵同维时 运算为矩阵相应的元素相除 参与运算的矩阵有一个标量时 …

矩阵乘法

两个矩阵可以相乘&#xff0c;必须满足的条件是&#xff1a;左边矩阵的列等于右边矩阵的行 如&#xff1a;一个3x4的矩阵和一个4x2的矩阵相乘&#xff0c;得到一个3x2的矩阵&#xff1b; 矩阵乘法函数&#xff1a; mat3 add(mat1 A,mat2 B){mat3 ans; for(int i0;i<s1;i)f…

算法——矩阵算法

目录 一.矩阵快速幂&#xff08;1&#xff09;矩阵定义&#xff08;2&#xff09;加法运算&#xff08;3&#xff09;减法运算&#xff08;4&#xff09;数乘&#xff08;5&#xff09;P3390 【模板】矩阵快速幂 二.矩阵求斐波那契数列三.[一个详解矩阵各种高难应用的博客] 一.…

python中的除法运算_python中矩阵除法运算的三种实现方法

介绍过python矩阵的乘法运算&#xff0c;numpy库中虽然乘法是矩阵运算的主要运算&#xff0c;但是numpy作为python中实现矩阵运算的好工具&#xff0c;也是可以轻松实现除法计算的&#xff0c;本文python中矩阵除法的三种实现方法&#xff1a;1、x/y计算对应元素相除(矩阵点除)…

矩阵算法之矩阵乘法

矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。 在矩阵乘法中&#xff0c;A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。 运算规则&#xff1a;A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。 定义 注意事项 1、当矩阵…

MATLAB数值计算——矩阵运算乘法、除法、乘方

一、矩阵 矩阵是线性代数的基本单元矩阵含有M行N列数值矩阵中的元素可以是实数或复数矩阵相关的基本运算&#xff1a;加、减、内积、逆矩阵、转置、线性方程式、特征值、特征向量、矩阵分解 二、矩阵的运算 2.1、矩阵的乘法运算 运算符&#xff1a; * %矩阵乘法 …

第三章 矩阵运算

矩阵运算 生成矩阵如何生成数值矩阵 如何生成复数矩阵矩阵变换矩阵求值矩阵的特征值和特征向量稀疏矩阵 矩阵是数组的一种表现形式。 生成矩阵 两种方式&#xff1a;1.枚举式直接赋值法。2.用函数 如何生成数值矩阵 1.实数矩阵输入规则 所有元素都要放在“[ ]”中&#xff1…

两个元素的矩阵乘除法

矩阵的乘除法&#xff1a; 1 矩阵相乘&#xff0c;两个矩阵只有当左边的矩阵的列数等于右边矩阵的行数时,两个矩阵才可以进行矩阵的乘法运算 主要方法就是&#xff1a;用左边矩阵的第一行&#xff0c;逐个乘以右边矩阵的列&#xff0c;第一行与第一列各个元素的乘积相加&#x…

线性代数代码实现(六)矩阵除法(C++)

前言&#xff1a; 距离上一篇文章发布已经五天过去了&#xff0c;在这里先给一直等待的伙伴们说声抱歉&#xff0c;因为博主最近的事情很多&#xff0c;只好暂时停更&#xff0c;望大家理解&#xff01;上一篇文章中&#xff0c;我们介绍了求解逆矩阵的方法&#xff0c;我提到&…

Comsol 2020全套教学视频 教程入门讲解新手的福音

本视频为官方中文教学视频&#xff0c;给各位想学仿真的同学提供一点福音。本培训视频共有59个视频&#xff0c;本分享提供了前4节基础强化视频&#xff0c;如有需要剩下的各个板块的内容请评论区留言。 百度云链接&#xff1a;https://pan.baidu.com/s/16CdQY77zJ2akNpJxNTlvO…

COMSOL中文指导教程全集

个人体会&#xff0c;学习COMSOL&#xff0c;案例教学最有效&#xff0c;首先从官方案例入手&#xff0c;然后是几何建模教程、网格划分教程、后处理教程&#xff0c;学完这四个部分你基本就入门了。再结合自己的研究方向多学几个案例&#xff0c;基本就可以熟练了。 最有用的…

COMSOL安装教程

点击安装包路径下的setup.exe文件。COMSOL5.2\COMSOL_Multiphysics_5.2-SSQ\COMSOL_5.2_DVD的 setup.exe 选择简体中文 选择新安装COMSOL 5.2 允许用户协议&#xff0c;将许可证格式修改为“许可证文件”&#xff0c;然后点击浏览载入安装包中“_SolidSQUAD_”目录下的“Coms…

comsol_multiphysics入门教程

COMSOL Multiphysics简介 COMSOL的起源:COMSOL最先是Matlab的一个工具箱(Toolbox)&#xff0c;叫做Toolbox 1.0。后来改名为Femlab 1.0(FEM为有限元&#xff0c;LAB是取用的Matlab)&#xff0c;这个名字也一直沿用到Femlab 3.1。 发展至今&#xff0c;COMSOL当前有一个基本模块…