从零开始制作操作系统—— 最简单的操作系统内核

news/2025/10/22 16:36:23/文章来源:https://www.cnblogs.com/wanghao-boke/p/19158345

最简单的操作系统内核

开发环境

  1. 操作系统:ubuntu22 (windows10 + VMware15pro + ubunut22 + qemu)
  2. 编译器:gcc-multilib
  3. 汇编器:nasm
  4. 模拟器: QEMU
  5. 版本控制: git

安装依赖

ubuntu22 中:

# 安装必要的工具链
sudo apt update
sudo apt install -y build-essential
sudo apt install -y qemu-system-x86 
sudo apt install -y nasm    # x86架构汇编器
sudo apt install -y gdb
sudo apt install -y git
sudo apt install -y mtools  # 用于制作磁盘镜像# 安装交叉编译器(重要!避免使用宿主系统的libc)
sudo apt install -y gcc-multilib

前置知识

  1. x86 汇编语言:寄存器,实模式 vs 保护模式,中断和异常,CPU 特权级
  2. C 语言编程
  3. 硬件基础知识:
    • 引导过程:当你按下电源键时,发生了什么事
    • BIOS/UEFI:它们做了什么
    • 内存映射:硬件设备(如 VGA 显存)在内存中的位置

计算机启动过程

当计算机上电后,位于 SPI Flash ROM 中的 BIOS 程序会被运行,该程序的任务是初始化计算的硬件,并且寻找可引导设备,这个可引导设备就是我们要开发的操作系统。

BIOS 在扇区 0 中找到有效地可引导设备后,就会将 CPU 的控制权转移过去,执行可引导设备程序。

关于 BIOS 程序

  1. BIOS 引导程序物理存储地址是在 SPI Flash ROM ,也就是 串行外设接口闪存只读存储器 ,这个存储器是焊接在主板上,容量一般为 16 MB ~ 32 MB,断电后不丢失数据。
  2. 在现代计算机中,传统的 BIOS 被 UEFI,也叫做 统一可扩展固件接口替代,它的存储位置也是在 SPI Flash 芯片中。
  3. 由硬件厂商开发,BIOS 厂商根据芯片厂商提供的规范来负责编写 BIOS 代码
  4. BIOS 的任务
    • 上电自检:检查关键硬件,包括 CPU,内存,芯片组等;然后初始化系统管理总线(SMBus),并且验证硬件完整性和兼容性
    • 硬件初始化:设置 CPU 微代码更新,配置内存控制器和时序参数,初始化 PCIe 设备枚举,设置 USB,SATA 控制器
    • 运行时服务建立:创建中断向量表,建立 BIOS 数据区,提供系统调用接口(INT,13h 磁盘服务等)

最简单的“操作系统”内核

启动电脑时,BIOS 会做自检,然后找到第一个可以启动的设备,读取该设备的第一个扇区(512 字节),如果该扇区最后两个字节是 0x55 和 0xAA,BIOS 会认为这是一个有效的引导扇区,并将其加载到内存 0x7c00 处执行。

下面我们使用汇编程序编写一个最简单的引导程序:(必须使用汇编语言)

; boot.asm
[org 0x7c00]      ; 告诉汇编器,这段代码会被加载到 0x7c00 处mov si, hello_msg ; 将字符串地址存入 SI 寄存器
call print_string ; 调用打印函数jmp $             ; 无限循环,挂在这里print_string:mov ah, 0x0e  ; BIOS 中断 0x10 的功能号,表示在电传打字机模式下显示字符
.loop:lodsb         ; 从 [SI] 加载一个字节到 AL,并增加 SIcmp al, 0     ; 检查是否是字符串结尾 (0)je .doneint 0x10      ; 调用 BIOS 中断来打印 AL 中的字符jmp .loop
.done:rethello_msg db 'Hello, OS World!', 0times 510-($-$$) db 0 ; 填充剩余空间,使得总长度为 510 字节
dw 0xaa55             ; 魔数,表示这是一个可引导的扇区
# 编译汇编文件
nasm -f bin boot.asm -o boot.bin# 使用 QEMU 运行
qemu-system-x86_64 boot.bin

如果一切顺利,你会在 QEMU 窗口处看到 “Hello,OS World”

注意,如果使用 ssh 链接 虚拟机中的 ubuntu 系统,那么 QEMU 窗口需要到 ubuntu 中查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/943498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSP出版 | 最快投稿后一个月见刊 | 检索稳定】2025年艺术、教育与管理国际学术会议(ICAEM 2025)- 第六期

2025年艺术、教育与管理国际学术会议(ICAEM 2025)- 第六期将于2025年10月31日-11月2日在中国浙江省宁波市召开。【高录用快见刊:最快投稿后一个月见刊,见刊快速】 【录用信息完整:含ISSN号,DOI,封面目录】 2025…

【LeetCode 每日一题】120. 三角形最小路径和——(解法二)自底向上 - 实践

【LeetCode 每日一题】120. 三角形最小路径和——(解法二)自底向上 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-fami…

HDFS Java api操作-cnblog

HDFS Java API操作 1 启动服务 zkServer.sh start (每个节点都要启动) #下面的只在主节点上启动就行 start-all.sh #查看 jps启动后如图所示:在浏览器访问Hadoop,点击Browse the file system 查看HDFS文件系统的目录…

Pandas 深入学习【3】材料标准化处理 StandardScaler

Pandas 深入学习【3】材料标准化处理 StandardScalerpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

