搭建arm64的qemu环境
说明
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
搭建arm64的qemu环境相关推荐
- linux 上编译arm64,Arch Linux 搭建 arm64/AArch64 交叉编译环境
Arch Linux 搭建 arm64/AArch64 交叉编译环境 0. 系统环境 系统: Arch Linux: 成文时间最新 工具版本:Binutils:2.34-1 GCC:9.2.1+202 ...
- QEMU搭建arm64 Linux调试环境
https://zhuanlan.zhihu.com/p/345232459 简述 本文记录了在ubuntu20.04上,使用QEMU搭建arm64 的Linux开发调试环境.可以方便得使用gdb调试 ...
- ubuntu虚拟机中使用QEMU搭建ARM64环境
软件环境: 平台:ubuntu20.04 kernel版本:linux 4.14.221 qemu版本:6.2.92 qemu模拟环境:ARM64 gcc version :9.4.0 交叉编译工具链 ...
- 自动搭建openEuler虚拟机QEMU运行环境
本文介绍了一个自动搭建openEuler虚拟机QEMU运行环境的脚本使用方法,本脚本能下载并安装各种依赖项,自动下载并编译安装QEMU 4.1.1和busybox 1.25.1,下载并安装对Linux ...
- 用QEMU模拟ARM开发板,搭建Linux kernel运行环境
前言 有的时候我们想调试linux kernel或者linux应用程序,但是又没有硬件环境,这个时候可以选择用模拟器的方法,模拟出一个硬件环境. Android emulator Android系统的 ...
- anaconda 升级jupyter notebook_搭建 Python 轻量级编写环境(WSL2+Jupyter 自动开启本地浏览器)
Windows 下的 Python 环境经常会给人带来一系列的困扰,如,时隐时现的各种因为环境变量导致的奇怪报错,Conda 库更新不到最新的版本,还有诸如 xgboost 等库压根儿就不提供 Win ...
- 使用Linux服务器搭建个人深度学习环境
使用Linux服务器搭建个人深度学习环境 环境及所需工具 连接服务器 创建自己的python环境 创建深度学习框架的环境(以tensorflow为例) 测试环境 退出环境 删除环境 WinSCP的使用 ...
- 宝塔服务器环境好不好_服务器环境怎么搭建?(宝塔环境搭建教程)
大家好,欢迎来到西安蓝蜻蜓网络讲坛,上期我们讲的是怎样购买服务器,很多小伙伴都知道了购买服务器的方式方法,那么购买服务器后需要怎么搭建服务器环境呢?那么今天,我们就来讲述下服务器环境怎么搭建? 以宝塔 ...
- mac 搭建python+selenium+chromedriver环境
mac 搭建python+selenium+chromedriver环境 有关配置默认python3,请查看:https://blog.csdn.net/qq_35098526/article/det ...
最新文章
- [转]Java Os Properties
- seaborn系列 (15) | 双变量关系图jointplot()
- 持续集成mysql_DevOps安装、部署持续集成
- c#面向对象与程序设计第三版第三章例题代码_C#程序设计教程 | 教与学(教学大纲)...
- os库的基本使用(复习)
- [PATCH] UBUNTU: SAUCE: (no-up) apparmor: Sync to apparmor3 - RC1(v3.4.x kernel)
- jQuery判断页面是电脑端还是手机端
- 转录组:STAR-Fusion融合基因
- 在网页中加入透明flash代码
- selenium操作浏览器
- IEEE trans模板格式中左下角添加脚注的方法
- 为文件添加everyone权限
- 人工神经元再进一步,存储记忆已成现实
- 如何在安卓手机上面远程桌面操作
- python实现大规模邻域搜索(LNS)求解旅行商问题(TSP)
- 六大任务赏金平台,带你深度参与区块链的发展
- c语言上级题库,c语言上级题库.doc
- Word页眉页码、公式编号、引用文献编号
- js模仿打字效果的方法
- mysql根据学号或是姓名查询_SQL学习之MySQL SQL查询作业答案