在下是一个码农,也号称是一个老湿,平生阅码农无数(吹牛的 ^-^)。经由大量的案例,我能够理解了为什么很多码农学了很多年Linux,还是感觉没有掌握要领,仍然内心崩溃,最终对Linux吐血而亡,正所谓:人世间最大的痛苦,莫过于,码农落花有意,而Linux流水无情.......

在这个2018农历七夕之夜,我决定写一点什么,来缅怀很多童鞋在Linux世界里逝去的青春,抚慰你内心的失落、彷徨、迷茫乃至绝望。

很多为Linux吐血而亡的程序员都犯了一个通病,那就是一开始就陷入无穷无尽的细节,比如一开始就陷入源代码情景分析。情景分析这样的书,无疑是好书,但是你把《新华字典》从第一个单词,背到最后一个单词,你仍然写不出一篇作文。

《琴诗》

苏轼

若言琴上有琴声,放在匣中何不鸣?

若言声在指头上,何不于君指上听?

我建议的学习方法是,反复迭代螺旋上升法。如下图:

下面我们来论述学习Linux内核的各个阶段

  1. 第一阶段: 先形成整体轮廓,比如对Linux的进程、内存、I/O、驱动模型有一些基本的认识,开始写一些简单的内核模块,比如hello-world模块、globalmem、globalfifo这样的字符驱动,你一定要动手。这个时候你可以看的书是《Linux内核设计与实现》,还有驱动的书。

  2. 第二阶段:从事具体的工作,在某个子系统(无论是进程、内存、IO还是驱动)从事工作,加新的功能,修bug,发patch,加深对知识的理解。这阶段你如果有兴趣,也有耐心,可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你工作的时候,会自然而然地自己进行代码分析。

  3. 第三阶段(回归第一阶段):你已经工作了一段时间,写了一些代码,修复了一些bug,提交了一些patch,然后你重新回来迭代整体的知识框架,搞清楚各个子系统内在的联系。这阶段你如果有兴趣可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你的工作让你自己有了分析的能力。

  4. 第四阶段(回归第二阶段):从事具体的工作,在某个子系统(无论是进程、内存、IO还是驱动)从事工作,加新的功能,修bug,发patch,加深对知识的理解。这阶段你如果有兴趣可以读《深入理解Linux内核》、《深入Linux内核架构》这样的书,不过懒得看也没有关系,因为你的深入的工作,会让你自己具备了理清脉络和深入细节的能力。

接下来怎么办?不停地循环!生命不息,循环不止!!两情若是久长时,又岂在朝朝暮暮。

你千万不要倒着学,先跑进去细节,跑进去一行行,总共2000万行地撸代码,这样量太大,整体性太弱,各个组件的关联很难建立。且中间无法用前期的成就感,来催生后期学习的动力,只会强撸灰飞烟灭。你不从外围看Linux,横着看,竖着看,你是看不到Linux的真面目的。

横看成岭侧成峰,远近高低各不同。

不识庐山真面目,只缘身在此山中。

据我个人所知,也有极少量的人,一开始就以情景分析的方法,逐行解释代码,最后也学有所成,但是这样的人,都具有非凡的毅力,不是一般人可以去模仿的。

一般的人,类似我这样的懒惰分子,需要用整体带动部分的方法。正如我们看一个别人的.c文件,你不可能傻到从第一行读到最后一行。你肯定是先搞清楚这个.c的整体功能,对外接口API,再深入到static的内部函数,由外及内,继而由内及外。

下面我们用一个球来比如Linux,最外圈的球是整体的Linux,球内的小球是Linux的某个组件。最开始你这样看Linux:

接下来你把其中的某些子系统放大,整个Linux这个气球也随着变大:

随着掌握的越多,这个球越来越大:

然后,某个领域成为你的专业领域(比如你文件系统牛逼,比如你内存优化牛逼),这个球里面这个专业领域就凸起了:

我不是大神,我只是屌丝,但是我爱你们!

愿你的球球越来越大!

愿你的球球越来越大!!

愿你的球球越来越大!!!

你的球有多大,你的世界就有多大。

查看更多精华文章请扫描二维码关注"LinuxDev"

