对于初学者来说,linux内核是非常复杂的,所以一本好的学习书籍是相当必要的,否则容易打击自信。所以,这里我推荐先看Robert love的《Linux内核设计与实现》,全书也就300多页,麻雀虽小、五脏俱全,非常适合初学者。或者笨叔叔的《奔跑吧linux内核:入门篇》,这本书也比较薄,写的不是很全面,但是内存管理和进程管理部分还是不错的,而且对很多问题总结的很好。

如果是中高级的内核工程师,推荐《深入理解linux内核》,这本书写的很全面,基本上涉及了linux内核所有核心的内容。但是这边书翻译的不是很好,感觉有些表达逻辑不是很通,我读这本书相当痛苦(虽然也学了不少东西)。

一本我正在看的是 《linux技术内幕》,写的也很全面,作者是中国人,读起来比《深入理解linux内核》舒服很多。但是我还没读多少,读完了再来写读后感。


我自己几年前买了两本书:《深入理解linux内核》、《linux设备驱动程序》,第一本的命运就是拆开快递之后放那里吃灰,第二本是垫显示器...。

其实这些书刚拿到手的时候是有认真看的,由于当时基础不够,越看只会越让你想放弃学习linux内核,真的是太难懂了。后来我就改变了学习方式,直接看源码,这种方式似乎很多人都不推荐。

Talk is cheap. Show me the code.

后来这两本书就就成了我的字典,需要什么内容看什么或者说查什么,我想没有人去研究字典的所有内容吧。

既然要看代码,所以首先要搞明白linux内核是如何启动的,启动时有什么要求,网上搜索一下发现都是千篇一律的东西,干脆直接去查官网文档,为了省事,我就把相关的内容给总结了一下:

引导 ARM Linux?

mp.weixin.qq.com

通过上篇文章就可以了解到 bootloader 在引导 linux 内核时该如何设置软硬体环境了,比如为什么需要给 linux 内核传递参数等等。

linux 内核被引导到内存之后,就开始执行内核的代码了,第一步就是对自身进行解压缩,然后开始真正的内核代码的运行,可以参考下面两篇文章:

解压内核镜像?

mp.weixin.qq.com

调用 start_kernel?

mp.weixin.qq.com

至此就开始了内核的初始化过程,期间你还会遇到各种其他的概念,比如自旋锁、原子操作等,对应的笔记都可以在公众号 linux 专题中看到,虽然空闲时间还在继续探索源码,不过近期比较忙,笔记还没有及时整理,后续会继续更新。


Robert love的书比较薄,可以先看。不推荐wolfgan的那本红色的,冗杂。

《深入理解linux内核》那本不错,可以多花时间


深入理解linux内核,深入linux内核架构等


这个要看你的基础啦。

了解内核的前提是,你了解啥是操作系统吗?如果答案是否,首先阅读的书籍是

计算机系统概论 - 这个基础的书籍帮你理清楚操作系统的基础概念,最基本的指令集,冯诺依曼结构与指令集的关系,等等。

如果你已经跨过这个门槛,紧接著我建议阅读

CSAPP - 上一本书的升级版,告诉你,什么一些现代操作系统的概念,链接,编译,虚拟内存,等等等等

了解了这些基础后,可以去看看 Linux 的内核的相关书籍啦,这个其他答案里面已经很多了。


推荐阅读:
相关文章