说明

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环境相关推荐

  1. linux 上编译arm64,Arch Linux 搭建 arm64/AArch64 交叉编译环境

    Arch Linux 搭建 arm64/AArch64 交叉编译环境 0. 系统环境 系统: Arch Linux: 成文时间最新 工具版本:Binutils:2.34-1 GCC:9.2.1+202 ...

  2. QEMU搭建arm64 Linux调试环境

    https://zhuanlan.zhihu.com/p/345232459 简述 本文记录了在ubuntu20.04上,使用QEMU搭建arm64 的Linux开发调试环境.可以方便得使用gdb调试 ...

  3. ubuntu虚拟机中使用QEMU搭建ARM64环境

    软件环境: 平台:ubuntu20.04 kernel版本:linux 4.14.221 qemu版本:6.2.92 qemu模拟环境:ARM64 gcc version :9.4.0 交叉编译工具链 ...

  4. 自动搭建openEuler虚拟机QEMU运行环境

    本文介绍了一个自动搭建openEuler虚拟机QEMU运行环境的脚本使用方法,本脚本能下载并安装各种依赖项,自动下载并编译安装QEMU 4.1.1和busybox 1.25.1,下载并安装对Linux ...

  5. 用QEMU模拟ARM开发板,搭建Linux kernel运行环境

    前言 有的时候我们想调试linux kernel或者linux应用程序,但是又没有硬件环境,这个时候可以选择用模拟器的方法,模拟出一个硬件环境. Android emulator Android系统的 ...

  6. anaconda 升级jupyter notebook_搭建 Python 轻量级编写环境(WSL2+Jupyter 自动开启本地浏览器)

    Windows 下的 Python 环境经常会给人带来一系列的困扰,如,时隐时现的各种因为环境变量导致的奇怪报错,Conda 库更新不到最新的版本,还有诸如 xgboost 等库压根儿就不提供 Win ...

  7. 使用Linux服务器搭建个人深度学习环境

    使用Linux服务器搭建个人深度学习环境 环境及所需工具 连接服务器 创建自己的python环境 创建深度学习框架的环境(以tensorflow为例) 测试环境 退出环境 删除环境 WinSCP的使用 ...

  8. 宝塔服务器环境好不好_服务器环境怎么搭建?(宝塔环境搭建教程)

    大家好,欢迎来到西安蓝蜻蜓网络讲坛,上期我们讲的是怎样购买服务器,很多小伙伴都知道了购买服务器的方式方法,那么购买服务器后需要怎么搭建服务器环境呢?那么今天,我们就来讲述下服务器环境怎么搭建? 以宝塔 ...

  9. mac 搭建python+selenium+chromedriver环境

    mac 搭建python+selenium+chromedriver环境 有关配置默认python3,请查看:https://blog.csdn.net/qq_35098526/article/det ...

最新文章

  1. [转]Java Os Properties
  2. seaborn系列 (15) | 双变量关系图jointplot()
  3. 持续集成mysql_DevOps安装、部署持续集成
  4. c#面向对象与程序设计第三版第三章例题代码_C#程序设计教程 | 教与学(教学大纲)...
  5. os库的基本使用(复习)
  6. [PATCH] UBUNTU: SAUCE: (no-up) apparmor: Sync to apparmor3 - RC1(v3.4.x kernel)
  7. jQuery判断页面是电脑端还是手机端
  8. 转录组:STAR-Fusion融合基因
  9. 在网页中加入透明flash代码
  10. selenium操作浏览器
  11. IEEE trans模板格式中左下角添加脚注的方法
  12. 为文件添加everyone权限
  13. 人工神经元再进一步,存储记忆已成现实
  14. 如何在安卓手机上面远程桌面操作
  15. python实现大规模邻域搜索(LNS)求解旅行商问题(TSP)
  16. 六大任务赏金平台,带你深度参与区块链的发展
  17. c语言上级题库,c语言上级题库.doc
  18. Word页眉页码、公式编号、引用文献编号
  19. js模仿打字效果的方法
  20. mysql根据学号或是姓名查询_SQL学习之MySQL SQL查询作业答案

热门文章

  1. 有码变高清!AI一秒还原马赛克
  2. eac found not rust_rust进服务器卡eac | 手游网游页游攻略大全
  3. 硬编码 java_Java编程中的硬编码问题
  4. 聆思 CSK6 PWM使用说明
  5. win10邮件中添加QQ邮箱无法成功
  6. 简单实用的语音转文字软件
  7. 历届JOLT图书奖整理
  8. html QQ空间留言版,qq空间留言板寄语句子
  9. 安全的随想Android手机恶意软件移除
  10. PMP®|如何做好项目进度管理?