wsl2配置xv6全解(包括22.04Jammy)

文章目錄

  • 獲取xv6源代碼
  • Ubuntu
    • 20.04 Version
      • 安裝指令
      • 成功測試
      • 參考MIT2021年官方文檔
    • 24.04 Version
      • 安裝指令
      • 成功測試
      • 參考MIT2024年官方文檔
  • Ubuntu 22.04
      • 沒有官方文檔?
    • 配置大體流程
      • 1. 卸載原本qemu(如果之前安裝了)
      • 2. clone qemu官方源代碼,切換到stable 7.2 version
      • 3. configure
      • 4. make 并 install
      • 5. 刪除下載的qemu項目
  • 心酸歷程
    • 能不能用24.04的Qemu?
  • 更多
    • 三種riscv-gcc的應用場景與區別
      • 能不能在wsl下使用?
        • riscv64-linux-gnu-gcc
        • riscv64-unknown-elf-gcc
        • riscv64-unknown-linux-gnu-gcc
    • 配置環境項講解
      • 1. git
      • 2. build-essential
      • 3. gdb-multiarch
      • 4. qemu-system-misc
      • 5. gcc-riscv64-linux-gnu
      • 6. binutils-riscv64-linux-gnu
      • 總結
    • 自己安裝的qemu和apt安裝的有什么區別
      • 1. 版本差異
      • 2. 編譯選項
      • 3. 安裝路徑
      • 4. 依賴管理
      • 5. 更新與維護
      • 6. 兼容性

獲取xv6源代碼

git clone https://github.com/mit-pdos/xv6-riscv.git
cd xv6-riscv #視下載后項目文件而定,可能在更多層中

下載好并正確進入OS源代碼所在文件夾后,結構應該為

請添加圖片描述

Ubuntu

20.04 Version

最終環境:QEMU 5.1+, GDB 8.3+, GCC, and Binutils.

安裝指令

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

成功測試

# in the xv6 directory
$ make qemu
# ... lots of output ... 最終顯示
init: starting sh
$

如果沒有成功,可以檢查下面環境

$ qemu-system-riscv64 --version
QEMU emulator version 5.1.0

至少一個以下GCC版本

$ riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (Debian 10.3.0-8) 10.3.0
...
$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 10.1.0
...
$ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (GCC) 10.1.0
...

參考MIT2021年官方文檔

6.S081 / Fall 2021

24.04 Version

最終環境:RISC-V versions of QEMU 7.2+, GDB 8.3+, GCC, and Binutils.

安裝指令

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

成功測試

# in the xv6 directory
$ make qemu
# ... lots of output ...
init: starting sh
$

如果沒有成功,可以檢查下面環境

$ qemu-system-riscv64 --version
QEMU emulator version 7.2.0

至少一個以下GCC版本

$ riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (Debian 10.3.0-8) 10.3.0
...
$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 10.1.0
...
$ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (GCC) 10.1.0
...

參考MIT2024年官方文檔

6.1810 / Fall 2024

Ubuntu 22.04

有人又要說了,博主博主這不是CV官方文檔嗎。這也可以水一篇博客,強烈譴責!

也有人就要問了,主播主播,20.04和24.04版本的配置環境太沒有含金量了,有沒有什么又沒有什么博客指引,也沒有官方文檔的版本?

有的,兄弟,有的。像這樣的牢版本還有2(jiǔ)個……其中一個便是咱們的22.04,高貴的Jammy玩家

沒有官方文檔?

20年沒有wsl版本,21~23年是20.04的天下,24年終于更新了……是24.04(Jammy玩家懸著的心還是死了)

不過以下指令還是要先執行的

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch binutils-riscv64-linux-gnu

配置大體流程

  1. 卸載原先qemu
  2. clone qemu官方源代碼,切換到stable 7.2 version
  3. configure
  4. make 并 install

1. 卸載原本qemu(如果之前安裝了)

22.04版本使用 apt install 直接安裝的版本是 6.2.0
請添加圖片描述

由于不知名原因,這個qemu并無法直接使用。會出現執行 make qemu 到一半卡住無反饋的情況

請添加圖片描述

我當時還尋思著怎么啟動個系統這么久……

此時有兩個選擇,一是使用老版本qemu(5.1),二是使用新版本qemu(7.2)。由于官方已更新,所以我們選擇后者。

使用apt移除qemu

sudo apt remove --purge qemu qemu-system qemu-utils qemu-system-* -y

清理殘留文件

sudo apt autoremove -y
sudo apt autoclean

檢查是否仍然存在 QEMU

