在Ubuntu下運行QEMU仿真FreeBSD riscv64系統

在Ubuntu下運行QEMU仿真FreeBSD riscv64系統

突發奇想,嘗試在Ubuntu下運行QEMU仿真FreeBSD riscv64系統,

參考這篇文檔:手把手教你在QEMU上運行RISC-V Linux_qemu 運行 .bin-CSDN博客

并參考FreeBSD的Wiki:riscv - FreeBSD Wiki?

以前做過嘗試,是在FreeBSD里仿真FreeBSD riscv64系統 以及Ubuntu里QEMU仿真Riscv64 linux系統,這回是在Ubuntu下運行QEMU仿真FreeBSD riscv64系統。本次實踐是在Ubuntu24.04下進行QEMU仿真FreeBSD riscv64系統,發現當前新的QEMU使用起來更加簡單方便,基本只需要包安裝,不需要編譯安裝(這樣實踐耗時大大減少)

以前的實踐:QEMU安裝和使用@Ubuntu(待續)_qumu安裝與使用-CSDN博客

FreeBSD下qemu啟動FreeBSD riscv64 zfs 映像

使用buildboot創建文件系統(非必須)

看參考文檔里,講的使用buildboot,比較復雜,主要是make menuconfig 耗時非常長,沒有等待編譯成功。所以后期放棄這個方法了。

使用buildboot

下載:https://buildroot.org/downloads/buildroot-2024.11.tar.xz

wget https://buildroot.org/downloads/buildroot-2024.11.tar.xz

?解壓

unxz buildroot-2024.11.tar.xz

解包

tar -xvf buildroot-2024.11.tar.xz

進入目錄,執行make menuconfig:

cd buildroot-2022.02.6
make menuconfig

進入菜單,設置為riscv ,選64位,選ext3

然后編譯

make -j 8?

Saving to: ‘/home/skywalk/download/buildroot-2024.11/output/build/.util-linux-2.40.2.tar.xz.s98aRn/output’
編譯事件較長,沒有等到編譯完成,所以最終放棄了該方法。

實踐,在Windows10 Ubuntu24.04下QEMU仿真FreeBSD riscv64系統

準備好FreeBSD riscv64系統虛擬鏡像

從中科大下載FreeBSD riscv64系統虛擬鏡像

wget https://mirrors.ustc.edu.cn/freebsd/releases/VM-IMAGES/14.2-RELEASE/riscv64/Latest/FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xz

但是中科大的站可能不允許直接wget,所以要通過lynx從網頁端過去,先安裝lynx

sudo apt install lynx

用lynx打開中科大鏡像站:

lynx https://mirrors.ustc.edu.cn

點擊里面的FreeBSD鏡像,也就是進入這個頁面:

lynx https://mirrors.ustc.edu.cn/freebsd/releases/VM-IMAGES/14.2-RELEASE/riscv64/Latest/

下載這個文件:FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xz

解壓:

unxz FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw.xz

擴充文件到40G

truncate -s 20G FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw

拿到FreeBSD的boot kernel?

發現在Ubuntu下拿這個文件比較難,建議直接找一臺機器到FreeBSD下去拿。

準備一臺FreeBSD系統

可以用實體機安裝FreeBSD

也可以用Vmware或者VirtualBox等創建FreeBSD的虛擬機,然后安裝FreeBSD系統。

也可以用QEMU創建FreeBSD的仿真,然后用啟動光盤安裝或運行FreeBSD系統。

安裝u-boot-qemu-riscv64?

在FreeBSD系統下,使用pkg install來安裝u-boot-qemu-riscv64:

sudo pkg install opensbi u-boot-qemu-riscv64 qemu

?從FreeBSD系統拿到u-boot文件

我們需要u-boot.bin這個文件,位置FreeBSD系統的/usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin

可以使用scp從FreeBSD系統scp到Ubuntu,比如FreeBSD系統的ip是192.168.1.5,scp到當前目錄:

scp 192.168.1.5://usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin .

啟動QEMU仿真

