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

文章目录

  • 前言
  • 一、实验平台介绍
  • 二、安装步骤
    • [2.1 安装工具](#2.1 安装工具)
    • [2.2 下载仓库](#2.2 下载仓库)
    • [2.3 编译内核并制作根文件系统](#2.3 编译内核并制作根文件系统)
    • [2.4 运行刚才编译好的ARM64版本的Debian系统](#2.4 运行刚才编译好的ARM64版本的Debian系统)
    • [2.5 在线安装软件包](#2.5 在线安装软件包)
    • [2.6 在QEMU虚拟机和主机之间共享文件](#2.6 在QEMU虚拟机和主机之间共享文件)
  • [三、单步调试ARM64 Linux内核](#三、单步调试ARM64 Linux内核)
  • 参考资料

前言

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

一、实验平台介绍

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

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

二、安装步骤

2.1 安装工具

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

c 复制代码
sudo apt-get install qemu libncurses5-dev gcc-aarch64-linux-gnu build-essential git bison flex libssl-dev qemu-system-arm

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

bash 复制代码
qemu-system-aarch64 --version

QEMU emulator version 8.0.2
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers

2.2 下载仓库

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

bash 复制代码
git clone https://github.com/figozhang/runninglinuxkernel_5.0.git
cd runninglinuxkernel_5.0/
git checkout rlk_5.0 

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

bash 复制代码
./run_debian_arm64.sh build_kernel  
sudo ./run_debian_arm64.sh build_rootfs

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

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

bash 复制代码
sudo ./run_debian_arm64.sh run

最后,登录Debian系统。

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

2.5 在线安装软件包

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

c 复制代码
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

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

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

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

bash 复制代码
cp test.c runninglinuxkernel_5.0/kmodules

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

bash 复制代码
root@benshushu:/# ls /mnt
README test.c

三、单步调试ARM64 Linux内核

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

bash 复制代码
sudo apt install gdb-multiarch
sudo ./run_debian_arm64.sh run debug
bash 复制代码
$ 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. 《奔跑吧Linux内核》--笨叔
  2. 详解 Linux RootFS

相关推荐
kaixin_learn_qt_ing2 天前
Debian和Ubuntu
运维·ubuntu·debian
网络安全Max3 天前
Debian 10上使用UFW设置防火墙
linux·服务器·debian
vvw&3 天前
如何在 Linux 服务器上部署 Pydio Cells 教程
linux·运维·服务器·自动化·debian·github·私有化部署
逸曦玥泱5 天前
搭建分布式Spark集群
分布式·zookeeper·debian
逸曦玥泱5 天前
搭建分布式ZooKeeper集群
分布式·zookeeper·debian
叫我DPT5 天前
zookepper安装部署
运维·zookeeper·debian
vvw&6 天前
如何在 Debian 12 上安装和使用 Vuls 漏洞扫描器
linux·运维·nginx·ubuntu·debian·论坛
vvw&6 天前
如何在 Debian 12 上安装 Chef Infra Server 自动化运维工具
linux·运维·服务器·自动化·debian·github·集群
小立爱学习11 天前
ubuntu22.04 使用crash
linux·c语言·ubuntu·debian
代码浪人13 天前
docker 基于Debian镜像安装FreeSwitch1.10.7
docker·容器·debian·freeswitch