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

相关推荐
皓月盈江2 天前
Linux Debian13安装virtualbox-7.2_7.2.6-172322-Debian-trixie虚拟机平台无法运行的解决方法
linux·debian·虚拟机·virtualbox·debian13·virtualbox7.2.6·kernel driver
周杰伦的稻香10 天前
Debian 9 (Stretch)仓库无法使用
运维·debian
MaoSource10 天前
Debian 12 安装 FFmpeg 命令
服务器·ffmpeg·debian
weixin_4624462311 天前
一键安装单节点 Zookeeper 3.8.5(附完整 Bash 脚本)
zookeeper·debian·bash
胖好白11 天前
【RK3588开发】Debian系统的驱动开发配置
驱动开发·debian
网硕互联的小客服14 天前
Debian系统提示“Media change...”如何处理?
运维·debian
shhpeng15 天前
Debian packages 的签名与验证
运维·debian
shhpeng15 天前
Debian 包的制作与安装完整指南
运维·debian
shhpeng15 天前
如何制作一个简单的 .deb Debian 包 ?
运维·debian
weixin_4307509317 天前
OpenMediaVault debian Linux安装配置企业私有网盘(三) 静态ip地址配置
linux·服务器·debian·nas·网络存储系统