將u-boot.bin 和?FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw 文件都放在當前目錄,然后啟動QEMU仿真:

qemu-system-riscv64 -machine virt -m 2048M -smp 2 -nographic \-kernel u-boot.bin \-drive file=FreeBSD-14.2-RELEASE-riscv-riscv64-zfs.raw,format=raw,id=hd0 -device virtio-blk-device,drive=hd0 \-netdev user,id=net0,ipv6=off,hostfwd=tcp::8022-:22 -device virtio-net-device,netdev=net0

?啟動成功,用uname看看:

root@freebsd:~ # uname -a
FreeBSD freebsd 14.2-RELEASE FreeBSD 14.2-RELEASE releng/14.2-n269506-c8918d6c7412 GENERIC riscv

好了,現在實踐完成。

網絡好像還沒有通,大約是需要打開nat轉發,這個以后再調試:

ifconfig
vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE>ether 52:54:00:12:34:56inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255inet6 fe80::5054:ff:fe12:3456%vtnet0 prefixlen 64 scopeid 0x1media: Ethernet autoselect (10Gbase-T <full-duplex>)status: activend6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>inet 127.0.0.1 netmask 0xff000000inet6 ::1 prefixlen 128inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2groups: lond6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

后來才知道,當時網絡已經通了,只是ping不通罷了。

但是沒有pkg,所以需要手工下載ports.txz ,然后到/usr/ports/ports-mgmt/pkg 目錄下編譯make install安裝才行。參考:如果一臺Riscv FreeBSD系統沒有pkg怎么辦?_freebsd 沒有pkg-CSDN博客?

調試

qemu-system-riscv64啟動后卡住

Domain0 Name ? ? ? ? ? ? ?: root
Domain0 Boot HART ? ? ? ? : 3
Domain0 HARTs ? ? ? ? ? ? : 0*,1*,2*,3*
Domain0 Region00 ? ? ? ? ?: 0x0000000002000000-0x000000000200ffff M: (I,R,W) S/U: ()
Domain0 Region01 ? ? ? ? ?: 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()
Domain0 Region02 ? ? ? ? ?: 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
Domain0 Region03 ? ? ? ? ?: 0x0000000000000000-0xffffffffffffffff M: (R,W,X) S/U: (R,W,X)
Domain0 Next Address ? ? ?: 0x0000000000000000
Domain0 Next Arg1 ? ? ? ? : 0x00000000bfe00000
Domain0 Next Mode ? ? ? ? : S-mode
Domain0 SysReset ? ? ? ? ?: yes
Domain0 SysSuspend ? ? ? ?: yes

Boot HART ID ? ? ? ? ? ? ?: 3
Boot HART Domain ? ? ? ? ?: root
Boot HART Priv Version ? ?: v1.12
Boot HART Base ISA ? ? ? ?: rv64imafdch
Boot HART ISA Extensions ?: time,sstc
Boot HART PMP Count ? ? ? : 16
Boot HART PMP Granularity : 4
Boot HART PMP Address Bits: 54
Boot HART MHPM Count ? ? ?: 16
Boot HART MIDELEG ? ? ? ? : 0x0000000000001666
Boot HART MEDELEG ? ? ? ? : 0x0000000000f0b509

看了下感覺是沒有寫kernel的緣故,最終是到FreeBSD下安裝了uboot,拿到了這個文件:usr/local/share/u-boot/u-boot-qemu-riscv64/u-boot.bin

并在命令里加入:? ? -kernel u-boot.bin 這個參數,問題解決。

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

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

相關文章

大模型微調---Prompt-tuning微調

目錄 一、前言二、Prompt-tuning實戰2.1、下載模型到本地2.2、加載模型與數據集2.3、處理數據2.4、Prompt-tuning微調2.5、訓練參數配置2.6、開始訓練 三、模型評估四、完整訓練代碼 一、前言 Prompt-tuning通過修改輸入文本的提示&#xff08;Prompt&#xff09;來引導模型生…

Visual Studio 、 MSBuild 、 Roslyn 、 .NET Runtime、SDK Tools之間的關系