宋宝华: 迭代螺旋法——关于Linux学习方法的血泪建议相关推荐

  1. 宋宝华:评Linux 5.13内核

    目录 Misc cgroup Landlock安全模块 系统调用的堆栈随机化 printk无锁ringbuffer的进一步优化 BPF可调用内核函数 公共的IO PAGE Fault支持 Linux ...

  2. linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可 ...

  3. 宋宝华_2010年11-12月Linux驱动和内核讲座PPT下载

        12月29日,宋宝华老师在线讲座(按键和LCD驱动) cloudquan 2010-12-20 2/146 heyan0208 3 天前 00:37     宋宝华_2010年12月11日_& ...

  4. 宋宝华:LEP(Linux易用剖析器) 是什么,为什么以及怎么办(2)

    LEP(LINUX EASY PROFILING) 是Linuxer之LEP项目组(Barry Song,Mac Xu,陈松等以及陈莉君教授/西邮Linux 3+1实验室)正在致力于打造的一个开源项目 ...

  5. linux pdf 宋宝华,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    原创 宋宝华 Linux阅码场 2018-04-10 前言 网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂! 我曾经跨过山和大海 也穿过人山 ...

  6. 宋宝华: 用off-cpu火焰图进行Linux性能分析

    在<宋宝华:火焰图:全局视野的Linux性能剖析>一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析.但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU) ...

  7. 宋宝华:论一切都是文件之匿名inode

    01 唯有文件得人心 当一个女生让你替她抓100只萤火虫,她一定不是为了折磨你,而是因为她爱上了你.当你们之间经历了无数的恩恩怨怨和彼此伤害,她再次让你替她抓100只萤火虫,那一定是因为她还爱着你. ...

  8. 宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清

    原创 宋宝华 Linux阅码场 2018-01-22 作者简介 宋宝华,他有10几年的Linux开发经验.他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上r ...

  9. platform设备驱动全透析(转自宋宝华老师)

    platform设备驱动全透析(转自宋宝华老师) 2013-04-12 09:58 384人阅读 评论(0) 收藏 举报 分类: linux kernel(22) 1.1 platform总线.设备与 ...

最新文章

  1. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)
  2. 喂~讲真~我很讨厌chrome谷歌浏览器的默认填充输入框input样式咧,敲击讨厌滴啦,怎么去掉介个样式尼
  3. 6 OC 中的isa 指针
  4. memcahce 介绍以及安装以及扩展的安装
  5. UA MATH567 高维统计II 随机向量11 kernel的构造 用内积替换反三角函数
  6. img 光盘映像文件已损坏_系统封装||还在用MSDN下载Windows镜像文件?你out了,用这个就可以了...
  7. SQL中的left outer join,inner join,right outer join用法详解1
  8. HDU-1847 Good Luck in CET-4 Everybody! (博弈+找规律)
  9. mysql数据库 sid_jdbc连接数据库使用sid和service_name的区别
  10. svn文件大小类型限制,提交必须加多少字的说明
  11. linux系统级别及特殊字符的意义
  12. Python Imaging Library: Script(脚本)
  13. jsp页面显示mysql数据库数据_jsp页面显示数据库表数据
  14. php 调用vs2013 dll文件,vs2015 肿么添加dll文件
  15. Vegas中的色彩校正怎么用?
  16. 多线程之线程通信条件Condition二
  17. 推到 旋转矩阵公式_想知道旋转矩阵的带入公式
  18. linux ssh freeradius,如何将SSH身份验证配置到FreeRADIUS服务器
  19. 基于QtGUI的宠物小精灵对战游戏设计
  20. dolphinscheduler 2.0.4 PIGEON任务使用的一次尝试

热门文章

  1. Day2 Numerical simulation of optical wave propagation之标量衍射理论基本原理(二)
  2. Ensp实验随心记——PPP
  3. React Native学习指南
  4. Java判断回文字符串的几种方法
  5. 腾讯 Flutter 跨平台 Web 实践
  6. 3.30 使用抓手工具浏览和编辑大尺寸图片 [原创Ps教程]
  7. 宽禁带半导体:后摩尔时代超车绝佳赛道?
  8. solr教程从入门到精通(solr5搜索引擎)-任亮-专题视频课程
  9. :app:checkDebugAarMetadata 8 issues were found when checking AAR metadata: 8 issues were found when
  10. win10系统+3060显卡驱动+cuda11.5+cudnn8.3安装