「LINUX-KERNEL」- How to start learning Linux kernel

问题描述

# 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)

学习社区

Linux 内核之旅

参考文献

CSDN/ 推荐一本最接近完美的 Linux 内核入门教材
关于 Linux 内核,推荐的 8 本书籍
CSDN/Linux 内核学习书籍