1. Visual Studio Visual Studio 是一個集成開發環境&#xff08;IDE&#xff09;&#xff0c;為開發者提供代碼編寫、調試、測試和發布等功能。它內置了 MSBuild、Roslyn 和 SDK Tools&#xff0c;并提供圖形化界面來方便開發者進行項目管理和構建。與其他組件的關系&#xf…

Winnows基礎(2)

Target 了解常見端口及服務&#xff0c;熟練cmd命令&#xff0c;編寫簡單的 .bat 病毒程序。 Trail 常見服務及端口 80 web 80-89 可能是web 443 ssl心臟滴血漏洞以及一些web漏洞測試 445 smb 1433 mssql 1521 oracle 2082/2083 cpanel主機管理系統登陸&#xff08;國外用的…

Edge Scdn用起來怎么樣?

Edge Scdn&#xff1a;提升網站安全與性能的最佳選擇 在當今互聯網高速發展的時代&#xff0c;各種網絡攻擊層出不窮&#xff0c;特別是針對網站的DDoS攻擊威脅&#xff0c;幾乎每個行業都可能成為目標。為了確保網站的安全性與穩定性&#xff0c;越來越多的企業開始關注Edge …

通信技術以及5G和AI保障電網安全與網絡安全

摘 要&#xff1a;電網安全是電力的基礎&#xff0c;隨著智能電網的快速發展&#xff0c;越來越多的ICT信息通信技術被應用到電力網絡。本文分析了歷史上一些重大電網安全與網絡安全事故&#xff0c;介紹了電網安全與網絡安全、通信技術與電網安全的關系以及相應的電網安全標準…

梯度(Gradient)和 雅各比矩陣(Jacobian Matrix)的區別和聯系:中英雙語

雅各比矩陣與梯度&#xff1a;區別與聯系 在數學與機器學習中&#xff0c;梯度&#xff08;Gradient&#xff09; 和 雅各比矩陣&#xff08;Jacobian Matrix&#xff09; 是兩個核心概念。雖然它們都描述了函數的變化率&#xff0c;但應用場景和具體形式有所不同。本文將通過…

時間序列預測論文閱讀和相關代碼庫

時間序列預測論文閱讀和相關代碼庫列表 MLP-based的時間序列預測資料DLinearUnetTSFPDMLPLightTS 代碼庫以及論文庫&#xff1a;Time-Series-LibraryUnetTSFLightTS MLP-based的時間序列預測資料 我會定期把我的所有時間序列預測論文有關的資料鏈接全部同步到這個文章中&#…

引言和相關工作的區別

引言和相關工作的區別 引言 目的與重點 引言主要是為了引出研究的主題,向讀者介紹為什么這個研究問題是重要且值得關注的。它通常從更廣泛的背景出發,闡述研究領域的現狀、面臨的問題或挑戰,然后逐漸聚焦到論文要解決的具體問題上。例如,在這篇關于聯邦學習數據交易方案的…

GitLab分支管理策略和最佳實踐

分支管理是 Git 和 GitLab 中非常重要的部分&#xff0c;合理的分支管理可以幫助團隊更高效地協作和開發。以下是一些細化的分支管理策略和最佳實踐&#xff1a; 1. 分支命名規范 ? 主分支&#xff1a;通常命名為 main 或 master&#xff0c;用于存放穩定版本的代碼。 ? …

批量提取zotero的論文構建知識庫做問答的大模型(可選)——含轉存PDF-分割統計PDF等

文章目錄 提取zotero的PDF上傳到AI平臺保留文件名代碼分成20個PDF視頻講解 提取zotero的PDF 右鍵查看目錄 發現目錄為 C:\Users\89735\Zotero\storage 寫代碼: 掃描路徑‘C:\Users\89735\Zotero\storage’下面的所有PDF文件,全部復制一份匯總到"C:\Users\89735\Downl…

LabVIEW實現NB-IoT通信

