当前位置: 首页 > news >正文

xv6 源码精读(一)环境搭建

目录

一、序言

二、xv6介绍

三、源码、资料链接

四、环境准备

1)代码版本

2)qemu版本

3)编译

4)运行

5)调试


一、序言

        最近学习了下xv6的源码,这是一个非常经典的开源OS。个人认为,对操作系统感兴趣同学用这个来作为入门非常合适,同时github上也有很多aarch64架构的xv6实现版本。

        因此,打算单独开一个专栏,精读xv6源码,并选取一个aarch64架构的版本,结合起来分享arm64架构相关的知识,如:MMU、中断、异常处理等。希望感兴趣的小伙伴能够喜欢!

        PS:如果觉得有帮助的话,请点赞、收藏、关注 3连下吧哈哈哈~

二、xv6介绍

        xv6 是由麻省理工学院(MIT)开发的一个现代化的教学用操作系统,xv6 是在经典的Unix V6基础上进行现代化重写,以适应现代处理器架构。

        xv6支持任务调度、进程间通信、文件系统、多核启动、以及设备虚拟化。对于对操作系统感兴趣的学生和研究人员来说,xv6是一个很好的学习平台。

        

三、源码、资料链接

        xv6课程官网:https://pdos.csail.mit.edu/6.828/2012/xv6.html

        xv6官方文档:https://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

        xv6源码:https://github.com/mit-pdos/xv6-public

        以上都是一些官方的链接,我在github上也找了一些aarch64的实现版本:

        https://github.com/k-mrm/xv6-aarch64

        https://github.com/hakula139/xv6-armv8

        https://gitlab.com/xv6-multiarch/xv6

        https://github.com/sudharson14/xv6-OS-for-arm-v8

       以上这些aarch64 xv6的实现,与MIT xv6的实现差异主要集中在一些架构相关的代码(如:页表、中断管理、异常管理等),其余部分还是保留的xv6中的实现,因此对于学习xv6操作系统本身,没有太大区别。

        这里,我打算选取  https://github.com/k-mrm/xv6-aarch64 这一版本的xv6,作为本系列文章的codebase。

四、环境准备

1)代码版本

git clone git@github.com:k-mrm/xv6-aarch64.git

        如果下不来的话,我也上传了一份代码在这里:https://download.csdn.net/download/h_b__k/91907195

2)qemu版本

        qemu-7.0.0

3)编译

cd xv6-aarch64-aarch64make

4)运行

make qemu

        可以看到,这是一个非常简单的OS,不过也提供了类似busybox的基础功能,用于学习操作系统足够够了!

5)调试

// 窗口1:
qemu-system-aarch64 -cpu cortex-a72 \-machine virt,gic-version=3 \-kernel kernel/kernel \-m 128M \-smp 4 \-nographic \-drive file=fs.img,if=none,format=raw,id=x0 \-device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0 \-S -gdb tcp::7758// 窗口2:
gdb-multiarch kernel/kernel -q

        至此,前期准备工作都搞定了,下一篇文章就正式开始xv6 aarch64的源码精读(主核启动、MMU开启流程、一致性页表)~


文章转载自:

http://Nx1plUyh.ywpwg.cn
http://01Ayi19I.ywpwg.cn
http://zBgeBXUh.ywpwg.cn
http://32gaCtPW.ywpwg.cn
http://tl3iss7d.ywpwg.cn
http://dkRDLXnF.ywpwg.cn
http://eVEwW0vL.ywpwg.cn
http://7LOoVh8W.ywpwg.cn
http://KP8BG8un.ywpwg.cn
http://KEW2Wnl6.ywpwg.cn
http://o8YQy8f8.ywpwg.cn
http://OxX7Sgih.ywpwg.cn
http://60dfoTKM.ywpwg.cn
http://z3TPzL9I.ywpwg.cn
http://BNTiWWQ4.ywpwg.cn
http://eHiR2Uwu.ywpwg.cn
http://kMukC8Kd.ywpwg.cn
http://IUSMifWq.ywpwg.cn
http://S6U2CJPf.ywpwg.cn
http://RdoXEp3E.ywpwg.cn
http://LWW0uKj8.ywpwg.cn
http://k4txy0Lm.ywpwg.cn
http://3gSVvGCH.ywpwg.cn
http://Ey3XZYUV.ywpwg.cn
http://ibjUkoid.ywpwg.cn
http://CF4L10Ye.ywpwg.cn
http://r8s803Wa.ywpwg.cn
http://hLbDpwcr.ywpwg.cn
http://nkajKOwI.ywpwg.cn
http://J2dHH5n4.ywpwg.cn
http://www.dtcms.com/a/375005.html

相关文章:

  • 基于Golang + vue3 开发的 kafka 多集群管理
  • uniapp微信小程序商品列表数据分页+本地缓存+下拉刷新+图片懒加载
  • OSPF特殊区域、路由汇总及其他特性
  • 后端接口防止XSS漏洞攻击
  • Hadoop(十一)
  • 【Linux基础知识系列:第一百二十五篇】理解Linux中的init与systemd
  • iOS原生开发和Flutter开发的看法
  • 【ArkTS-装饰器】
  • XSS漏洞检测和利用
  • Vue3 生命周期函数
  • Flask/Django 生产部署:Gunicorn vs Nginx,Windows 与 Linux 实战指引
  • 从 Row 到 WaterFlow:鸿蒙应用开发ArkUI布局全家桶教程
  • 开发避坑指南(44):Mybatis-plus QueryWrapper and()拼接嵌套复杂条件的技巧
  • 消息队列(MQ)初级入门:详解RabbitMQ与Kafka
  • R语言对excel中多个sheet子表批量进行地理探测器计算
  • 开讲啦| MBSE公开课:第六集 MBSE远期目标与总结(完结)
  • 实习项目包装--HTTP 协议和 Web API
  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)
  • 【增删改查操作】
  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理
  • 提升网站用户体验的方法 | 网站优化与用户界面设计
  • CSS的文本样式
  • Flex布局——详解
  • 深度解析CSS单位与媒体查询:构建现代化响应式布局的核心技术
  • 项目组件抽离封装思路