快速搭建ARM64實驗平臺(QEMU虛擬機+Debian)

文章目錄

  • 前言
  • 一、實驗平臺介紹
  • 二、安裝步驟
    • 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 處設置斷點

參考資料

  1. 《奔跑吧Linux內核》–笨叔
  2. 詳解 Linux RootFS

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696933.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696933.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696933.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

go-zero微服務入門教程

go-zero微服務入門教程 本教程主要模擬實現用戶注冊和用戶信息查詢兩個接口。 準備工作 安裝基礎環境 安裝etcd&#xff0c; mysql&#xff0c;redis&#xff0c;建議采用docker安裝。 MySQL安裝好之后&#xff0c;新建數據庫dsms_admin&#xff0c;并新建表sys_user&#…

【Git】 刪除遠程分支

Git 刪除遠程分支有以下幾種方法 服務端UI工具 Git 的服務端圖形化工具主要是 web 端。常用的有 GitHub、Gitea、Gutlab 等。 這些工具都提供了分支管理&#xff0c;可以直接在各服務端找到相關功能&#xff0c;謹慎刪除。 客戶端UI工具 Git 擁有諸多客戶端 UI 工具&#x…

詳細分析Python中的unittest測試框架

目錄 1. 基本知識2. API2.1 斷言2.2 setUp() 和 tearDown() 3. Demo 1. 基本知識 unittest 是 Python 標準庫中的一個單元測試框架&#xff0c;用于編寫和執行測試用例以驗證代碼的正確性 提供了一種結構化的方法來編寫測試&#xff0c;使得測試代碼更加模塊化和易于維護 以…

【ACW 服務端】頁面操作Java增刪改查代碼生成

版本: 1.2.2-JDK17-SNAPSHOT 項目地址&#xff1a;wu-smart-acw 演示地址&#xff1a;演示地址 admin/admin Java增刪改查代碼生成 找到對應菜單 選擇你需要的數據實例 選擇數據庫 選擇數據庫表 選擇客戶端&#xff08;如果是本地ACW服務代碼啟動默認注冊上的客戶端ID是…

騰訊云主機Ubuntu22.04安裝Odoo17

一、安裝PostgreSQL16 參見之前的文章 Ubuntu22.04安裝PostgreSQL-CSDN博客 二、安裝Odoo17 本方案使用的nightly版的odoo&#xff0c;安裝的都是最新版odoo wget -O - https://nightly.odoo.com/odoo.key | apt-key add - echo "deb http://nightly.odoo.com/17.0/n…

Maven【1】(命令行操作)

文章目錄 一丶創建maven工程二、理解pom.xml三、maven的構建命令1.編譯操作2.清理操作3.測試操作4.打包操作5.安裝操作 一丶創建maven工程 首先創建這樣一個目錄&#xff0c;然后從命令行里進入這個目錄&#xff1a; 然后接下來就在這個命令行里進行操作了。 這個命令是&…

Python學習筆記——PySide6設計GUI應用之UI與邏輯分離

1、打開PySide6的UI設計工具pyside6-designer&#xff0c;設計一個主窗口&#xff0c;保存文件名為testwindow.ui 2、使用PySide6的RCC工具把testwindow.ui文件轉換為testwindow_rc.py文件&#xff0c;此文件中有一個類Ui_MainWindow&#xff08;包含各種控件對象&#xff09;…

設計模式淺析(八) ·外觀模式

設計模式淺析(八) 外觀模式 日常叨逼叨 java設計模式淺析&#xff0c;如果覺得對你有幫助&#xff0c;記得一鍵三連&#xff0c;謝謝各位觀眾老爺&#x1f601;&#x1f601; 外觀模式 概念 外觀模式&#xff08;Facade Pattern&#xff09;是一種設計模式&#xff0c;它為…

深度學習發展里程碑事件2006-2024

2006-2024年&#xff0c;深度學習發展經歷眾多的里程碑事件&#xff0c;一次次地刺激著人們的神經&#xff0c;帶來巨大的興奮。電影還在繼續&#xff0c;好戲在后面&#xff0c;期待…… 2006年 深度信念網絡&#xff08;DBNs&#xff09;&#xff1a;Geoffrey Hinton與他的學…

