【xv6学习】L0_环境配置
xv6 是由麻省理工学院MIT开发的一个、用于教学目的的简化版类 Unix 操作系统其核心价值在于它用现代的方式重新实现了经典的Unix Version 6 (V6)系统旨在清晰地理解操作系统的核心概念与底层实现。⭐️ 简要总结一下本文主要是在搭建基本的环境配置这是后期学习的基础需要了解的是qemuxv6之间的关系文章目录关于为什么学一些学习资料关于xv6 和qemu为什么我们用 QEMU 来跑 xv6基于WSL搭建环境设置wsl的环境名切换挂载位置补充——什么是挂载具体实现配置ssh 和ip用vscode的wsl插件连接上安装下载源码一些bug如果启动成功不用看了gdb调试最终配置gdb——方便在vscode交互调试验证和配置一些其他~VMwarewslvscode ssh 和xv6建立连接关于为什么学相比动辄数百万行代码的现代Linux内核xv6的精简性使得学习者可以从头到尾阅读和理解整个操作系统源码。亲手修改和扩展内核功能如添加系统调用、实现新调度算法通过实践巩固理论。深入理解硬件如CPU寄存器、中断与软件的协同工作机制而无需被现代系统的复杂抽象层淹没作为跳板理解Linux、Android等现代类Unix系统的设计根源一些学习资料官方教材与一些学习资料https://pdos.csail.mit.edu/6.828/2020/xv6.htmlxv6-book-2020-Chinese:MIT 6.S081课程用书XV6-book中文翻译 - AtomGitIndex of /2020/labs关于xv6 和qemu维度xv6QEMU本质身份操作系统内核(Operating System Kernel)模拟器/虚拟机(Emulator / Virtual Machine)角色定位被运行者(The Guest)运行容器(The Host / Simulator)主要功能管理硬件资源CPU、内存、磁盘为用户程序提供服务。用软件模拟出一套完整的硬件环境CPU、内存、磁盘、中断控制器等。类比就像Windows或Linux。就像一台没有操作系统的裸机电脑。依赖关系必须运行在硬件上可以是真机也可以是QEMU模拟的假机器。独立运行可以模拟各种架构x86, ARM, RISC-V等。QEMU 提供了“假硬件”当你运行 QEMU 时它会向 xv6 展示一套看起来像真实硬件的环境。例如它告诉 xv6“我有一个 RISC-V 架构的 CPU。”它告诉 xv6“我有一块内存地址从 0x80000000 开始。”它模拟了一个 UART 串口设备让 xv6 可以打印字符到你的终端屏幕上。xv6 管理“假硬件”xv6 启动后会像在真实电脑上一样工作它初始化 QEMU 模拟的虚拟 CPU。它设置虚拟的页表来管理虚拟内存。它通过读写特定的 I/O 地址由 QEMU 规定来向你的终端打印 “init: starting shell”。为什么我们用 QEMU 来跑 xv6你可能会问为什么不把 xv6 直接装在真电脑上避免灾难操作系统内核拥有最高权限。初学者在编写内核代码如处理中断、写内存时一个微小的错误比如写了错误的内存地址就会导致整个电脑瞬间死机或重启。在 QEMU 里崩溃只是关掉一个窗口而已非常安全。硬件无关性xv6 教学版主要运行在 RISC-V 架构上。大多数人的电脑是 x86 架构。QEMU 可以在 x86 电脑上完美模拟 RISC-V 环境让你无需购买昂贵开发板就能学习。调试神器QEMU 提供了强大的调试接口。你可以配合 GDB让 xv6 在启动的 第一行代码处停下单步执行每一行内核代码这在真实硬件上很难做到。基于WSL搭建环境具体怎么配置wsl的这边有好多教程我就不赘述了这边只记录个人感觉后续用的上的部分; WSL配置注意最好使用Ubuntu24版本以上的博主用的是Ubuntu22遇到了一些坑当然解决了~ 下面就开始学吧~设置wsl的环境名为了配置环境人能看得懂大概长这样# 查看运行情况 wsl-l-v # 导出发行版 wsl--export 发行名 位置(D:/ChDevelop/WSL/发行.tar)# 注销发行版 wsl--unregister 发行名 # 重新导入发行名并命名 wsl--import 发行名 发行版存储路径(D:/WSL/Ubuntu_22.04)发行版存储位置(D:/WSL/发行.tar)切换挂载位置补充——什么是挂载挂载 把一个存储设备或目录连接到 Linux 目录树上的某个位置让它可以被访问在 Windows 里插入 U 盘 → 自动分配盘符E:\在 Linux 里插入 U 盘 → 手动或自动挂载到/mnt/usb/具体实现建议直接修改wsl的conf文件可以让windows盘符挂载在自定义路径# 编辑配置文件 sudo nano /etc/wsl.conf [automount] # 自定义挂载根目录默认是 /mnt root / # 或者改成其他路径 # root /win # 自动挂载 Windows 盘符 enabled true # 挂载选项 options metadata,umask22,fmask11 保存后 # 退出 WSL exit # 在 Windows 中关闭所有 WSL wsl --shutdown # 重新进入 wsl配置说明配置项作用示例root /将盘符挂载到根目录D:→/d/root /windows挂载到自定义目录D:→/windows/d/root /mnt默认行为不修改D:→/mnt/d/配置ssh 和ip# 在虚拟机里面装ssh服务端 sudo apt install openssh-server -y # 查虚拟机ip ip addr show用vscode的wsl插件连接上安装下载源码# 1. 先更新 apt 缓存 sudo apt update # 2. 安装工具栏 克隆并编译 xv6 sudo apt install -y git gcc gcc-riscv64-linux-gnu qemu-system-misc make \ git clone git://g.csail.mit.edu/xv6-labs-2024 \ cd xv6-labs-2024 \ make注意gcc-riscv64-linux-gnu 是risc-v交叉编译器qemu-system-misc 是用于模拟risc-v的硬件然后就可以看到之后启动make qemu编译xv6 在qemu启动make qemu一般来说描述符变成了这样就是好了一些bug如果启动成功不用看了如果make qemu的时候和我出现一样的情况卡住不动了可能原因是我就是ubuntu版本太老了安装的qemu版本老但是用的又是最新的xv6-lab课程就会有启动卡死的行为最直接的解决方式——卸载原来的老的qemu然后重新安装新的gdb调试结合ai是说 qemu的版本问题2024的 xv6-labs-2024使用了 RISC-V 的SSTCSupervisor-level Timer Compare扩展我的 QEMU 6.22021版本默认不支持 xv6-labs-2024 所需要的 SSTC所以启动卡死_entry | v start() | v timerinit() | v 访问 stimecmp | v 异常 | v 无法进入 main()终端1make qemu-gdb终端2sudo apt update sudo apt install gdb-multiarch set architecture riscv:rv64 gdb-multiarch kernel/kernel target remote :26000 # 设置断点 b start #继续 c #汇编和反汇编 layout asm disassemble start最终配置gdb——方便在vscode交互调试gdb是一种用于调试的工具,下面是一些常用的命令启动:gdb ./myprogram设置断点:b main运行:r程序会在main函数暂停。单步执行:n或s查看变量:p my_variable继续运行:c退出:qxv6 是 RISC-V架构普通的gdb 只能调试 x86 程序无法识别 RISC-V指令集。gdb-multiarch 是一个支持多种架构的 GDB 版本能够调试 RISC-V 程序。终端执行sudo apt update sudo apt install gdb-multiarch安装完成后验证路径which gdb-multiarch /usr/bin/gdb-multiarch这个路径后面要填入配置文件同时有一个端口号要记住qemu启动时候会监听TCP端口等待gdb连接xv6默认使用26000的端口可以通过执行make qemu-gdb获取配置.gdbinit把目录下的.gdbinit 文件覆盖set confirm off set architecture riscv:rv64 symbol-file kernel/kernel set disassemble-next-line auto set riscv use-compressed-breakpoints yes同时输入echo set auto-load safe-path / ~/.gdbinit表示信任所有目录下的.gdbinit文件根目录下添加.vscode/launch.json 和.vscode/tasks.jsonlaunch.json{version:0.2.0,configurations:[{name:Attach to gdb,type:cppdbg,request:launch,program:${workspaceFolder}/kernel/kernel,args:[],stopAtEntry:true,cwd:${workspaceFolder},miDebuggerServerAddress:127.0.0.1:26000,miDebuggerPath:/usr/bin/gdb-multiarch,environment:[],externalConsole:false,MIMode:gdb,setupCommands:[{description:pretty printing,text:-enable-pretty-printing,ignoreFailures:true}]}]}tasks.json{ version: 2.0.0, tasks: [ { label: xv6build, type: shell, isBackground: true, command: make qemu-gdb, problemMatcher: [ { pattern: [ { regexp: ., file: 1, location: 2, message: 3 } ], background: { beginsPattern: .*Now run gdb., endsPattern: . } } ] } ] }验证和配置先输入make qemu-gdb然后点击芜湖多线程情况调试情况下可以用单核模式启动make qemu-gdb CPUS1一些其他~也可以用VMware 完成上述环境配置但是wsl更加轻量VMwareVMware 会虚拟出完整的硬件——CPU、内存、硬盘、主板、网卡、光驱……这是一台裸机Bare Metal。ISO 文件对它来说就是一张真实的系统安装盘。虚拟机从光驱启动执行完整的安装流程分区、格式化、复制文件、配置引导……最后才得到一个能用的系统wslWSL (Windows Subsystem for Linux)是微软为 Windows 提供的、在 Windows 内部直接运行 Linux 环境的一项功能。它让你无需启动一个完整的虚拟机就能在 Windows 中使用原生的 Linux 命令行工具、实用程序和应用程序WSL 引入了一个轻量级的虚拟机但它和 VMware 那种完整虚拟机完全不同不是模拟完整硬件它用 Windows Hyper-V 的轻量虚拟化技术只虚拟出一个Linux 内核而不是整台电脑没有 BIOS/UEFI、没有光驱、没有主板启动的不是一台电脑而是一个Linux 内核实例不需要 ISOWSL2 的 Linux 发行版如 Ubuntu、Debian是以**打包好的根文件系统rootfs**形式分发的。微软和发行版维护者已经预先把系统装好了打包成一个压缩包。WSL 解压这个包挂载为虚拟磁盘直接启动内核即可启动极快因为跳过了整个开机自检 → 引导加载 → 系统安装流程本质上就是加载一个已经配置好的 Linux 内核 文件系统vscode ssh 和xv6建立连接VSCode 通过 SSH 进入虚拟机在虚拟机里启动 gdb-multiarchGDB 再通过一个 TCP 端口连上 QEMU 内置的调试桩(GDB Stub)从而实现对 xv6 内核的断点、单步、查看寄存器等操作。

