从零开始写Linux内核:一书学透核心原理与实现
海纳
前言
为何要写作本书
作为当今世界上最成功的开源项目之一,Linux内核源码具有巨大的学习价值。学习内核不仅仅能提升编码水平、架构能力,更能全面地了解硬件接口和计算机原理。但是随着Linux内核的功能越来越强大,内核变得越来越复杂,代码量也在急剧地膨胀。这就给刚入门的新手带来了巨大的学习困难。
学习一个复杂的系统有两种常用的方式。
一种是直接扎进系统源码中,按逻辑顺序逐个分析各个模块。但复杂系统的特点是模块之间的关联非常强,相关的数据结构非常庞大,调试环境的搭建也往往比较烦琐。这就使得很多人在开始阶段就困难重重,要想坚持下去,往往需要很大的定力。
另一种是从零开始将系统从简单到复杂地实现一遍。这种学习方式的优点非常明显,入门阶段比较容易,每次新增几十行甚至几行代码就可以实现一个新的功能,整个学习过程是循序渐进的。但对Linux系统来说,从零开始写一遍并不容易。这是因为Linux诞生于1991年,当时Linus Torvalds所使用的很多构建工具现在已经很难找到了,例如ld86等编译工具,有些工具即使找到了也很难运行在现代的操作系统上。
为了解决这个问题,我编写了本书。本书的目标是使用现代的操作系统(例如Ubuntu 20)和编译器(例如GCC7或者GCC9)从零开始实现Linux 0.12的内核代码。在这个过程中,我改写了很多不适用于现代编译器的代码,并且通过链接选项或者链接脚本重现了早期的文件系统和可执行文件格式,让操作系统可以运行在现代的Bochs或者QEMU等仿真软件上。
读者对象
本书面向的人群主要是对操作系统感兴趣的人,尤其是那些想深入学习Linux内核但又不知道该如何入门的人。对于计算机专业的学生而言,本书则是一本非常好的实验指导书,通过一步步地跟随本书实现全部的功能,不仅可以深入地掌握操作系统的基本功能,还可以加深对计算机接口的了解。
如何阅读本书
本书共…