问题描述
# 07/11/2018 因为在 MPLinux 中整理 util-linux 软件包,里面涉及到了很多与系统内核相关的命令,因此决定了解一下 Linux 内核,但就目前的情形来看,还是缺啥补啥吧;
# 09/30/2021 现在 Kubernetes 广泛应用,如果想维护 Kubernetes 集群,排查相关问题,很多时候都需要 Linux Kernel 知识;
该笔记将记录:我们学习 Linux Kernel 的方法、路线,以及相关问题的解决方法;
解决方案
该部分笔记将记录我们学习 Linux Kernel 的方法,以及相关笔记;
研究对象
我们需要研究 Linux 内核的各个组件:文件系统;进程管理;网络堆栈;
研究工具
书籍:
博文社区
https://blog.csdn.net/orangeboyye?type=blog
http://www.biscuitos.cn/
代码:
文档:
并坚持五到十年
研究目的
在开始学习 Linux 的内核前,我有幸读到下面这两篇文章:
1)我为何放弃 linux 内核学习
2)关于 Linux 内核学习的误区以及相关书籍介绍
我们学习 Linux Kernel 是鉴于如下原因:
1)理论:熟悉内核各个模块的工作原理,熟悉相关指标;
2)实践:并能够进行性能优化,及相关问题的排查;
第零步、准备工作,知识储备,收集资料
我们已具备的基础知识
《穿越计算机的迷雾, 李忠》、《汇编语言, 第 3 版, 王爽》、《x86 汇编语言, 从实模式到保护模式》、《30 天自制操作系统, 川合秀实-周自恒,》
这些书籍我们读过,很多也没有读完。但通过这些资料,我们对硬件工作原理具备基本认识(至少知道哪里查阅相关资料)
学习路线
国内外网上有很多内核学习路线,但是我们未找到期望的那种:
1)适合新手:给出内核整体结构,给出成型的学习路线,循序渐进;
2)边学边做:通过学习、修改、运行等等过程来学习内核;
所以,我们还是从市面上的书籍入手:
1)根据书中描述,边学边做,形成我们自己对内核认识;
2)伴随学习过程,我们能发现合适的书籍,或自己整理;
对于我们来说,整个学习过程是:读书 ⇒ 笔记 ⇒ 实践 ⇒ 读书 ⇒ 笔记 ⇒ 实践 ⇒ …
第一步、概览 Linux Kernel 结构,了解整体结构
《Linux 内核设计与实现(原书第 3 版)》
Robert Love / isbn:9787111338291
基于 Kernel 2.6.34 版本(如果有必要,应该尽快学习,否则时间越久,此书的知识越旧);
# 02/18/2021 本书的翻译还有有些问题,如果有条件,建议阅读英文版本;
# 02/22/2021 当读到第三章的时候,我们感觉通过这本书可以学到内核的原理,但是并不会深入细节。也就说时,读完这本书,1)我们会明白很多原理性知识,对内核有一个整体的认识,2)但如果想实现某个功能,还是有些困难,可能还需要再阅读其他相关的书籍才能进行内核相关开发。不过,这是一个很好的开始,我们也没有指望仅靠这本书就能弄明白内核的方方面面;
# 02/23/2021 我们认为看完中文版之后,一定要看一边英文版。目的是:了解对应的英文术语,以及了解其中的翻译问题;
# 02/28/2021 书中插入内核的部分代码,用于解释说明,但是我们根本看不懂。不过,也没有关系,虽然代码我们看不懂,但是从文字上,完全可以理解内核是如何工作的(大致上)。到时候在回来看第二遍就好了(不过在这之前,我们可能会先去拜读其他内核著作);
《Linux 内核完全剖析 —— 基于 0.12 内核》
关于 Linux Kernel 架构
Linux 内核的整体架构简介:https://blog.csdn.net/changexhao/article/details/78321295
Linux Kernel Map:./LKM001.svg
linux 启动及内核管理:http://blog.51cto.com/13560258/2093512
Linux 内核调试方法:https://www.cnblogs.com/shineshqw/articles/2359114.html
Linux 内核剖析:https://www.ibm.com/developerworks/cn/linux/l-linux-kernel/
第二步、深入学习,了解实现细节
《Linux 内核源代码情景分析(上下册)》
毛德操 & 胡希明 / isbn:9787308027038 / isbn:9787308027045
有时被称为《Linux 内核情景分析》。本书内容超多,超细,新手不适合(正如作者所说,读者要有些操作系统和计算机系统结构方面的基础知识,并粗通 C 语言,才能阅读本);
该书基于 2.4 内核,版本较旧(即使是 CentOS 6 也是 2.6 内核,并且 2.4 与 2.6 相差较大)。但是,我们认为此阶段的学习是为了了解操作系统实现的细节,对操作系统实现细节形成整体的认识。为我们深入学习 Linux 打下基础;
推荐学习书籍
《深入理解 LINUX 内核》
DANIEL P.EOVET & MARCO CESATI /isbn:9787508307190
该书基于 2.6 内核
与《Linux 内核源代码情景分析》相比,该书缺少到硬件原理的描述,开始章节直接切入主题讲解内核;
《LINUX 设备驱动程序》
Jonathan Corbet, Alessandro Rubini & Greg Kroah-Hartman / ISBN:9787564183394
《深入 Linux 内核架构》
莫尔勒 & 郭旭 / isbn:9787115227430
《Linux 内核完全注释》
赵炯 / isbn:9787111149682
《LINUX KERNEL 技术手册》
哈特曼 / isbn:9787564107420
《ARM Linux 内核源码剖析》
[韩] 尹锡训 等 著;崔范松 译 / ISBN9787115359100
《深入理解 Linux 虚拟内存管理》
[爱尔兰] Mel Gorman / 9787810777308
其他书籍
《UNIX 环境高级编程》、《Linux 设备驱动》
学习 linux 内核,请推荐几本书及顺序,谢谢。:https://zhidao.baidu.com/question/189206343.html
《操作系统:设计与实现》、《linux 设备驱动程序》、《精通 Linux 驱动程序开发》、《深入理解 LINUX 网络技术内幕》、《see mips run》、《unix 环境高级编程》、《Linux 系统编程》、《unix 网络编程.卷 1,套接字联网 api》
学习 linux 内核,都看哪些书?:https://blog.csdn.net/xzjj2007/article/details/4843831
适合 Linux 新手
https://bookauthority.org/books/beginner-kernel-ebooks
10 本 Linux 内核书籍推荐
Linux Kernel for Absolute Beginners
The most simplified and easiest book to understand, learn and work with Linux Kernel. (Kindle Edition)
Understanding Linux Kernel
Absolute Beginners Guide : The most simplified and easiest book to understand, learn, and work with Linux Kernel. (Kindle Edition)
Linux System
What Is Linux Operating System?: Linux File System (Kindle Edition)
Linux with Operating System Concepts
(Kindle Edition)
Linux Internals Simplified
A beginners guide to Linux Internals (Kindle Edition)
学习社区
参考文献
CSDN/ 推荐一本最接近完美的 Linux 内核入门教材
关于 Linux 内核,推荐的 8 本书籍
CSDN/Linux 内核学习书籍