qemu-system-riscv64 --version

如果命令返回 “command not found”,說明 QEMU 已成功卸載。

2. clone qemu官方源代碼,切換到stable 7.2 version

git clone https://gitlab.com/qemu-project/qemu.git
cd ./qemu
git checkout stable-7.2

注意:這里沒有用到最新版(學都是學最新的,用都是用最老的~~~)

3. configure

cd qemu/
mkdir build
cd build/
../configure --target-list=x86_64-softmmu,riscv64-softmmu --enable-debug

注意這里我們只make了x86_64和riscv-64版本并且之后安裝到/usr/local下。此時調用項目中可執行文件configure為make作準備。

出現 ERROR: Cannot find Ninja

執行命令

sudo apt install ninja-build

出現 ERROR: glib-2.56 gthread-2.0 is required to compile QEMU

執行命令

sudo apt install libglib2.0-dev

之后想要將qemu安裝到/usr而非/usr/local下(不推薦,可能會和系統自帶包管理器相沖突)

將原本configure指令替換為

../configure --target-list=x86_64-softmmu,riscv64-softmmu --enable-debug --prefix=/usr

成功configure之后顯示
請添加圖片描述
后面還有很多參數,沒有截全

4. make 并 install

make -j$(nproc)
sudo make install

make過程可能會持續幾分鐘,因機而異

完成后嘗試

qemu-system-riscv64 --version

如果正常輸出則ok,如果沒有找到則需要將 /usr/local 也添加到 PATH

嘗試

 export PATH=/usr/local/bin:$PATHqemu-system-riscv64 --version

如果正常輸出則將該路徑添加到配置文件的PATH中

echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

如果,不出意外的話。此時回到 xv6-riscv 目錄便可以執行 make qemu
請添加圖片描述

5. 刪除下載的qemu項目

如果之后不打算make其他架構的硬件模擬,此時便可以把下載的qemu源代碼文件夾刪除了

sudo rm -rf ./qemu

心酸歷程

能不能用24.04的Qemu?

你可真是個小天才,借腹生子是吧!!!

警告:以下命令不要隨便執行

sudo add-apt-repository ppa:jacob/virtualisation -y
sudo apt update
sudo apt install qemu-system-riscv64 -y

運行之后再去試試 make qemu ,結果能執行了!!!然后發現你的 gdb 就神奇的不見了……
請添加圖片描述

原因就是你安裝高版本的 qemu-system 時安裝了覆蓋一些依賴,此時便將沖突的gdb給卸載了。仔細檢查 sudo apt install qemu-system-riscv64 -y 的輸出日志可以發現信息

The following packages will be REMOVED:debhelper debugedit gdb gdb-multiarch ...

sad~~~天地好輪回,蒼天饒過誰

這個教訓告訴我們,以后在看到有哪篇博客里存在指令 apt *** -y-y 結尾,基本可以拖出去斬了(bushi)

后面就因為這個事情導致22.04版本的一些依賴變成了24.04,這個做法實在是個爛主意!

請添加圖片描述

原以為22.04玩家已經是最牢的,沒想到b站上還有更牢的18.04玩家(bushi)

立創泰山派訓練營學習筆記–Ubuntu22.04.4 rootfs根文件系統制作-Linux SDK編譯(二)

更多

三種riscv-gcc的應用場景與區別

