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

相关推荐
入 梦皆星河36 分钟前
在 Ubuntu/Debian 上安装 Go
ubuntu·golang·debian
x-cmd4 天前
[241115] Debian 12.8 发布 | Mistral AI 推出批量 API,成本降低 50%
linux·人工智能·windows·安全·ai·debian·mistral
皓月盈江6 天前
Linux debian系统安装ClamTk开源图形用户界面(GUI)杀毒软件
linux·运维·debian·clamav·clamtk·开源杀毒
我是唐青枫6 天前
Linux Debian发行版系统包管理工具使用教程
linux·debian
Raymond运维7 天前
Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
linux·运维·ubuntu·centos·debian·rocky·almalinux
码农不惑7 天前
如何在Debian系统里使用Redhat(CentOS)的方式配置网络
网络·centos·debian·shell·redhat
fareast_mzh8 天前
Setting Up a Simple Live Streaming Server on Debian 11
运维·debian·直播
屋外雨大,惊蛰出没10 天前
安装双系统(linux操作系统(debian)安装)
linux·运维·debian
ziqibit10 天前
debian 系统更新升级
运维·debian
知否&知否11 天前
kafka如何知道哪个消费者消费哪个分区?
分布式·kafka·debian