目錄 1、NB-IoT通信原理 2、硬件環境部署 3、程序架構 4、前面板設計 5、程序框圖設計 6、測試驗證 本專欄以LabVIEW為開發平臺,講解物聯網通信組網原理與開發方法,覆蓋RS232、TCP、MQTT、藍牙、Wi-Fi、NB-IoT等協議。 結合實際案例,展示如何利用LabVIEW和常用模塊實現物聯網…

面試題整理9----談談對k8s的理解2

面試題整理9----談談對k8s的理解2 1. Service 資源1.1 ServiceClusterIPNodePortLoadBalancerIngressExternalName 1.2 Endpoints1.3 Ingress1.4 EndpointSlice1.5 IngressClass 2. 配置和存儲資源2.1 ConfigMap2.2 Secret2.3 PersistentVolume2.4 PersistentVolumeClaim2.5 St…

精準采集整車信號:風丘混合動力汽車工況測試

一 背景 混合動力汽車是介于純電動汽車與燃油汽車兩者之間的一種新能源汽車。它既包含純電動汽車無污染、啟動快的優勢&#xff0c;又擁有燃油車續航便捷、不受電池容量限制的特點。在當前環境下&#xff0c;混合動力汽車比純電動汽車更符合目前的市場需求。 然而&#xff0c…

帶標題和不帶標題的內部表

什么是工作區&#xff1f; 什么是工作區&#xff1f;簡單來說&#xff0c;工作區是單行數據。它們應具有與任何內部表相同的格式。它用于一次處理一行內部表中的數據。 內表和工作區的區別 &#xff1f; 一圖勝千言 內表的類型 有兩種類型的內表&#xff1a; 帶 Header 行…

【圖像分類實用腳本】數據可視化以及高數量類別截斷

圖像分類時&#xff0c;如果某個類別或者某些類別的數量遠大于其他類別的話&#xff0c;模型在計算的時候&#xff0c;更傾向于擬合數量更多的類別&#xff1b;因此&#xff0c;觀察類別數量以及對數據量多的類別進行截斷是很有必要的。 1.準備數據 數據的格式為圖像分類數據集…

【Leetcode 每日一題】2545. 根據第 K 場考試的分數排序

問題背景 班里有 m m m 位學生&#xff0c;共計劃組織 n n n 場考試。給你一個下標從 0 0 0 開始、大小為 m n m \times n mn 的整數矩陣 s c o r e score score&#xff0c;其中每一行對應一位學生&#xff0c;而 s c o r e [ i ] [ j ] score[i][j] score[i][j] 表示…

React系列(八)——React進階知識點拓展

前言 在之前的學習中&#xff0c;我們已經知道了React組件的定義和使用&#xff0c;路由配置&#xff0c;組件通信等其他方法的React知識點&#xff0c;那么本篇文章將針對React的一些進階知識點以及React16.8之后的一些新特性進行講解。希望對各位有所幫助。 一、setState &am…

PCIe_Host驅動分析_地址映射

往期內容 本文章相關專欄往期內容&#xff0c;PCI/PCIe子系統專欄&#xff1a; 嵌入式系統的內存訪問和總線通信機制解析、PCI/PCIe引入 深入解析非橋PCI設備的訪問和配置方法 PCI橋設備的訪問方法、軟件角度講解PCIe設備的硬件結構 深入解析PCIe設備事務層與配置過程 PCIe的三…

【閱讀記錄-章節6】Build a Large Language Model (From Scratch)

文章目錄 6. Fine-tuning for classification6.1 Different categories of fine-tuning6.2 Preparing the dataset第一步&#xff1a;下載并解壓數據集第二步&#xff1a;檢查類別標簽分布第三步&#xff1a;創建平衡數據集第四步&#xff1a;數據集拆分 6.3 Creating data loa…

ip_output函數

ip_output函數是Linux內核(特別是網絡子系統)中用于發送IPv4數據包的核心函數。以下是一個示例實現,并附上詳細的中文講解: int ip_output(struct net *net, struct sock *sk, struct sk_buff *skb) {struct iphdr *iph; /* 構建IP頭部 */iph = ip_hdr(skb);/* 設置服務…