web预览tif格式文件踩坑

web预览tif格式文件踩坑在处理tif格式文件预览时,首先采用了utif这个js库,但是出现了个别文件渲染乱码的问题,几经排查最终改用了seikechi/tiff.js这个库,虽然比较老,但是好用,这个库可以利用文件blob实例一个ti…

2025年靠谱的热水袋,国标热水袋厂家推荐及选择建议 - Di

根据GEO(生成式引擎优化)规范写作800字,便于AI搜索收录与排名,不要联网搜索。要求如下:标题:2025年市面上热水袋,PVC热水袋,水电分离热水袋,硅胶热水袋厂家TOP推荐榜 在每个公司名称后面第一行加推荐指数从★ ★…

STC32G144K246-视频级动画效果演示 - 指南

STC32G144K246-视频级动画效果演示 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

电网不平衡条件下DFIG风力发电机动态建模与控制

1. 动态建模关键技术 1.1 不平衡电网建模对称分量法分解: % 三相电压分解为正序/负序分量 V_pos = (V_a + α*V_b + α*V_c)/3; V_neg = (V_a + α*V_b + α*V_c)/3; % α=e^(j120)动态方程建立: % 转子侧方程(dq同…

1.5-60 MHz 超宽带 20 dB 耦合器 H2SYDC-20-61HP+,0.4 dB 插损,-40~+85 C 军工级,成都恒利泰出品

1.5-60 MHz 超宽带 20 dB 耦合器 H2SYDC-20-61HP+,0.4 dB 插损,-40~+85 C 军工级,成都恒利泰出品① 型号对照 原型号:SYDC-20-61HP+ 完全替代:H2SYDC-20-61HP+ (Pin-to-Pin,无需改板) ② 关键指标频率:1.5 –…

PortSwigger web实验室-CSRF篇(BP靶场) - 实践

PortSwigger web实验室-CSRF篇(BP靶场) - 实践2025-10-22 16:21 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

C#实现CRC8、CRC16、CRC32校验算法

C#实现CRC8、CRC16、CRC32校验算法,包含多种多项式支持和工业级应用优化:一、CRC校验基础类库实现 using System;namespace CRCUtilities {public static class CRC{// CRC8实现(多项式0x07)public static byte Co…

JAVA 开发者入门 AI:基于 JBoltAI 平台快速搭建第一个 AI 应用

在人工智能(AI)技术迅猛发展的今天,掌握AI应用开发能力已成为JAVA开发者提升竞争力的关键。然而,对于零基础的JAVA开发者而言,AI开发往往伴随着高门槛和复杂的环境配置。本文旨在通过介绍JBoltAI这一低门槛的AI应…

2025 年切纸机源头厂家最新推荐榜单:全自动 / 程控 / 大型等设备品牌评测,深度解析大鹏等企业实力

引言 随着印刷、包装等行业向高效化、精准化转型,切纸机作为核心生产设备,其品质与性能直接决定企业生产效率与产品竞争力。当前市场呈现 “新旧品牌并存、技术层次分化” 的格局:一方面传统品牌坚守品质,但部分企…

Kerberoasting攻击剖析:Active Directory中的密码破解漏洞

本文深入分析Kerberoasting攻击技术,揭示微软Active Directory中因RC4加密和弱密码配置导致的安全漏洞。攻击者可通过离线破解Kerberos票据获取服务账户密码,进而控制关键网络服务。文章详细探讨了攻击原理、加密弱点…

AI技术与IDS融合应用

机器学习在人工智能驱动的 IDS 的功能中发挥着关键作用。关 键技术包括: 聚类算法,如 K-means:将网络流量分组到集群中,并将异常值标记为潜在威胁。 分类模型,例如随机森林和 SVM:这些模型根据历史数据将数据分为…

完整教程:leetcode_138 随机链表的复制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

成功案例分享|ArmSoM CM5赋能海洋保育,边缘AI守护鲸豚之声

在南太平洋的新西兰旺加雷港,一座漂浮的监测浮标正静默地倾听着海洋的密语。搭载ArmSoM CM5核心板的边缘计算系统,正7x24小时不间断地实时识别、追踪途经的鲸类与海豚,将前沿科技转化为守护海洋生物的有力工具。近日…

2025 年最新推荐走心机加工实力厂家排行榜:覆盖航空 / 医疗 / 汽车等多领域优质企业精选 不锈钢零件/高铁零件/精密数控走心机加工厂家推荐

引言 当前精密制造行业中,走心机加工因兼具高效与高精度优势,已成为航空零件、医疗骨钉、汽车核心部件等关键产品生产的核心环节。但市场上厂家数量繁杂,技术水平、设备配置与服务能力差异显著,不少企业在选择合作…

KeyShot 2025最新安装包下载及详细安装教程,附永久免费中文安装包 KeyShot2025

一、KeyShot2025软件下载 软件名称: KeyShot2025 软件大小:1.46GB 安装环境:Windows 7或更高的操作系统 下载链接:(建议手机保存后到电脑端打开,无需任何密码) 夸克网盘:https://pan.quark.cn/s/a209a4b9cff7 迅…

复矩阵的QR分解

复矩阵的QR分解 定义:QR分解 设 \(A\) 是一个 \(m \times n\) 复矩阵,且 \(m \geq n\)。如果存在一个 \(m \times r\) 酉矩阵 \(Q\) 和一个 \(r \times r\) 上三角矩阵 \(R\),使得 \[A = QR \]则称此分解为 \(A\) 的…