相关新闻

从手动刷新到智能抢票:大麦网自动化购票实战指南

从手动刷新到智能抢票:大麦网自动化购票实战指南

从手动刷新到智能抢票:大麦网自动化购票实战指南 【免费下载链接】Automatic_ticket_purchase 大麦网抢票脚本 项目地址: https://gitcode.com/GitHub_Trending/au/Automatic_ticket_purchase 还在为热门演出门票秒光而烦恼吗?当别人还在焦急地刷…

2026/10/8 9:44:09 阅读更多 →
深挖 GitHub Copilot Next 的 IDE 内核集成原理:从代码补全到智能重构的...

深挖 GitHub Copilot Next 的 IDE 内核集成原理:从代码补全到智能重构的...

深挖 GitHub Copilot Next 的 IDE 内核集成原理:从代码补全到智能重构的技术演进与工程权衡项目背景2026年初,我们团队在维护一个日均调用量超千万次的 Spring Cloud 微服务集群时,发现传统 IDE 辅助工具对复杂业务逻辑的理解能力不足。涉及跨…

2026/10/5 10:56:40 阅读更多 →
表格错行、合并单元格丢失、跨页断裂——通义千问识别失败的7类致命问题,今天必须解决

表格错行、合并单元格丢失、跨页断裂——通义千问识别失败的7类致命问题,今天必须解决

