文章目錄
- 前言
- 一、實驗平臺介紹
- 二、安裝步驟
- 2.1 安裝工具
- 2.2 下載倉庫
- 2.3 編譯內核并制作根文件系統
- 2.4 運行剛才編譯好的ARM64版本的Debian系統
- 2.5 在線安裝軟件包
- 2.6 在QEMU虛擬機和主機之間共享文件
- 三、單步調試ARM64 Linux內核
- 參考資料
前言
最近翻閱笨叔的《奔跑吧Linux內核》卷2,發現了一個非常好用的ARM64的實驗平臺,這里對部署流程做一個記錄。
一、實驗平臺介紹
該平臺使用Debian的根文件系統構造了一個小巧且好用的實驗平臺,可以在線安裝豐富的軟件包,如Kdump、Crash、SystemTap等,這個平臺具有如下特點:
- 使用“O0"來編譯內核。
- 在主機中編譯內核。
- 使用QEMU來加載系統。
- 使用GDB單步調試內核和Debian系統。
- 使用ARM64版本的Debian系統的根文件系統。
- 在線安裝Debian軟件包。
- 支持在虛擬機里動態編譯內核模塊。
- 支持主機和虛擬機共享文件。
二、安裝步驟
2.1 安裝工具
首先,在Linux主機中安裝如下工具。
sudo apt-get install qemu libncurses5-dev gcc-aarch64-linux-gnu build-essential git bison flex libssl-dev qemu-system-arm
安裝完成之后,檢查qemu版本。
qemu-system-aarch64 --versionQEMU 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分支
git clone https://github.com/figozhang/runninglinuxkernel_5.0.git
cd runninglinuxkernel_5.0/
git checkout rlk_5.0
2.3 編譯內核并制作根文件系統
./run_debian_arm64.sh build_kernel
sudo ./run_debian_arm64.sh build_rootfs
編譯內核,制作根文件系統的流程比較繁瑣,這里倉庫中提供了一個腳本簡化了上述流程。
2.4 運行剛才編譯好的ARM64版本的Debian系統
sudo ./run_debian_arm64.sh run
最后,登錄Debian系統。
- 用戶名:root或者benshushu
- 密碼:123
2.5 在線安裝軟件包
QEMU虛擬機可以通過Virtio-net技術來生成虛擬網卡,通過NAT技術和主機進行網絡共享。
benshushu:~# ifconfig
enp0s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255inet6 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 0TX packets 44 bytes 5967 (5.8 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536inet 127.0.0.1 netmask 255.0.0.0inet6 ::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 0TX 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虛擬機共享文件,可以通過如下簡單的方法來測試。
cp test.c runninglinuxkernel_5.0/kmodules
啟動QEMU虛擬機后,檢查/mnt目錄下是否有test.c文件。
root@benshushu:/# ls /mnt
README test.c
三、單步調試ARM64 Linux內核
在Ubuntu 20.04上安裝gdb-multiarch,該版本支持多種不同的處理器架構。
sudo apt install gdb-multiarch
sudo ./run_debian_arm64.sh run debug
$ 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 處設置斷點
參考資料
- 《奔跑吧Linux內核》–笨叔
- 詳解 Linux RootFS
?