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

相关推荐
千百元9 小时前
zookeeper启不来了
linux·zookeeper·debian
pray~2 天前
海外Linux Debian环境临时安装依赖包
linux·运维·debian
neo33012 天前
debian MEDIATEK Corp. Device 7925 无线网卡驱动安装
运维·服务器·debian
vortex52 天前
Debian 包管理全指南:从底层 dpkg 到高层 apt 及其日志追踪
linux·运维·debian
chenqianghqu4 天前
debian系统程序自动运行
debian
韩明君5 天前
OpenClaw安全部署实现
linux·人工智能·安全·debian·本地部署·ai agent·openclaw
嘿嘿潶黑黑6 天前
关于Debian源速度慢的解决方法
运维·debian
特长腿特长7 天前
在debian系统上使用kvm、添加网卡设备案例
服务器·debian·php
aq55356008 天前
Laravel5.X核心特性全解析
ubuntu·debian
aq553560011 天前
CentOS vs Debian:如何选择最适合的Linux发行版
linux·centos·debian