編譯器適用場景目標架構典型應用是否支持標準 C 庫
riscv64-linux-gnu-gccLinux 用戶空間riscv64-linux-gnu編譯 RISC-V Linux 應用程序? (glibc)
riscv64-unknown-elf-gcc裸機 / RTOS / OS 內核riscv64-unknown-elf編譯 xv6、U-Boot、裸機程序?(無操作系統支持)
riscv64-unknown-linux-gnu-gccLinux 用戶空間riscv64-unknown-linux-gnu交叉編譯 Linux 程序(可能使用 musl)? (glibcmusl)
  • 如果你在開發 Linux 用戶空間應用(如普通軟件)
    → 用 riscv64-linux-gnu-gccriscv64-unknown-linux-gnu-gcc
  • 如果你在開發 RISC-V 操作系統或裸機程序(如 Bootloader、xv6
    → 用 riscv64-unknown-elf-gcc
  • 如果你不確定,但目標是在 RISC-V Linux 運行
    → 用 riscv64-linux-gnu-gcc

能不能在wsl下使用?

riscv64-linux-gnu-gcc

請添加圖片描述

情況:可以編譯成功但是無法執行

這個gcc最終編譯的二進制文件針對的是RISCV架構,所以無法在一般的x86-64架構上直接執行。而xv6-riscv是通過qemu模擬riscv硬件才能夠執行

riscv64-unknown-elf-gcc

請添加圖片描述

情況:連編譯都編譯不過去了

riscv64-unknown-elf-gcc 針對的是裸機環境,那么包沒有 <stdoi.h> 的。所以確實無法編譯

riscv64-unknown-linux-gnu-gcc

沒下……

配置環境項講解

MIT的 apt-get install 命令安裝了以下幾個關鍵的軟件包,主要用于在 WSL2 的 Ubuntu 22.04 上配置 xv6(一個 RISC-V 架構的類 Unix 操作系統)的開發和調試環境。


1. git

  • 作用:Git 版本控制系統,用于下載 xv6 源碼,并進行代碼管理(如克隆、提交和更新)。
  • xv6 相關性:從 GitHub 上克隆 xv6 源代碼,例如:
    git clone https://github.com/mit-pdos/xv6-riscv.git
    

2. build-essential

  • 作用:提供了一組基本的編譯工具,包括 gccg++make 等。
  • xv6 相關性
    • xv6 使用 make 進行編譯,依賴 gcc 進行 C 語言編譯。
    • build-essential 里包含 make,而 xv6 的 Makefile 需要 make 來組織編譯流程。

3. gdb-multiarch

  • 作用:支持多架構的 GNU 調試器(GDB),可用于調試不同 CPU 指令集(如 x86、ARM、RISC-V 等)的程序。
  • xv6 相關性
    • xv6 運行在 RISC-V 上,因此需要一個支持 RISC-V 的 GDB 進行調試。
    • 可以用它遠程調試 QEMU 模擬器運行的 xv6:
      gdb-multiarch
      (gdb) target remote localhost:1234
      

4. qemu-system-misc

  • 作用:QEMU 是一個通用的CPU 模擬器,qemu-system-misc 包含對多個架構的 QEMU 模擬支持。
  • xv6 相關性
    • xv6 需要 QEMU 來模擬 RISC-V 硬件環境
    • 通常用如下命令運行 xv6:
      make qemu
      

5. gcc-riscv64-linux-gnu

  • 作用:RISC-V 交叉編譯器,可以編譯 RISC-V 目標平臺的代碼
  • xv6 相關性
    • xv6 運行在 RISC-V 上,而你的開發環境是 x86_64,因此需要交叉編譯器編譯 RISC-V 代碼。
    • 可以用它手動編譯 xv6 代碼:
      riscv64-linux-gnu-gcc -o hello hello.c
      

6. binutils-riscv64-linux-gnu

  • 作用:RISC-V 目標平臺的 GNU binutils 工具集,包括 as(匯編器)、ld(鏈接器)等。
  • xv6 相關性
    • xv6 需要 as 來編譯匯編代碼。
    • ld 用于鏈接最終的 xv6 可執行文件。

總結

軟件包作用在 xv6 中的用途
git版本控制克隆 xv6 源碼
build-essentialC/C++ 編譯工具編譯 xv6
gdb-multiarch多架構調試調試 xv6
qemu-system-miscCPU 模擬器運行 xv6
gcc-riscv64-linux-gnu交叉編譯編譯 RISC-V 代碼
binutils-riscv64-linux-gnu匯編/鏈接工具處理 RISC-V 匯編和鏈接

自己安裝的qemu和apt安裝的有什么區別

1. 版本差異

apt 安裝:Ubuntu 官方軟件源提供的 QEMU 可能是穩定版,但版本較老/或太新,可能缺少一些新功能或優化。
自己編譯:可以選擇最新的源碼,獲取最新功能、修復的 bug 和性能優化。

2. 編譯選項

apt 安裝:使用的是 Ubuntu 維護者編譯的二進制文件,默認開啟了一些常見的功能,但可能未啟用所有選項。
自己編譯:可以根據需求啟用或禁用特定功能,例如:

  • 僅編譯支持特定架構(如 --target-list=riscv64-softmmu
  • 選擇特定的加速選項(如 --enable-kvm--enable-tcg
  • 進行特定優化(如 --enable-lto 進行鏈接時優化)

3. 安裝路徑

apt 安裝:QEMU 會被安裝到系統路徑(如 /usr/bin/qemu-system-*
自己編譯
默認安裝在 ·/usr/local/bin·,不會影響系統自帶的 QEMU
可以自定義安裝路徑(如 ./configure --prefix=/opt/qemu
安裝路徑在 configure 之后的報告里有,如果保存了源代碼build文件夾還可以執行 sudo make uninstall 進行卸載

4. 依賴管理

apt 安裝:自動處理依賴關系,安裝/卸載時不容易出問題。
自己編譯:需要手動安裝依賴(如 libglib2.0-dev、libpixman-1-dev),可能會遇到缺少庫或不兼容的問題。

5. 更新與維護

apt 安裝:系統更新時可以自動升級(sudo apt upgrade)。
自己編譯:需要手動拉取源碼并重新編譯安裝,維護成本更高。

6. 兼容性

apt 安裝:官方軟件源提供的版本經過測試,與 Ubuntu 其他軟件兼容性較好。
自己編譯:如果使用了非官方補丁或特定配置,可能會遇到不兼容問題,例如影響 gdb、libvirt、kvm 相關組件的使用。

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

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

相關文章

招聘面試季--一文頓悟,Java中字節流和字符流的區別及使用場景上的差異

?一、核心區別? ?特性??字節流??字符流??數據單位?以字節&#xff08;8-bit&#xff09;為單位處理數據&#xff08;如0xA1&#xff09;以字符&#xff08;16-bit Unicode&#xff09;為單位處理數據&#xff08;如A, 你&#xff09;?基類?InputStream / OutputSt…

車載以太網網絡測試-16【傳輸層-UDP】

目錄 1 摘要2 車載以太網傳輸層概述3 車載以太網UDP協議3.1 車載以太網UDP協議的作用3.2 UDP報文幀結構3.3 UDP協議的通信過程3.3.1 通信過程3.3.2 實例示例3.3.3 代碼示例 4 總結 1 摘要 車載以太網的第五層是傳輸層&#xff0c;它在車載網絡架構中扮演著至關重要的角色。主要…

深度強化學習中的深度神經網絡優化策略:挑戰與解決方案

I. 引言 深度強化學習&#xff08;Deep Reinforcement Learning&#xff0c;DRL&#xff09;結合了強化學習&#xff08;Reinforcement Learning&#xff0c;RL&#xff09;和深度學習&#xff08;Deep Learning&#xff09;的優點&#xff0c;使得智能體能夠在復雜的環境中學…

無人機點對點技術要點分析!

一、技術架構 1. 網絡拓撲 Ad-hoc網絡&#xff1a;無人機動態組建自組織網絡&#xff0c;節點自主協商路由&#xff0c;無需依賴地面基站。 混合架構&#xff1a;部分場景結合中心節點&#xff08;如指揮站&#xff09;與P2P網絡&#xff0c;兼顧集中調度與分布式協同。 2.…

MQ,RabbitMQ,MQ的好處,RabbitMQ的原理和核心組件,工作模式

1.MQ MQ全稱 Message Queue&#xff08;消息隊列&#xff09;&#xff0c;是在消息的傳輸過程中 保存消息的容器。它是應用程序和應用程序之間的通信方法 1.1 為什么使用MQ 在項目中&#xff0c;可將一些無需即時返回且耗時的操作提取出來&#xff0c;進行異步處理&#xff0…

django怎么配置404和500

在 Django 中&#xff0c;配置 404 和 500 錯誤頁面需要以下步驟&#xff1a; 1. 創建自定義錯誤頁面模板 首先&#xff0c;創建兩個模板文件&#xff0c;分別用于 404 和 500 錯誤頁面。假設你的模板目錄是 templates/。 404 頁面模板 創建文件 templates/404.html&#x…

各類神經網絡學習:(四)RNN 循環神經網絡(下集),pytorch 版的 RNN 代碼編寫

上一篇下一篇RNN&#xff08;中集&#xff09;待編寫 代碼詳解 pytorch 官網主要有兩個可調用的模塊&#xff0c;分別是 nn.RNNCell 和 nn.RNN &#xff0c;下面會進行詳細講解。 RNN 的同步多對多、多對一、一對多等等結構都是由這兩個模塊實現的&#xff0c;只需要將對輸入…

深度學習篇---深度學習中的范數

文章目錄 前言一、向量范數1.L0范數1.1定義1.2計算式1.3特點1.4應用場景1.4.1特征選擇1.4.2壓縮感知 2.L1范數&#xff08;曼哈頓范數&#xff09;2.1定義2.2計算式2.3特點2.4應用場景2.4.1L1正則化2.4.2魯棒回歸 3.L2范數&#xff08;歐幾里得范數&#xff09;3.1定義3.2特點3…

星越L_燈光操作使用講解

目錄 1.開啟前照燈 2左右轉向燈、遠近燈 3.auto自動燈光 4.自適應遠近燈光 5.后霧燈 6.調節大燈高度 1.開啟前照燈 2左右轉向燈、遠近燈 3.auto自動燈光 系統根據光線自動開啟燈光

Stable Diffusion lora訓練(一)

一、不同維度的LoRA訓練步數建議 2D風格訓練 數據規模&#xff1a;建議20-50張高質量圖片&#xff08;分辨率≥10241024&#xff09;&#xff0c;覆蓋多角度、多表情的平面風格。步數范圍&#xff1a;總步數控制在1000-2000步&#xff0c;公式為 總步數 Repeat Image Epoch …

AI 生成 PPT 網站介紹與優缺點分析

隨著人工智能技術不斷發展&#xff0c;利用 AI 自動生成 PPT 已成為提高演示文稿制作效率的熱門方式。本文將介紹幾款主流的 AI PPT 工具&#xff0c;重點列出免費使用機會較多的網站&#xff0c;并對各平臺的優缺點進行詳細分析&#xff0c;幫助用戶根據自身需求選擇合適的工具…

使用Systemd管理ES服務進程

Centos中的Systemd介紹 CentOS 中的 Systemd 詳細介紹 Systemd 是 Linux 系統的初始化系統和服務管理器&#xff0c;自 CentOS 7 起取代了傳統的 SysVinit&#xff0c;成為默認的初始化工具。它負責系統啟動、服務管理、日志記錄等核心功能&#xff0c;顯著提升了系統的啟動速…

【一維前綴和與二維前綴和(簡單版dp)】

1.前綴和模板 一維前綴和模板 1.暴力解法 要求哪段區間&#xff0c;我就直接遍歷那段區間求和。 時間復雜度O(n*q) 2.前綴和 ------ 快速求出數組中某一個連續區間的和。 1&#xff09;預處理一個前綴和數組 這個前綴和數組設定為dp&#xff0c;dp[i]表示&#xff1a;表示…

在Windows和Linux系統上的Docker環境中使用的鏡像是否相同

在Windows和Linux系統上的Docker環境中使用的鏡像是否相同&#xff0c;取決于具體的運行模式和目標平臺&#xff1a; 1. Linux容器模式&#xff08;默認/常見場景&#xff09; Windows系統&#xff1a; 當Windows上的Docker以Linux容器模式運行時&#xff08;默認方式&#xf…

植物來源藥用天然產物的合成生物學研究進展-文獻精讀121

植物來源藥用天然產物的合成生物學研究進展 摘要 大多數藥用天然產物在植物中含量低微&#xff0c;提取分離困難&#xff1b;而且這些化合物一般結構復雜&#xff0c;化學合成難度大&#xff0c;還容易造成環境污染。基于合成生物學技術獲得藥用天然產物具有綠色環保和可持續發…

JavaScript |(五)DOM簡介 | 尚硅谷JavaScript基礎實戰

學習來源&#xff1a;尚硅谷JavaScript基礎&實戰丨JS入門到精通全套完整版 筆記來源&#xff1a;在這位大佬的基礎上添加了一些東西&#xff0c;歡迎大家支持原創&#xff0c;大佬太棒了&#xff1a;JavaScript |&#xff08;五&#xff09;DOM簡介 | 尚硅谷JavaScript基礎…

瀏覽器工作原理深度解析(階段二):HTML 解析與 DOM 樹構建

一、引言 在階段一中&#xff0c;我們了解了瀏覽器通過 HTTP/HTTPS 協議獲取頁面資源的過程。本階段將聚焦于瀏覽器如何解析 HTML 代碼并構建 DOM 樹&#xff0c;這是渲染引擎的核心功能之一。該過程可分為兩個關鍵步驟&#xff1a;詞法分析&#xff08;Token 化&#xff09;和…

The Illustrated Stable Diffusion

The Illustrated Stable Diffusion 1. The components of Stable Diffusion1.1. Image information creator1.2. Image Decoder 2. What is Diffusion anyway?2.1. How does Diffusion work?2.2. Painting images by removing noise 3. Speed Boost: Diffusion on compressed…

yarn 裝包時 package里包含sqlite3@5.0.2報錯

yarn 裝包時 package里包含sqlite35.0.2報錯 解決方案&#xff1a; 第一步&#xff1a; 刪除package.json里的sqlite35.0.2 第二步&#xff1a; 裝包&#xff0c;或者增加其他的npm包 第三步&#xff1a; 在package.json里增加sqlite35.0.2&#xff0c;并運行yarn裝包 此…

一個免費 好用的pdf在線處理工具

pdf24 doc2x 相比上面能更好的支持數學公式。但是收費