当前位置:   article > 正文

快速搭建ARM64实验平台(QEMU虚拟机+Debian)

快速搭建ARM64实验平台(QEMU虚拟机+Debian)

前言

最近翻阅笨叔的《奔跑吧Linux内核》卷2,发现了一个非常好用的ARM64的实验平台,这里对部署流程做一个记录。

一、实验平台介绍

该平台使用Debian的根文件系统构造了一个小巧且好用的实验平台,可以在线安装丰富的软件包,如Kdump、Crash、SystemTap等,这个平台具有如下特点:

  • 使用“O0"来编译内核。
  • 在主机中编译内核。
  • 使用QEMU来加载系统。
  • 使用GDB单步调试内核和Debian系统。
  • 使用ARM64版本的Debian系统的根文件系统。
  • 在线安装Debian软件包。
  • 支持在虚拟机里动态编译内核模块。
  • 支持主机和虚拟机共享文件。

二、安装步骤

2.1 安装工具

首先,在Linux主机中安装如下工具。

sudo apt-get install qemu libncurses5-dev gcc-aarch64-linux-gnu build-essential git bison flex libssl-dev qemu-system-arm
  • 1

安装完成之后,检查qemu版本。

qemu-system-aarch64 --version

QEMU emulator version 8.0.2
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
  • 1
  • 2
  • 3
  • 4

2.2 下载仓库

从Github下载runninglinuxkernel_5.0仓库并切换到rlk_5.0分支

git clone https://github.com/figozhang/runninglinuxkernel_5.0.git
cd runninglinuxkernel_5.0/
git checkout rlk_5.0 
  • 1
  • 2
  • 3

2.3 编译内核并制作根文件系统

./run_debian_arm64.sh build_kernel  
sudo ./run_debian_arm64.sh build_rootfs
  • 1
  • 2

编译内核,制作根文件系统的流程比较繁琐,这里仓库中提供了一个脚本简化了上述流程。

2.4 运行刚才编译好的ARM64版本的Debian系统

sudo ./run_debian_arm64.sh run
  • 1

最后,登录Debian系统。

  • 用户名:root或者benshushu
  • 密码:123

2.5 在线安装软件包

QEMU虚拟机可以通过Virtio-net技术来生成虚拟网卡,通过NAT技术和主机进行网络共享。

benshushu:~# ifconfig
enp0s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::c86e:28c4:625b:2767  prefixlen 64  scopeid 0x20<link>
        inet6 fec0::ce16:adb:3e70:3e71  prefixlen 64  scopeid 0x40<site>
        ether 52:54:00:12:34:56  txqueuelen 1000  (Ethernet)
        RX packets 18  bytes 2772 (2.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 44  bytes 5967 (5.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2  bytes 78 (78.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2  bytes 78 (78.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

可以看到生成了一个名为enp0s1的网卡设备,分配的IP地址为10.0.2.15(此IP地址知识NAT内部的一个IP地址)

2.6 在QEMU虚拟机和主机之间共享文件

在QEMU虚拟机和主机之间可以通过NET_9P技术进行文件共享,这需要QEMU虚拟机和主机的Linux内核都能使能NET_9P的内核模块,该实验平台已经支持主机和QEMU虚拟机共享文件,可以通过如下简单的方法来测试。

cp test.c runninglinuxkernel_5.0/kmodules
  • 1

启动QEMU虚拟机后,检查/mnt目录下是否有test.c文件。

root@benshushu:/# ls /mnt
README test.c
  • 1
  • 2

三、单步调试ARM64 Linux内核

在Ubuntu 20.04上安装gdb-multiarch,该版本支持多种不同的处理器架构。

sudo apt install gdb-multiarch
sudo ./run_debian_arm64.sh run debug
  • 1
  • 2
$ cd runninglinuxkernel_5.0
$ gdb-multiarch --tui vmlinux
(gdb) set architecture aarch64 // 设置aarch64架构
(gdb) target remote localhost:1234 // 通过1234端口远程连接到QEMU虚拟机
(gdb) b start_kernel   // 在内核start_kernel 处设置断点
  • 1
  • 2
  • 3
  • 4
  • 5

参考资料

  1. 《奔跑吧Linux内核》–笨叔
  2. 详解 Linux RootFS

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/146096
推荐阅读
相关标签
  

闽ICP备14008679号