0x300-从头开始写操作系统-内核

目录 回顾 今日目标 必要工具的安装及介绍 工具一览 工具介绍 GCC Hosted Environment Freestanding Environment Linker C 语言编译(gcc 的临时文件) 预处理或预编译(Pre-processing) 编译(Compiling) 汇编(Assembly) 链接(Linking) Objdump Nasm Ndisasm Cross-compiler C 与汇编 局部变量 条件判断 循环 函数调用 指针 加载内核 手动编译 指定内核入口 extern 指令 Makefile 基本规则 特殊变量 默认目标与临时文件清理 宏、匹配规则与通配符 新的代码结构 新的 Makefile Debug 内核代码 QEMU 与 GDB 总结 参考链接 回顾 上一篇文章,我们讨论了以下内容: 读取硬盘所需的参数设置,硬盘数据的地址由 CHS 提供,我们需要将柱面,磁头,扇区信息写入相应的寄存器…

0x200-从头开始写操作系统-进入32-Bit Protected Mode

目录 回顾 今日目标 BIOS 读取硬盘数据 硬盘 读取硬盘数据的参数 硬盘参数小结 调用中断读取硬盘数据 32-Bit Protected Mode 关于 32-Bit Protected Mode 什么是 32-bit Protected Mode? 为什么我们需要 32-bit Protected Mode? 32-bit Protected Mode vs 16-bit Real Mode 32 位模式下的字符打印 告别 BIOS 32 位模式下的显示设备调用 Memory-Mapped Device(Memory-Mapped I/O) VGA 模式(Video Graphics Array) VGA 模式内存 32-bit Protected Mode 输出字符 全局描述符 什么是 GDT 及 GDT…

0x110-从头开始写操作系统-CPU模拟器

目录 回顾 CPU模拟器 引导扇区编程(16-bit Real Mode) 什么是 16-bit Real Mode? 16-bit 系统中的 16 是什么意思? 8086 架构的内存寻址总量 8086 架构的内存管理 什么是内存分段 16-bit Real Mode 物理内存地址的计算 第一个引导扇区程序 中断 中断的作用 中断,Interrupt Vector 和 ISR 常见中断 Hello World 总结 参考链接 回顾 系列开篇讲了计算机启动时的情况。计算机启动时,BIOS 做硬件检查,然后按顺序读取存储介质上 512 字节长的 boot sector。如果读到某个存储介质的 boot sector 最后 2 个字节是 0xaa55,就加载该介质上的操作系统,将控制权交给该操作系统。 CPU 模拟器 上篇中我们有了一个 512 字节的 boot sector:…

0x100-OSFromScratch-Boot

目录 本系列介绍 开篇 —— 计算机的启动(Boot) 启动扇区的 16 进制展示 总结 本系列介绍 这个系列,基于 Nick Blundell 2010 年的文献 Writing a Simple Operating System — from Scratch,记录一下学习操作系统底层的过程。 有能力阅读英文的同学,直接到 这里 阅读英文原版。没有信息丢失。 这份文献并没有完结,出于各种原因最后几个章节那么多年也没有再补全。但是已有的内容,已经足够我们看清全局,作为进一步深入学习的敲门砖。 在看本系列文章的时候,配合 cfenollosa 的 Github Repo。Nick Blundell 没有完结的几个章节,cfenollosa 的 Repo 中都有代码,可以自行配合 Google 理解。 就像作者所说,Writing a Simple Operating System — from Scratch 不是教我们如何写一个功能健全的操作系统,而是将操作系统底层通用的逻辑展示出来,希望在整个工程结束之后,能为各位今后无论在计算机技术任何一方面的发展,做一块垫脚石。 开篇 —— 计算机的启动(Boot) 不要和操作系统启动混淆,这里讲的是计算的启动,远在操作系统之前。 计算机启动的时候,任何我们熟知的与操作系统相关的内容,如文件系统,读写设备,都不存在。这个时候能工作的,只有 BIOS,Basic Input/Ouput…