更多请点击: https://intelliparadigm.com 第一章:表格识别失败的典型现象与影响评估 表格识别失败常表现为结构错乱、内容缺失或语义混淆,直接影响下游数据处理与业务决策。在OCR或文档解析系统中,这类问题并非孤立偶发&#xf…

2026/10/6 19:01:13 阅读更多 →

最新新闻

Python+Django+Vue实现流浪狗救助捐赠平台全栈开发实战

Python+Django+Vue实现流浪狗救助捐赠平台全栈开发实战

从接到这个项目需求的第一天起,我就很清楚它要解决的不只是"给流浪狗一个展示页面"这么简单。真正的痛点在信息不对称:救助站有狗没人领、有需求找不到稳定的捐赠来源,热心市民想帮忙却不知道钱和物具体用到了哪里。所以这个基于Py…

2026/10/13 4:03:59 阅读更多 →
m3u8直链解析源码实战:HLS分片地址提取与避坑指南

m3u8直链解析源码实战:HLS分片地址提取与避坑指南

简介:这份资源是一套m3u8直链解析源码,面向需要为视频站点或自建播放器接入m3u8解析能力的开发者,尤其适合使用ckplayer播放器、希望快速实现直链播放与解析整合的技术人员。压缩包共33个文件,约453KB,以png、jpg图片素…

