Linux内核应该怎么去学习?
的有关信息介绍如下:可以尝试迭代螺旋法这种方式看看!
很多为Linux吐血而亡的程序员都犯了一个通病,那就是一开始就陷入无穷无尽的细节,比如一开始就陷入源代码情景分析。情景分析这样的书,无疑是好书,但是你把《新华字典》从第一个单词,背到最后一个单词,你仍然写不出一篇作文。
若言琴上有琴声,放在匣中何不鸣?
若言声在指头上,何不于君指上听?
《琴诗》
苏轼
我建议的学习方法是,反复迭代螺旋上升法。如下图:
下面我们来论述学习Linux内核的各个阶段
接下来怎么办?不停地循环!生命不息,循环不止!!两情若是久长时,又岂在朝朝暮暮。
你千万不要倒着学,先跑进去细节,跑进去一行行,总共2000万行地撸代码,这样量太大,整体性太弱,各个组件的关联很难建立。且中间无法用前期的成就感,来催生后期学习的动力,只会强撸灰飞烟灭。你不从外围看Linux,横着看,竖着看,你是看不到Linux的真面目的。
横看成岭侧成峰,远近高低各不同。
不识庐山真面目,只缘身在此山中。
据我个人所知,也有极少量的人,一开始就以情景分析的方法,逐行解释代码,最后也学有所成,但是这样的人,都具有非凡的毅力,不是一般人可以去模仿的。
一般的人,类似我这样的懒惰分子,需要用整体带动部分的方法。正如我们看一个别人的.c文件,你不可能傻到从第一行读到最后一行。你肯定是先搞清楚这个.c的整体功能,对外接口API,再深入到static的内部函数,由外及内,继而由内及外。
下面我们用一个球来比如Linux,最外圈的球是整体的Linux,球内的小球是Linux的某个组件。最开始你这样看Linux:
接下来你把其中的某些子系统放大,整个Linux这个气球也随着变大:
随着掌握的越多,这个球越来越大:
然后,某个领域成为你的专业领域(比如你文件系统牛逼,比如你内存优化牛逼),这个球里面这个专业领域就凸起了:
可以看看我们的精华文章
Linux任督二脉之进程管理
郭健: Linux进程调度技术的前世今生之“前世”
郭健: Linux进程调度技术的前世今生之“今生”
宋宝华: 是谁关闭了Linux抢占,而抢占又关闭了谁?
宋宝华:Linux的任督二脉——进程调度和内存管理
Linux任督二脉之内存管理
宋宝华: CPU是如何访问到内存的?--MMU最基本原理
宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清
宋宝华:网上坑爹的Linux资料汇总之内存管理
宋宝华:swappiness=0究竟意味着什么?
宋牧春: 多图详解Linux内存分配器slub
宋宝华: 用代码切身实践体会meltdown漏洞
宋牧春: Linux内核slab内存的越界检查——SLUB_DEBUG
郭健: Linux内存逆向映射(reverse mapping)技术的前世今生
谢宝友: 深入理解Linux RCU之一——从硬件说起
谢宝友:深入理解Linux RCU:从硬件说起之内存屏障
系统调试调优
宋宝华:关于Ftrace的一个完整案例
阿里杨勇:浅谈 Linux 高负载的系统化分析
宋宝华:火焰图:全局视野的Linux性能剖析
孟冉: Linux火焰图的数据流程分析
朱辉(茶水): Linux Kernel iowait 时间的代码原理
朴英敏: 用crash工具分析Linux内核死锁的一次实战
宋宝华: Kernel Oops和Panic是一回事吗?
廖威雄: 利用__attribute__((section()))构建初始化函数表与Linux内核init的实现
文件系统和IO
宋宝华: 文件读写(BIO)波澜壮阔的一生
黄伟亮:ext4文件系统之裸数据的分析实践
黄伟亮: 探秘Linux的块设备和根
吴锦华/明鑫: 用户态文件系统(FUSE)框架分析和实战
设备驱动
宋宝华:让天堂的归天堂,让尘土的归尘土——谈Linux的总线、设备、驱动模型
宋牧春: Linux设备树文件结构与解析深度分析(1)
宋牧春: Linux设备树文件结构与解析深度分析(2)
何晔: 当ZYNQ遇到Linux Userspace I/O(UIO)
云和虚拟化
宋宝华:Docker 最初的2小时(Docker从入门到入门)
宋宝华: KVM最初的2小时——KVM从入门到放弃
Linuxer人生
论一个程序员问问题的自我修养(修订版)
论程序员的时代焦虑与焦虑的缓解
陈莉君教授: 回望踏入Linux内核之旅
魏永明: MiniGUI的涅槃重生之路
谢宝友: 手把手教你给Linux内核发patch
(END)
更多精彩……欢迎关注微信公众号:linux阅码场(id: linuxdev)