我在 Win7 老电脑上从零手搓了一个操作系统内核:32位分页、中断接管与 Shell 终端

今天突发奇想:如果不依赖任何现代框架,我能在裸机上写一个能敲键盘的操作系统吗?

于是,我在一台 13 年前的 Windows 7 电脑上,用纯 NASM 汇编,从引导扇区(Boot Sector)一路干到了 32 位保护模式、分页(Paging)、IDT 中断接管,甚至实现了一个可以输入的 Shell 终端!

核心跨越:接管 IRQ1 键盘中断

现在的 CPU 不再是个"聋子"。我通过重映射 8259A PIC 芯片,解除了键盘屏蔽,并利用 IDT(中断描述符表)抓住了硬件的 IRQ1 中断。

每次你按下键盘,CPU 都会进入我的 keyboard_handler,读取端口 0x60 的扫描码,查表翻译成 ASCII 字符并打印在显存上。

交互与滚屏:让系统"活"起来

敲击键盘,屏幕上立刻出现字母;按下回车,自动换行并打印出新的提示符 >。如果你输入了超过 24 行,屏幕还会自动向上滚动。

极简复现

不需要安装庞大的 GCC 交叉编译器,只要 NASM 和 QEMU:

  1. 下载源码:github.com/doujiaozh/m...
  2. 编译:nasm -f bin boot.asm -o boot.bin 和 nasm -f bin kernel.asm -o kernel.bin
  3. 合并镜像并启动:qemu-system-i386 -drive format=raw,file=os.img

下一步愿景:AI 原生内核

目前底层骨架(分页、中断、驱动)已经搭好。下一步,我准备用 Rust 重写核心代码,保证极致的安全,并尝试把它做成一个极轻量的 Unikernel。让它不仅能跑 Shell,还能跑轻量级的 AI 推理!

今天的极客周末极度充实,欢迎对底层感兴趣的老哥来仓库交流!

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