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
配置大体流程
- 卸载原先qemu
- clone qemu官方源代码,切换到stable 7.2 version
- configure
- 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-gcc | Linux 用户空间 | riscv64-linux-gnu | 编译 RISC-V Linux 应用程序 | ✅ (glibc) |
riscv64-unknown-elf-gcc | 裸机 / RTOS / OS 内核 | riscv64-unknown-elf | 编译 xv6、U-Boot、裸机程序 | ❌(无操作系统支持) |
riscv64-unknown-linux-gnu-gcc | Linux 用户空间 | riscv64-unknown-linux-gnu | 交叉编译 Linux 程序(可能使用 musl) | ✅ (glibc 或 musl) |
- 如果你在开发 Linux 用户空间应用(如普通软件)
→ 用riscv64-linux-gnu-gcc或riscv64-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
- 作用:提供了一组基本的编译工具,包括
gcc、g++、make等。 - xv6 相关性:
- xv6 使用
make进行编译,依赖gcc进行 C 语言编译。 build-essential里包含make,而 xv6 的 Makefile 需要make来组织编译流程。
- xv6 使用
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 需要
总结
| 软件包 | 作用 | 在 xv6 中的用途 |
|---|---|---|
git | 版本控制 | 克隆 xv6 源码 |
build-essential | C/C++ 编译工具 | 编译 xv6 |
gdb-multiarch | 多架构调试 | 调试 xv6 |
qemu-system-misc | CPU 模拟器 | 运行 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 相关组件的使用。
相关文章:
wsl2配置xv6全解(包括22.04Jammy)
文章目录 获取xv6源代码Ubuntu20.04 Version安装指令成功测试参考MIT2021年官方文档 24.04 Version安装指令成功测试参考MIT2024年官方文档 Ubuntu 22.04没有官方文档? 配置大体流程1. 卸载原本qemu(如果之前安装了)2. clone qemu官方源代码&…...
并查集——108. 冗余连接
108. 冗余连接 题目描述 有一个图,它是一棵树,他是拥有 n 个节点(节点编号1到n)和 n - 1 条边的连通无环无向图(其实就是一个线形图),如图: 现在在这棵树上的基础上,添加一条边(依然是n个节点,但有n条边),使这个图变成了有环图,如图: 先请你找出冗余边,删除后…...
初识XXL-JOB分布式任务调度
XXL-JOB架构分析 设计思想 将调度行为抽象形成"调度中心"公共平台,而平台自身并不承担业务逻辑,"调度中心"负责发起调度请求。 将任务抽象成分散的JobHandler,交由"执行器"统一管理,"执行器…...
第29章:Service Mesh概念与Istio架构解析
第29章:Service Mesh概念与Istio架构解析 作者:DogDog_Shuai 阅读时间:约30分钟 难度:高级 目录 1. 引言2. Service Mesh基础概念3. Istio架构详解4. Istio核心功能5. Istio部署与配置6. 服务治理实战...
AI 核心技术教程:LLM、Text Embedding、Speech2Text、Moderation、TTS
AI 核心技术教程:LLM、Text Embedding、Speech2Text、Moderation、TTS 引言 随着人工智能的快速发展,NLP(自然语言处理)、语音识别、内容审核等技术正在重塑各个行业。本教程将详细介绍 大语言模型(LLM)、…...
【数据结构进阶】位图
🌟🌟作者主页:ephemerals__ 🌟🌟所属专栏:数据结构 目录 前言 一、位图的概念与结构 二、位图的实现 1. 结构定义 2. 构造函数 3. 三大接口实现 set unset test 总代码 4. 测试 三、 标准库的…...
[极客大挑战 2019]BabySQL—3.20BUUCTF练习day4(3)
[极客大挑战 2019]BabySQL-3.20BUUCTF练习day4(3) 做题过程 打开是以下页面(前几天有它的第一版和第二版出现)输入1’ 回显以下内容(还是字符型以单引号闭合,因为有报错信息回显) 输入1 order by 4%23回显成这个 被过…...
`sscanf` 和 `scanf` 的区别
sscanf 和 scanf 都是 C 语言中用于从字符串中读取格式化输入的函数,但它们的主要区别在于输入源的不同。 1、### scanf scanf 函数用于从标准输入(通常是键盘)读取格式化的输入。它的原型如下: int scanf(const char *format, .…...
JVM 学习前置知识
JVM 学习前置知识 Java 开发环境层次结构解析 下图展示了 Java 开发环境的层级关系及其核心组件,从底层操作系统到上层开发工具,逐步构建完整的开发与运行环境: 1. 操作系统(Windows, MacOS, Linux, Solaris) 作用&…...
数智读书笔记系列021《大数据医疗》:探索医疗行业的智能变革
一、书籍介绍 《大数据医疗》由徐曼、沈江、余海燕合著,由机械工业出版社出版 。徐曼是南开大学商学院副教授,在大数据驱动的智能决策研究领域颇有建树,尤其在大数据驱动的医疗与健康决策方面有着深入研究,曾获天津优秀博士论文、…...
Oracle 常用语法汇总
系列文章目录 本文对Oracle 常用的语法进行汇总 文章目录 系列文章目录一、Oracle 表&表字段操作:1.1 DDL语句(数据定义语言)Create、Alter、Drop、Truncate:1.1.1 建表:建表:注释COMMENT :表中字段的约束:表中字…...
解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题
配置类 [Section1] Key_AAA Value[Section2] AnotherKey Value默认情况下,ConfigParser会将ini配置文件中的KEY,转为小写。 重载后配置类: 继承类从configparser.ConfigParser改为configparser.RawConfigParser重载方法optionxform&#…...
第一天 UnityShader的结构
Shader初学者的学习笔记 第一天 Unity Shader的结构 文章目录 Shader初学者的学习笔记前言一、Unity Shader结构二、Unity Shader结构解析① Properties② Tags③ RenderSetup(可选状态)④ Name⑤ [Tags]⑥ [RenderSetup]⑦ 顶点着色器和片元着色器的代码 (Unity最聪明的孩子)…...
什么是 BA ?BA怎么样?BA和BI是什么关系?
前几天有朋友在评论区提到了BA这个角色,具体是干什么的,我大概来说一下。 什么是BA BA 英文的全称是Business Analyst,从字面上意思就是商业分析师,做过商业智能BI项目的应该比较了解。实际上以我个人的经验,BA 的角…...
Jmeter旧版本如何下载
1.Jmeter最新版本下载位置 https://jmeter.apache.org/download_jmeter.cgi2.Jmeter旧版本下载位置 https://archive.apache.org/dist/jmeter/binaries稳定版本:5.4.1...
Python帕累托图(Pareto Chart): 从数据排序到决策优化
帕累托图(Pareto Chart)是一种基于80/20法则的经典数据可视化工具,广泛应用于质量管理、项目管理、业务分析等领域。本文将从其原理、构成、实现方法到应用场景进行全面解析,并附Python代码示例。 一、帕累托图的定义与起源 帕累…...
Linux中执行 ifconfig 命令时提示 “未找到命令”
在 Linux 系统里,若执行 ifconfig 命令时提示 “未找到命令” 通常是由于系统没有安装 net-tools 包,或者该命令不在系统的 PATH 环境变量所包含的路径中 安装 net-tools 包 # Ubuntu/Debian sudo apt update sudo apt install net-tools# CentOS 7 及以…...
Python---数据分析(Pandas六:二维数组DataFrame,DataFrame的创建,DataFrame的属性)
一、 二维数组DataFrame DataFrame 是 Pandas 中的一个表格型的数据结构,包含有多列的数据,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame 即有行索引也有列索引,可以被看做是由 Series 组成的字典。 二、DataFrame的…...
内网安全-横向移动Kerberos 攻击SPN 扫描WinRMWinRSRDP
1.WinRM&WinRS 条件: 双方开启winrm winrs服务 2008版本以上默认开启,win 7默认关闭 检测使用cs内置端口扫描5985开放情况 进行连接 winrs -r:http://192.168.93.30:5985 -u:administrator -p:Whoami2021 whoami 2.内网-spn shell setspn -T …...
深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!
🛡️ 深入理解 < 和 >:HTML 实体转义的核心指南 🛡️ 在编程和文档编写中,< 和 > 符号无处不在,但它们也是引发语法错误、安全漏洞和渲染混乱的头号元凶!🔥 本文将聚焦 <&#…...
使用uniapp的vite版本进行微信小程序开发,在项目中使用mqtt连接、订阅、发布信息
1、保证在微信公众平台配置socket合法域名 2、项目中使用mqtt 建议在package.json中配置"mqtt": “4.1.0”,使用这个版本的依赖 页面中引入mqtt并配置连接 // ts-ignoreimport * as mqtt from mqtt/dist/mqtt.js; //要使用这里面的const state reacti…...
Trae 实战深度揭秘,开启高效编程新时代
导语 在AI编程工具层出不穷的当下,Trae凭借其独特的功能和强大的性能脱颖而出。它不仅是一款工具,更是提升编程效率、突破开发瓶颈的得力助手。本文将带你深入Trae实战,从项目创建到复杂代码优化,全方位展示Trae的魅力,让你迅速掌握这一编程利器。 一、Trae的安装与环境…...
SEARCH-R1:大型语言模型的多轮搜索推理革命
当AI学会"边搜索边思考" 2025年,语言模型领域迎来重大突破——SEARCH-R1框架通过强化学习(RL)让大模型实现"动态搜索自主推理"的协同进化。这项技术不仅让模型在回答"泰坦尼克号沉没时的船长是谁"时能自动检索…...
红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法
红数码影视(RED Digital Cinema)的摄像机可以生成两种RAW级高清视频文件,一种是R3D,一种是MOV。其中MOV属于苹果(apple)公司的QT视频封装结构,使用的视频编码是Apple ProRes;而R3D则是RED公司自创的RAW视频文件,这种文件解码需要使…...
关于TVS管漏电流的问题?
问题描述: 在量产的带电池故事机生产中,工厂产线测试电流时,有1台机器电流比正常机器大10mA左右。 原因分析: 1、分析电路原理图,去除可能出现问题的电压或器件(不影响系统),发现…...
LS-NET-004-简单二层环路解决(华为锐捷思科)
LS-NET-004-简单二层环路解决(华为锐捷思科) 以下是为您准备的二层环路示意图及解决方案,包含四大厂商配置对比: 一、Mermaid 二层环路示意图 graph TD SW1 -->|Gi0/1| SW2 SW2 -->|Gi0/2| SW3 SW3 -->|Gi0/3| SW1 SW1…...
区块链交易所平台开发全解析
在数字化飞速发展的今天,区块链技术已成为金融领域的核心驱动力之一。作为数字货币交易的关键平台,区块链交易所的开发不仅涉及复杂的技术环节,还需要兼顾用户体验、安全性、合规性等多个方面。本文将深入探讨区块链交易所平台的开发流程、关…...
Redis 面试思路
分布式redis面试思路俩点 高性能 高并发 高性能 1.存储在内存 所以速度快 2. 线程模型 io多路复用 监控多个客户端socket 放入队列里面 只是文件分发机制是单线程的 处理队列中的数据 根据不同类型 分发给不同处理器 后面处理的过程 也是多线程的 3. 内存回收机制 定期懒惰 …...
蓝桥杯_拔河_java
佬们能不能对思路二提供点建议,一直过不了T_T。 题目 思路 首先感觉有个坑点,就是可以不用把所有学生都选上,但是一定要保证两个部分学生的编号是连续的。比如一共5个人,编号是{1,2,3,4…...
fastapi 实践(三)Swagger Docs
fastapi 实践(一)基础 fastapi 实践(二)异常捕获 fastapi 实践(三)Swagger Docs fastapi Swagger 1. FastAPI 交互式 API 文档2. 故障解决2.1. FastAPI 访问 docs 显示空白/加载失败2.2. Swagger 报错&…...