備戰藍橋杯 Day10(背包dp)

01背包問題 1267&#xff1a;【例9.11】01背包問題 【題目描述】 一個旅行者有一個最多能裝 M&#xfffd; 公斤的背包&#xff0c;現在有 n&#xfffd; 件物品&#xff0c;它們的重量分別是W1&#xff0c;W2&#xff0c;...,Wn&#xfffd;1&#xff0c;&#xfffd;2&#…

藍橋杯刷題--python-10(2023填空題3)

0工作時長 - 藍橋云課 (lanqiao.cn) import datetime time_str_list=[] while(True):tmp=input()if not tmp: breaktime_str_list.append(tmp)# time_list=[datetime.datetime.strptime(t,"%Y-%m-%d %H:%M:%S")for t in time_str_list] time_list.sort() sum=0 for i…

【代碼隨想錄算法訓練營Day25】● 216.組合總和III ● 17.電話號碼的字母組合

文章目錄 Day 25 第七章 回溯算法part02216.組合總和III自己的思路&#xff08;?通過&#xff09; 17.電話號碼的字母組合思路代碼 Day 25 第七章 回溯算法part02 今日內容&#xff1a; ● 216.組合總和III● 17.電話號碼的字母組合 216.組合總和III 如果把 組合問題理解了…

計算機組成原理(9)----硬布線控制器

控制單元CU若想發出對應的控制信號&#xff0c;則需要以下信息&#xff1a;指令操作碼&#xff0c;目前的機器周期&#xff0c;節拍信號&#xff0c;機器狀態條件&#xff0c;根據這些信息&#xff0c;CU就能確定在這個節拍下應該發出哪些"微命令"&#xff0c;也就是…

SQL注入:使用預編譯防御SQL注入時產生的問題

目錄 前言 模擬預編譯 真正的預編譯 預編譯中存在的SQL注入 寬字節 沒有進行參數綁定 無法預編譯的位置 前言 相信學習過SQL注入的小伙伴都知道防御SQL注入最好的方法&#xff0c;就是使用預編譯也就是PDO是可以非常好的防御SQL注入的&#xff0c;但是如果錯誤的設置了…

計算機設計大賽 深度學習動物識別 - 卷積神經網絡 機器視覺 圖像識別

文章目錄 0 前言1 背景2 算法原理2.1 動物識別方法概況2.2 常用的網絡模型2.2.1 B-CNN2.2.2 SSD 3 SSD動物目標檢測流程4 實現效果5 部分相關代碼5.1 數據預處理5.2 構建卷積神經網絡5.3 tensorflow計算圖可視化5.4 網絡模型訓練5.5 對貓狗圖像進行2分類 6 最后 0 前言 &#…

從零學算法238

238.給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。 請 不要使用除法&#xff0c;且在 O(n) 時間復…

Python自動化UI測試之Selenium基礎實操

1. Selenium簡介 Selenium 是一個用于 Web 應用程序測試的工具。最初是為網站自動化測試而開發的&#xff0c;可以直接運行在瀏覽器上&#xff0c;支持的瀏覽器包括 IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Googl…

SVN忽略已提交的文件(ignore,移出版本控制)

本文適用于已安裝TortoiseSVN客戶端的同學。 1、右鍵點擊要忽略的文件夾或文件&#xff0c;鼠標移到“TortoiseSVN”&#xff0c;找到“Unversion and add to ignore list”&#xff0c;選擇文件夾&#xff0c;彈出提示框確認忽略。 2、設置完忽略文件后&#xff0c;還需要做…

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型

多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型 目錄 多維時序 | Matlab實現GRU-MATT門控循環單元融合多頭注意力多變量時間序列預測模型預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.多維時序 | Matlab實現GRU-MATT門控循環單元融…

【Maven】介紹、下載及安裝、集成IDEA

目錄 一、什么是Maven Maven的作用 Maven模型 Maven倉庫 二、下載及安裝 三、IDEA集成Maven 1、POM配置詳解 2、配置Maven環境 局部配置 全局設置 四、創建Maven項目 五、Maven坐標詳解 六、導入Maven項目 方式1&#xff1a;使用Maven面板&#xff0c;快速導入項目 …