快速搭建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

相关推荐
上辈子杀猪这辈子学IT6 小时前
【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作
linux·hadoop·zookeeper·centos·debian
UsamaBinLaden1 天前
Ubuntu和Debian系列的Release默认shell解释器变更
linux·ubuntu·debian
鱼忆梦3 天前
Debian的基本使用
运维·debian
unique_pursuit3 天前
Zookeeper启动报错:Starting zookeeper ... FAILED TO START 解决方案
分布式·zookeeper·debian
韩搏3 天前
VMware虚拟机Debian扩展磁盘
java·运维·debian
qq_418646525 天前
解决wsl重启后debian配置vm.max_map_count不生效问题以及设置docker开机自启
运维·debian
筑梦之路8 天前
Debian 12 安装freeswitch 1.10.12对接Volte视频通话——筑梦之路
debian·voip
Biturd8 天前
clickhouse运维篇(二):多机器手动部署ck集群
运维·clickhouse·debian
zhqh1009 天前
在qemu-system上跑arm-Debian
linux·arm开发·debian
Joemt11 天前
ubuntu、Debian离线部署gitlab
ubuntu·debian·gitlab