2026/10/13 4:03:59 阅读更多 →
Linux Socket编程预备知识:从网络分层到字节序实战

Linux Socket编程预备知识:从网络分层到字节序实战

套接字Socket编程这块,很多人一上来就打开编辑器写代码,结果被各种编译错误、段错误、连接失败搞得一头雾水。其实问题多半不是出在代码上,而是预备知识没补齐。这篇东西就是写给那些正准备接触Linux网络编程的人,先从预备阶段把网络分层、地址结构、字节序、端口这些底层逻辑理…

2026/10/13 4:03:59 阅读更多 →
Cisco ASA防火墙9.5(2)综合配置实战:NAT、ACL与双出口切换详解

Cisco ASA防火墙9.5(2)综合配置实战:NAT、ACL与双出口切换详解

做网络这行的,肯定绕不开Cisco ASA防火墙9.5(2)这个版本。它不像新平台那么抢眼,但在中低端安全接入场景里,稳定性和资料完整度绝对算得上老牌选手。很多兄弟接手一台设备,翻来覆去就那几条命令,可一旦要动NAT、ACL、双…

2026/10/13 4:03:59 阅读更多 →
GTC 2026深度解读:从五层蛋糕框架看懂GPU技术版图

GTC 2026深度解读:从五层蛋糕框架看懂GPU技术版图

这几年只要圈里聊起 GPU 技术大会,大家嘴里多半都会蹦出一个词:五层蛋糕。我第一次听到这个比喻时也愣了一下,后来把历年的技术发布、生态发展和行业落地串在一起看,才发现这个说法虽然听起来像甜品店菜单,其实正好把整…

2026/10/13 4:03:59 阅读更多 →
darknet运行报错libopencv_highgui.so.3.2缺失?动态库排查与解决全攻略

darknet运行报错libopencv_highgui.so.3.2缺失?动态库排查与解决全攻略

直接跑./darknet就报错error while loading shared libraries: libopencv_highgui.so.3.2,这种动态库缺失的问题,估计每个搞深度学习目标检测的人都被它堵过一阵子。明明编译都过了,运行却翻车,查了半天也不知道到底哪里没对上。如…

2026/10/13 4:02:58 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →