从零开始写操作系统-1

从零开始自制操作系统(序) 第0天 好吧,确实是有想过写操作系统的。但是,退缩了。就像上次想写一完整版的编译器的时候看到的这张截图: (嗯,这就意味着你很难看完这源码,甚至一生都难以看完) 无知则无畏: 书中作者向大家传授了一个从零开始开发操作系统的诀窍: ——不要在一开始就一心想着要开发操作系统,先做一个有点操作系统样子的东西就行。 如何开发操作系统: 准备的步骤如下: 在windo 阅读详情

准备工作:在linux下 安装NASM汇编编译器

准备工作结束后开始进入正题:
第一步: vim boot.asm
将内容贴到boot.asm中

    org 07c00h          ; 告诉编译器程序加载到7c00处
    mov ax, cs
    mov ds, ax
    mov es, ax
    call    DispStr         ; 调用显示字符串例程
    jmp $          ; 无限循环
DispStr:
    mov ax, BootMessage
    mov bp, ax          ; ES:BP = 串地址
    mov cx, 16          ; CX = 串长度
    mov ax, 01301h      ; AH = 13,  AL = 01h
    mov bx, 000ch       ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
    mov dl, 0
    int 10h         ; 10h 号中断
    ret
BootMessage:        db  "Hello, OS world!"
times   510-($-$$)   db  0   ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw  0xaa55              ; 结束标志

第二步: nasm boot.asm -o boot.bin 将汇编程序用nasm编译成二进制文件

第三步:制作一个空的img文件(名字任意),我们可以在linux界面键入
sudo dd if=/dev/zero of=./boot.img bs=512 count=1440 至此 我们已经有三个文件了,一个是boot.asm的汇编文件,一个是boot.bin的二进制文件,一个是刚刚做完的空的boot.img文件

第四步:有三个方法:
1..使用FloppyWriter软件将boot.bin文件中的内容写入boot.img文件中。因为我们此时不使用物理机进行试验,使用虚拟机进行试验,所以我们在floppywriter中选定 Write files To Image ,然后输入boot.bin文件和boot.img文件,显示成功,就可以将boot.bin文件写入boot.img文件中了,此时boot.img就是一个微型系统了
2..当然,也可以有更简单的方法:直接在linux命令行中写入
dd if=./boot.bin of=./boot.img bs=512 count=1 也可以将我们第二步做出来的boot.bin文件写入boot.img文件,此时boot.img文件也是一个微型系统
3.更简单粗暴的方法,将boot.bin文件改文件后缀名,重命名为boot.img文件,这时boot.img文件也是可以运行的(网上的说法是两个都是二进制文件,当然可以互相转换)

第五步:创建一个虚拟机,系统选择others ,接下来就是网上到处可以搜到的创建虚拟机的过程。然后创建虚拟机结束后,编辑虚拟机设置->硬件->添加 软盘,然后在软盘中点击使用软盘镜像文件,并且选择我们刚刚创建好的boot.img文件,然后打开虚拟机

第六步:看,虚拟机界面出现了“ Hello, OS world!” 挺让我兴奋的

自己动手从零写桌面操作系统GrapeOS系列教程——22.文件系统与FAT16 新买的硬盘和优盘在第一次使用时需要格式化,有时候还需要分区。这是为什么呢?分区和格式化到底是干啥呢?本讲将为大家解开这些疑惑。 阅读详情

相关推荐

从零实现一个操作系统(一)

从零实现操作系统(一)

fangzhan666的博客 2025

操作系统攻略:自己动手从零开始写操作系统——1.开发环境配置

操作系统攻略这个专栏是为了深入理解操作系统的运行机制所开设,目前计划分为两部分,第一部分是自己动手从零开始写操作系统,这一部分围绕着《操作系统真象还原》一书从零开始打造一个操作系统,第二部分将攻略CS162的Project——pintos。与一般的教程不同的是,本教程将详细刨析过程中的bug,并根据作者自身的经验做额外的补充。 在开始前你应该准备好一台已经安装好Linux操作系统的虚拟机,或者直接在Linux环境下开发。注:作者使用wsl+debian在windows下开发。

梅见十柒的博客 5125

从零开始构建矽璓工业物联操作系统:使用risc-v架构的HiFive1 Rev B 开发板

XiUOS (X Industrial Ubiquitous Operating System) 矽璓工业物联操作系统是一款面向工业物联场景的泛在操作系统,来自泛在操作系统研究计划。所谓泛在操作系统(UOS: Ubiquitous Operating Systems),是支持互联网时代人机物融合泛在计算应用模式的新型操作系统,是传统操作系统概念的泛化与延伸。在泛在操作系统技术体系中,不同的泛在计算设备和泛在应用场景需要符合各自特性的不同UOS,XiUOS即是面向工业物联场景的一种UOS,主要由一个极简的微型

AIIT_Ubiquitous的博客 1302

从零制作操作系统——环境搭建以及HelloWorld

最近在学习操作系统,尝试自己照着书搓一个出来。

CairBin的博客 1329

自己写的小型嵌入式操作系统

小型嵌入式操作系统的实现 写一个自己的操作系统是我一直以来的愿望,一来,学习,二来吗,装装X了。。哈哈 进过一段时间的学习,今天我写的代码终于实现了任务切换,也就是多任务环境了,虽然任务本身只是很简单那的闪烁你的LED小灯,但是仍然遮挡不住背后操作系统光辉的本质。 今天我决定,把我学习的经历分享出来,希望能起到抛砖引玉的作用。 一提到操作系统,大部分人的感觉是高端大气上档次,其实不然,仔

shixiongtao的博客 6258

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 353

从零开始写操作系统(1)环境配置

       寒假来了,从今天开始正式进入操作系统内核学习。最近在读田宇写的《一个64位操作系统的设计与实现》,感觉是本炒鸡棒的书,所以开一系列的博文来记录一下自己碰到坑。也不知道一个寒假能学多少。        话不多说,首先第一步当然是要配置环境啦。我使用的操作系统是Ubuntu 7.3。此外我们需要安装gcc,nasm,bochs。...

GrimCake的博客 658

树莓派 SPI操作

扩展板配备一款0.96inch,128864分辨率的oled显示屏,通过SPI控制,先上显示效果图。由于程序过长,在这里我就不把代码全部贴出来了,只是简单讲解一下spi的操作函数。管脚如下如所有,左边方框的管脚分别为MOSI MISO SCLK,左边CE0,CE1为两个片选管脚,分别对应上图中的spidev0.0,spidev0.1两个设备。下载spidev库,复制到树莓派,并行运行如下命令解压安装。spi设备,此处设备为/dev/spi-decv0.0。在/dev路径下面,我们可以发现两个spi设备。

weixin_46529898的博客 914

在Ubuntu下,从零开始写操作系统(1)-笔记

上一篇讲到如何在屏幕上显示一个Hello,world! 本篇要从软盘中读取文件——Loader.bin 由于起始扇区只有512字节,要在FAT12中读取文件Loader.bin,代码比较紧凑。下面是fat12的文件系统BPB,其中的值基本上都是固定的。 jmp LABEL_START /* 跳转指令 */ nop /* 这个nop指令是可选的,如果你用的是e9指令(长跳转),这个是不需要...

duyanbin68的专栏 476

自适应陷波器的原理与实现

x(t)是叠加有两个频率干扰信号的输入信号,s(t)是需要保留的有用信号,在输入信号中,我们只知道频率w1和w2,但不知道信号的幅度A和相位θ,自适应陷波器可以估计两个未知的幅度和相位值,这需要我们提供两路相互正交的单频信号,如cos(w1t)、sin(w1t),通过调整其权值,从而合成出与干扰信号完全相同的信号A1cos(w1t+θ1),从而实现干扰信号的滤除。采用LMS算法,在保证不损失其他有用信号的情况下,有效地抑制输入信号中某一频率的干扰,如需滤除多个频率,只需要增加相应的输入信号。

Melkiades2333的博客 6885

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 409

从零开始写操作系统——1.部署工作环境(Bochs + MBR)

本文记录了基于《操作系统真象还原》开发轻量级操作系统的环境搭建过程。主要内容包括:1)在Ubuntu20.04上安装必要工具链(build-essential、xorg-dev等);2)下载并编译带调试功能的Bochs模拟器;3)创建虚拟硬盘镜像并编写测试MBR引导程序。重点讲解了各工具的作用及配置参数,如Bochs编译选项--enable-debugger等调试功能,以及如何将MBR程序写入虚拟硬盘。通过Helloworld示例验证了环境搭建成功,为后续操作系统开发奠定了基础。

Canace__的博客 1143

彻底解决0x80070005错误代码:全面分析与实战指南

0x80070005错误代码虽然令人头疼,但通过上述方法,我们完全有能力将其攻克。从检查磁盘空间、设置账号权限,到运行疑难解答和系统文件检查器,再到调整相关服务状态,每一步都是解决这一问题的关键。希望本文能为你提供有力的帮助,让你在使用Windows系统的过程中更加顺畅无忧。

nntxthml的博客 6933

【rCore】用rust从零开始写一个操作系统 开源操作系统训练营:ch1 应用程序与基本执行环境

此时,CPU 的其它通用寄存器清零,而 PC 会指向 0x1000 的位置,这里有固化在硬件中的一小段引导代码, 它会很快跳转到 0x80000000 的 RustSBI 处。由于没有提供 main 函数的调用,此处定义一个 _start 函数,它会被链接器识别为程序的入口点。panic_handler是一个特殊的函数,它用于处理panic(程序中的严重错误,如不可恢复的逻辑错误或资源不足),rust程序中必须实现此函数。因为C语言的链接约定在许多平台上都是已知的,并且可以直接被链接器和引导加载器理解。

qq_61908212的博客 2280

47、利用组策略配置 Windows 防火墙与 IPsec 全解析

本文深入解析了如何利用组策略配置Windows防火墙与IPsec,涵盖防火墙规则基础、IPsec身份验证与加密机制、服务器和域隔离实现方法、WFAS中新旧IPsec规则的区别与配置流程,并详细说明了防火墙属性与规则的优先级计算方式。同时介绍了证书服务、EFS等未详述的安全功能及相关学习资源,帮助管理员通过组策略有效提升网络安全性。

onion的博客 101

YOLOv11改进 - 卷积Conv | PATConv(Partial Attention Convolution)部分注意力卷积,在减少计算量的同时融合卷积与注意力的优势 | AAAI 2026

本文提出部分注意力卷积(PATConv)机制,并将其集成到YOLOv11中。传统神经网络中,卷积计算密集,注意力机制全局计算冗余,此前的“部分卷积”会丢失未计算通道的特征价值。PATConv通过“通道拆分 - 并行处理 - 结果拼接”的逻辑,给不同通道分配“擅长的任务”,兼顾局部与全局特征。基于此,它还衍生出PAT_ch、PAT_sp和PAT_sf三种细分模块。此外,还提出了动态部分卷积(DPConv),并构建了新的混合网络家族PartialNet。我们将PATConv代码集成到YOLOv11中,实验表明,

魔改工程师的博客 1084

从零开始的操作系统60分速成

前言:后天考试,一学期没去上课啥都不会,于是从零开始学OS了。打算边学边写一篇博客,一些考不到或太繁杂的知识就不说了,面向60分学习( 如果文中有错误还请各位大佬指出QAQ 以下内容部分参考王道论坛的《操作系统考研复习指导》(@avgstuBoboge大佬发的pdf,有水印)。 文章目录2.进程2.1 概述2.2 五状态模型进程执行过程进程间通信线程2.3 处理机调度三级调度无法调度的情况进程调度方式调度性能评价经典调度算法2.4 同步与互斥PV操作同步问题2.5 死锁死锁产生的条件死锁的处理策略银行家算

WHile——World of Hile 7341

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

跟我一起写操作系统(一)——10分钟写个操作系统

转载注明出处:http://www.cnblogs.com/lucasysfeng/p/4846119.html   项目地址:https://github.com/lucasysfeng/lucasOS     想动手,但不知从何入手,是学习一门新知识普遍会遇到的尴尬点。笔者喜欢边实践边学习理论,笔者的写作思路是:入门的文章要避免讲一些高深的理论,而应该先抛出demo,从研究demo入手,

xyjikl 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

《自己动手从零开始写操作系统(2024 版)》技术解构:从引导到内核的「全栈式」开发实战指南

本文以《自己动手从零开始写操作系统(2024版)》为核心,系统介绍了操作系统开发的技术体系。文章从开发环境搭建开始,详细讲解了RISC-V架构的交叉编译工具链配置;接着阐述了引导程序的三层架构设计,包括芯片级初始化、内核加载与安全验证;然后深入内核基础功能,包括特权级管理、内存管理等核心机制;最后重点介绍了安全加固实践,如引导阶段防溢出、内存安全增强等技术。全文通过代码示例展示了从零开发操作系统的完整流程,强调操作系统开发对理解系统安全本质的重要性,是白帽黑客掌握底层控制权的关键技术路径。

fearhacker的专栏 1539

操作系统攻略:自己动手从零开始写操作系统——2.编写MBR主引导记录

计算机启动与内存管理摘要 计算机启动时通过BIOS在实模式下完成硬件检测和初始化,其核心特性包括16位地址总线(1MB寻址空间)、分段寻址机制和单一特权级。现代操作系统启动后切换至保护模式,该模式支持更大的内存空间(32位/64位)、4级特权级(Ring 0-3)、内存保护和多任务机制。两种模式的主要区别在于:实模式仅有1MB寻址能力且无安全保护,而保护模式通过分段和分页机制实现内存管理,支持虚拟内存和任务隔离。系统启动必须经过实模式阶段,随后进入保护模式以支持现代操作系统的安全性和功能需求。

梅见十柒的博客 2481

自己动手写操作系统 1

文章目录自己动手写操作系统 1代码编译写入软盘运行 自己动手写操作系统 1 代码 org 07c00h ; 告诉编译器程序加载到7c00处 mov ax, cs mov ds, ax mov es, ax call DispStr ; 调用显示字符串例程 jmp $ ; 无限循环 DispStr: mov ax, BootMessage mov bp, ax ; E...

Mxdon_on的博客 359

自己动手写操作系统 - Hello DTOS

本系列笔记参考整理于狄泰未来 - 操作系统专题、于渊 《自己动手写操作系统》(《一个操作系统的实现》) 基于x86架构从零开始编写操作系统内核,旨在通过实践的方式掌握操作系统原理 目录 1、BIOS 2、主引导程序 1、主引导程序 2、编写一个主引导程序 3、主引导程序的扩展 3、调试环境的搭建(Bochs) 4、小结 1、BIOS 什么是操作系统? - Windo...

洋葱汪的博客 4669

自己写操作系统 1

0、操作系统启动过程 https://blog.youkuaiyun.com/judyge/article/details/52278384   第一步:读取BIOS   按下电源按钮后,计算机首先读取一块ROM芯片,这块芯片里的程序是"基本输入输出系統"(Basic Input/Output System),即BIOS.   第二步:硬件自检   BIOS会检查计算机硬件是否满足运行条件,如果硬...

weixin_30311605的博客 93

(0)从零开始的操作系统开发日记

ゼロからのOS開発ノート,从零开始的操作系统开发日记其实是个课程设计的坑,打算用于记录学习和开发过程中遇到的一些散点,在着手开干的时候会在github那边开个项目【其实打算博客也直接在那边写,但是我懒得搭博客了,,】 目前主要参考书籍是川合秀实先生的《30天自制操作系统》,关于这本书,一些整理如下: 软盘读盘D3 简单的写显存-图形显示D4 鼠标,键盘驱动D6-D8 内存管理(动态分区+相邻回收)

hiro的博客 6294

自制 os 极简教程1:写一个操作系统有多难

点击上方“五分钟学算法”,选择“星标”公众号重磅干货,第一时间送达不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统。我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来...

程序员吴师兄的博客 3322
上一篇: Ubuntu安装工具并设置软连接
下一篇: PAT---B1021. 个位数统计 (15)
菜鸟方圆圆
博客等级 码龄10年 26粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值