背景
在Windows、macOS和Linux環境下使用QEMU搭建RISC-V 64位Linux系統,網絡上存在大量過時、不完整或錯誤的教程。且部分AI生成的內容“幻覺”現象嚴重,導致關鍵步驟錯誤且難以進行。為確保可靠性,本教程基于最新實測驗證,涵蓋三種操作系統環境,并以Casibase項目作為下游任務進行了搭建部署,如果讀者需要在riscv64部署、運行golang + react + mysql服務,可以參考下篇文章。
所有必要工具及文件的下載鏈接均來自官方源,避免因第三方托管導致的版本混亂或安全風險。以下內容經過完整測試,確保從環境配置到系統啟動的每一步均可復現。
關于Casibase
介紹:??AI Cloud OS: Open-source enterprise-level AI knowledge base and MCP (model-context-protocol)/A2A (agent-to-agent) management platform with admin UI, user management and Single-Sign-On??, supports ChatGPT, Claude, Llama, Ollama, HuggingFace, etc., chat bot demo:?https://ai.casibase.com, admin UI demo:?https://ai-admin.casibase.com
GitHub倉庫:https://github.com/casibase/casibase
官網:casibase.org
目標
分別在Windows、macOS、liunx下使用qemu搭建基于Debian的riscv64/linux系統。
我們需要三個必要的軟件:
- QEMU
- OpenSBI:一個開源項目:RISC-V Open Source Supervisor Binary Interface,SBI 是在 RISC-V 模式運行的硬件和操作系統之間的層,有點類似 BIOS。
- U-Boot:一個開源的主引導加載程序,提供一系列用于引導操作系統內核的指令。
環境部署
一、Windows
? ? ? ?1.?從官網下載QEMU
?Download QEMU - QEMU?該下載鏈接簡短清晰,閱讀后直接下載即可。
? ? ? ? 2. 下載 OpenSBI 和 U-Boot
????????無需源碼構建(復雜),直接從 De-bian Archive 中下載預編譯的版本即可。
- OpenSBI:Debian -- Details of package opensbi in sid
- U-Boot:Debian -- Details of package u-boot-qemu in sid
????????下載會得到兩個?.deb
?軟件包。這是Debian系統的軟件包文件,我們僅需要內部的fw_jump.elf和uboot.elf文件。所以,只需要解壓出這個.deb文件即可。
????????Windows下可以使用第三方解壓軟件,如7-Zip等。解壓后,繼續解壓data.tar.xz文件,形成usr目錄。之后按路徑:basePath\usr\lib\riscv64-linux-gnu\opensbi\generic\fw_jump.elf和basePath\usr\lib\u-boot\qemu-riscv64_smode\uboot.elf拿到對應要的文件(可以遷移到任何位置,并不依賴當前包下其他文件起作用)。
? ? ?3. 下載riscv64 QCOW2 虛擬磁盤。?
? ? ? ? 不需要自己去構建,直接使用Debian Quick Image Baker pre-baked images預編譯鏡像:Debian Quick Image Baker pre-baked images?下載 Release architectures---->Images for riscv64-virt項。下載后是一個無后綴的文件,將其重命名為zip后綴,然后解壓。得到關鍵文件:image.qcow2
至此,結束前期準備,可以啟動qemu riscv64了。請翻閱文末。
二、Linux
? ? ? ? 前言:qemu可從官網下載,OpenSBI、 U-Boot、QCOW2并不吃操作系統差異,所以即使按照window的配置流程進行也完全沒問題,只不過命令有差異而已。但是如Linux/macOS這類操作系統的包管理命令(apt、yum)可以很方便幫我們完成上述工作(缺點:包比較老舊,但是實測可用,未發生不兼容情況)。所以下文以Debian/ubuntu為例進行:
? ? ? ? 0. 安裝依賴包:
sudo apt-get install build-essential pkg-config libboost-all-dev autoconf libtool libssl-dev flex bison ninja-build libglib2.0-dev ? ?libpixman-1-dev libslirp-dev libncurses5-dev libncursesw5-dev?
? ? ? ?1.?下載QEMU
Arch:?pacman -S qemuDebian/Ubuntu:
For full system emulation:?apt-get install qemu-system
For emulating Linux binaries:?apt-get install qemu-user-static
Fedora:?dnf install @virtualizationGentoo:?emerge --ask app-emulation/qemuRHEL/CentOS:?yum install qemu-kvmSUSE:?zypper install qemu
? ? ? ? 驗證:qemu-system-riscv64 --version
? ? ? ? 2. 下載 OpenSBI 和 U-Boot
sudo apt update
sudo apt install qemu-system-misc opensbi u-boot-qemu
? ? ?3. 下載riscv64 QCOW2 虛擬磁盤。?
? ? ? ? 不需要自己去構建,直接使用Debian Quick Image Baker pre-baked images預編譯鏡像:Debian Quick Image Baker pre-baked images?下載 Release architectures---->Images for riscv64-virt項。下載后是一個無后綴的文件,將其重命名為zip后綴,然后解壓。得到關鍵文件:image.qcow2:
# 下載鏡像
wget -O dqib_riscv64-virt.zip "https://gitlab.com/api/v4/projects/giomasce%2Fdqib/jobs/artifacts/master/download?job=convert_riscv64-virt"# 重命名并解壓
unzip dqib_riscv64-virt.zip# 顯示文件列表
ls -la
至此,結束前期準備,可以啟動qemu riscv64了。請翻閱文末。
三、MacOS
? ? ? ? 前言:qemu可從官網下載,OpenSBI、 U-Boot、QCOW2并不吃操作系統差異,所以即使按照window的配置流程進行也完全沒問題,只不過命令有差異而已。但是如Linux/macOS這類操作系統的包管理命令(apt、yum、brew)可以很方便幫我們完成上述工作(缺點:包比較老舊,但是實測可用,未發生不兼容情況)。所以下文以Debian/ubuntu為例進行:
? ? ? ?1.?下載QEMU
brew install qemu
? ? ? ? 驗證:qemu-system-riscv64 --version
? ? ? ? 2. 下載 OpenSBI 和 U-Boot
?無需源碼構建(復雜),直接從 De-bian Archive 中下載預編譯的版本即可。
- OpenSBI:Debian -- Details of package opensbi in sid
- U-Boot:Debian -- Details of package u-boot-qemu in sid
????????下載會得到兩個?.deb
?軟件包。這是Debian系統的軟件包文件,我們僅需要內部的fw_jump.elf和uboot.elf文件。所以,只需要解壓出這個.deb文件即可。
????????MacOS下可以使用“ar?-x 文件名”進行解壓。解壓后,繼續解壓data.tar.xz文件,形成usr目錄。之后按路徑:basePath\usr\lib\riscv64-linux-gnu\opensbi\generic\fw_jump.elf和basePath\usr\lib\u-boot\qemu-riscv64_smode\uboot.elf拿到對應要的文件(可以遷移到任何位置,并不依賴當前包下其他文件起作用)。
? ? ? ? 3. 下載riscv64 QCOW2 虛擬磁盤。?
? ? ? ? 不需要自己去構建,直接使用Debian Quick Image Baker pre-baked images預編譯鏡像:Debian Quick Image Baker pre-baked images?下載 Release architectures---->Images for riscv64-virt項。下載后是一個無后綴的文件,將其重命名為zip后綴,然后解壓。得到關鍵文件:image.qcow2:
# 下載鏡像
wget -O dqib_riscv64-virt.zip "https://gitlab.com/api/v4/projects/giomasce%2Fdqib/jobs/artifacts/master/download?job=convert_riscv64-virt"# 重命名并解壓
unzip dqib_riscv64-virt.zip# 顯示文件列表
ls -la
至此,結束前期準備,可以啟動qemu riscv64了。請翻閱文末。
四、啟動
建議把前期的四個工具的文件都整到一起,便于管理(qemu、OpenSBI、 U-Boot、QCOW2)
qemu riscv64/linux啟動命令:
qemu-system-riscv64 -machine virt -m 8G -smp 8 -cpu rv64 \
-device virtio-blk-device,drive=hd \
-drive file=image.qcow2,if=none,id=hd \
-device virtio-net-device,netdev=net \
-netdev user,id=net,hostfwd=tcp::2222-:22,hostfwd=tcp::14000-:14000 \
-bios ~/riscv-linux/opensbi-1.3-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.elf \
-kernel ~/riscv-linux/usr/lib/u-boot/qemu-riscv64_smode/uboot.elf \
-object rng-random,filename=/dev/urandom,id=rng \
-device virtio-rng-device,rng=rng \
-nographic -append "root=LABEL=rootfs console=ttyS0"
注意:
? ? ? ? 1. -drive file參數,后面跟著的是QCOW2的image.qcow2文件。注意路徑要正確。
????????2. -bios 參數,后面跟著的是opensbi的elf文件。注意路徑要正確。
? ? ? ? 3. -kernel參數,后面跟著的是u-boot的elf文件。注意路徑要正確。
? ? ? ? 4. 第一行-m、-smp參數,后面跟著的分別是內存和核心數,要根據自己電腦配置來,不然啟動會失敗,建議不要吝嗇,因為qemu本身把riscv命令變為?86等命令就很耗時,再加上riscv架構上許多應用適配不好,進一步加劇性能損耗,不加大內存和核心數的話很容易卡死riscv系統。
? ? ? ? 5. -netdev參數,后面跟著的是要映射的主機端口,因為riscv和本機默認是NAT方式。如果我們希望riscv中的某些端口可以被外界訪問,那么就需要配置映射,例如,本例中增加了14000作為映射端口,希望可以在宿主機使用localhost:14000的方式訪問riscv服務。(建議保留2222-:22的映射)。
? ? ? ? 6. 此外的報錯,碰見缺啥依賴包下載啥就行了,都是包管理工具直接下載的包。
四、補充
下載下來的riscv64 QCOW2 虛擬磁盤默認是10G大小,很多情況下根本不夠用。如果未來出現問題,可以進行擴容:
? ? ? ? 1. 進入到image.qcow2所在文件夾下,執行:
qemu-img resize image.qcow2 +10G
? ? ? ? 2.??擴容
# 更新包列表
sudo apt update# 安裝cloud-guest-utils包(包含growpart工具)
sudo apt install cloud-guest-utils# 查看磁盤分區
sudo fdisk -l# 擴展第一個分區到最大可用空間
sudo growpart /dev/vda 1# 驗證分區是否擴展成功
sudo fdisk -l /dev/vda# 檢查文件系統類型
df -T /# 如果是ext4文件系統
sudo resize2fs /dev/vda1# 如果是xfs文件系統
sudo xfs_growfs /# 驗證擴展結果
df -h /