目录

自己动手从零构建Linux操作系统_前言


前言

我用AI写了本书

本书是靠人工经验选方向,用AI辅助实验以及交叉手工验证等方式完成,原创在本站(https://oser.space),会不定期更新和修改,以本站为准,欢迎关注。

https://oser.space/%E8%87%AA%E5%B7%B1%E5%8A%A8%E6%89%8B%E4%BB%8E%E9%9B%B6%E6%9E%84%E5%BB%BAlinux%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F_%E5%89%8D%E8%A8%80/0.png

这本书想解决什么问题?

很多人每天都在用 Linux——敲命令、跑服务、部署容器——却对它「底层是怎么跑起来的」只有一个模糊的概念。 内核、Shell、根文件系统、/init、UEFI、GRUB……这些词耳熟能详,可一旦要把它们亲手拼装成一个能启动的系统,大多数没实际经验的人都会卡住:

  • 内核到底是怎么被「加载」到内存的?
  • 为什么要有 initramfs?它和真正的根文件系统是什么关系?
  • UEFI 固件找到的那个 BOOTX64.EFI 到底是什么格式?
  • 一块硬盘里的文件,怎么就变成了系统中的 /?

市面上讲内核源码的书太多、而且比较深,讲 Linux 运维/使用的书又往往停在「会用」这一层。 本书想补上中间的断层:—— 从编出一个能启动的内核开始,一步步走到可以从磁盘镜像开机、最终可实际在生产上更新和使用UI界面和软件更新的操作系统。

💡 核心理念:理解一个东西最好的方式,是亲手把它做一遍。 当你为了让一个自己编译的内核进入 Shell,不得不去理解 initramfs、/init、switch_root、 UEFI 启动链时,这些概念就不再是死记硬背的名词,而是你亲手踩过坑、调通过的零件。

目标读者

本书假定你:

  • ✅ 熟悉 Linux 基本命令(ls、cd、mount、cp 等),能在终端里工作
  • ✅ 写过或至少读过简单的 Shell 脚本
  • ✅ 知道什么是「编译」(有 gcc、make 的基本概念)
  • ⚠️ 不需要精通汇编、不需要读过内核源码、不需要懂硬件电路

如果你属于「用过 Linux,但一直好奇它底层长什么样」的那一类人,这本书就是为你写的。

我们会造出什么样的系统?

最终想法是造出一个能在生产环境使用的、有图形界面、有软件更新的操作系统。可以真实的用起来,采用最新的Linux内核(可能会随着内核更新而更新),紧跟最新技术。

你会学到什么(已规划的内容,随时更新)

章节 主题 关键收获 文章链接
第 1 章 内存中的 Linux 编译最小化内核、静态编译 Toybox、构建 initramfs、用 QEMU 直接启动进入 Shell;从源码视角理解内核启动全过程(_start → 解压 → start_kernel → /init) 第1章直达
第 2 章 从磁盘启动 UEFI 启动流程、GPT 分区、GRUB(嵌入配置)、ext4 文件系统、switch_root 根切换、loop 设备制作磁盘镜像、持久存储验证 第2章直达
后续章节 待补充 网络配置、显卡与图形输出、安全加固等 (待补充)

🎯 阅读建议:务必亲手实践。本书每一步都给出可复制的命令,并附「踩坑记录」—— 那些让你内核 panic、启动失败的真实错误,正是理解机制的最佳切口。

致谢与约定

  • 本书示例基于 Alpine Linux 3.22 + Linux 7.1 + Toybox 0.8.13 + QEMU/OVMF 验证。
  • 命令行中 $ 表示普通提示符,命令本身不含 $;# 为注释或 root 提示符,依上下文而定。
  • 工具链版本会演进,若遇编译失败,通常只需临时禁用对应 CONFIG_XXX(书中已注明常见情形)。

现在,让我们从一台「什么都没有」的虚拟机开始——

第 1 章,我们要让一个自己编译的 Linux 内核,在 QEMU 里跑起来,并进入 Shell。