这绝对是全网最细的手写操作系统环境搭建教程!

我,子牙老师,一个手写过操作系统、编程语言、Java虚拟机、docker、Ubuntu...的硬核男人

今天准备用一篇文章教你搭建出最强大最方便的手写操作系统环境,让你爱上手写操作系统,让你圆梦,写出自己的操作系统

废话不多说,开整

文章提到的所有资料加班主任维新:jvm-anan。如果你的汇编跟C语言不过关,回复【汇编教程】免费领取我讲的视频+笔记

完全体展示

先秀下肌肉,让你眼前一亮,再告诉你这个环境是如何一步步搭建出来的,这样才符合我这个硬核男人的人设,对吧

你听过SMP架构与NUMA架构吗?没有?可以看下我之前写的文章《不懂NUMA,你就看不懂Linux内核》

我教你搭建的环境,既可以运行SMP架构的操作系统,也可以运行NUMA架构的操作系统。Linux系统也是操作系统,所以这套环境,可以无差别运行Linux内核与Linux系统

运行SMP架构的我写的操作系统展示

运行NUMA架构的我写的操作系统展示

你可能想说:光跑代码可不够,平时写业务代码都要调试排查,更别说写操作系统这么复杂的东西了,不能调试,那不得疯啊!

你说的对!接下来给你展示这套环境最核心的功能,可以让你非常轻松愉快的调试你写的操作系统代码

比如调试C语言代码

众所周知,写操作系统一般都是使用C语言+汇编,C语言代码环境相对来说,大家还熟悉一点,那调试汇编代码,你这个环境有吗?当然!

大家能看出来这个汇编代码是干啥的吧!对,线程切换的核心代码

除了能单步调试汇编能C语言,我还能让你看到CPU的内部发生了什么:比如CPU运行模式的切换、CPU开启分页以后物理内存与虚拟内存的映射关系、发生中断以后CPU是如何处理中断的...展示

至此,肌肉应该秀的差不多了吧。等等,你说的用这个环境运行Linux内核、单步调试Linux内核呢?来了

没骗你吧!是不是已经摩拳擦掌,想开干了?那就开始吧...

整体介绍

完整环境是这样的:

  1. Windows或Mac上安装VMware虚拟机

  2. 在VMware虚拟机中安装Ubuntu16

  3. 在Ubuntu16中安装qemu、bochs

众所周知,搭建环境坑是巨多的,搭建的顺序不对,安装包的版本不对......都有可能失败,而且很难解决

为了让你不用踩坑,我把我使用的软件包提供给你,关注公众号【硬核子牙】回复【手写操作系统】免费领取。我还是建议你用我提供的,再搭配我后面给你的搭建教程,闭着眼睛就能搭建成功

你可能不太理解,这个环境为什么要这么搭建,我给你解释一下

平时写业务代码,大家应该用Windows、Mac比较多吧。但是玩底层,一般会使用Ubuntu。比如你所知道的CentOS、Ubuntu、Java虚拟机hotspot、Python虚拟机cpython、MySQL、Redis、NGINX...还有嵌入式,都是在Ubuntu中开发出来的

在Ubuntu中开发操作系统,如何运行呢?两个虚拟机可用:qemu、bochs。想看CPU内部,得用bochs。想单步调试汇编、C语言,得用qemu

我怎么知道的?我做操作系统课程的时候,学习了市面上能看到的所有书跟视频,从别人那学来的,我做了综合及优化,所以才有这套非常简单方便强大的环境

搭建教程

都说了废话不多说, 还说了一堆废话。不说了,开整

先在你的Windows或Mac上安装VMware。然后在VMware中创建一个虚拟机,在虚拟机中安装Ubuntu16系统(这里不好的,问百度、谷歌、AI都行,很容易)

1、进入Ubuntu16,安装依赖

2、安装汇编编译器nasm

3、安装qemu

4、安装bochs,比起这几个,复杂一些

5、安装clion,这个简单。自行百度、谷歌、AI

至此,环境就安装完了。是不是出奇的简单?所以这个世界上的很多知识,是知与不知

对了,文章里面我贴的是图,你在搭建环境的过程中,也不用自己从头到尾敲一遍,拿着图片去让AI给你识别出来即可。今天是AI时代的前夕,一定要学着并学会使用AI。一个人的强大,其中之一就是在于学会使用那个时代最强大的工具!

怎么用

班主任维新:jvm-anan。免费获取我写的操作系统代码

将我写的操作系统代码,clone到Ubuntu16中,使用clion打开

支持的命令都在Makefile中

命令行输入make bochs、make qemu、make qemug即可运行。其中make qemug是调试模式

如何使用gdb调试操作系统代码呢?

1、配置clion

2、下断点

3、执行make qemug,调试模式运行OS

4、启动刚刚配置的gdb

如果你看到这个界面,就表示成功了

至此,支持单步调试操作系统代码的环境就搭建完成了!使用这个环境,你不仅可以手写操作系统,还可以研究Linux内核源码,甚至去手写实现网络协议栈、手写文件系统...研究MySQL源码、Redis源码、Nginx源码也不是不可以

相关推荐
打不了嗝 ᥬ᭄1 小时前
计算机系统基础:程序的表示、转换与链接
操作系统·计算机系统基础
Coisinier18 小时前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
云计算练习生2 天前
什么是内存分配算法?首次适应、最佳适应、最坏适应
操作系统·内存·内存分配算法·内存算法
imDwAaY2 天前
进程之间如何“对话”?一篇讲清六种进程间通信方式
后端·操作系统
MinterFusion2 天前
如何在开放麒麟(openKylin)下安装GTK(v0.1.0)
linux·操作系统·软件安装·gtk·明德融创·openkylin·linux图形软件开发
Teecertlabs2 天前
【机密计算顶会解读】15:LDR——面向嵌入式TEE系统的高效安全Linux驱动
linux·操作系统·机密计算·可信执行环境
云计算练习生3 天前
什么是内存映射(mmap)?文件和内存之间的桥梁
操作系统·内存·内存映射
寻道模式3 天前
【运维心得】完整教程:绕过Win11限制让老机焕发新生
运维·操作系统·win11
天府云创3 天前
Agentic开发时代到来——鸿蒙PC三大原生开发工具公测
华为·操作系统·harmonyos·鸿蒙系统·cli·deveco·agentic
imDwAaY3 天前
程序为什么会卡在死锁里?从四个必要条件到预防与解除
后端·操作系统