0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

论述学习Linux内核的各个阶段

Linux阅码场 来源:未知 作者:李倩 2018-08-20 17:23 次阅读

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

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

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

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

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

《琴诗》

苏轼

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39846
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • 源代码
    +关注

    关注

    94

    文章

    2927

    浏览量

    66063

原文标题:宋宝华: 迭代螺旋法——关于Linux学习方法的血泪建议

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高效学习Linux内核

    高效学习Linux内核
    发表于 08-19 23:43

    学习引导]linux下的各个目录的含义

    linux下的各个目录的含义路径名内容/bin为得到最小的系统操作性所需要的那些命令/boot 内核和加载内核所需的文件/dev终端、磁盘等设备项/etc关键的启动文件和配置文件/li
    发表于 05-05 16:47

    自学Linux有哪些阶段

    `自学Linux有哪些阶段?作为一个新人在自学Linux的过程中,很容易陷入很多学习误区,这里给大家分享一个Linux
    发表于 10-15 14:22

    嵌入式系统基础阶段学习建议

    什么是 Linux 内核》· 《嵌入式 Linux 框架的理解》8、Linux应用开发· 《韦东山嵌入式 Linux 应用开发完全手册》·
    发表于 10-29 07:36

    Linux内核教程

    本章学习目标掌握LINUX内核版本的含义理解并掌握进程的概念掌握管道的概念及实现了解内核的数据结构了解LINUX
    发表于 04-10 16:59 0次下载

    Linux内核学习起步课件

    Linux内核学习起步介绍
    发表于 04-10 17:22 0次下载

    Linux 内核源代码

    Linux 内核源代码 实模式setup阶段setup用于体系结构相关的硬件初始化工作,在arch目录中的各个系统结构的平台相关都有类似功能的代码。在32位的x86平台中,s
    发表于 02-10 13:45 28次下载

    新手Linux内核学习起步

    新手Linux内核学习起步
    发表于 10-27 16:10 13次下载
    新手<b class='flag-5'>Linux</b><b class='flag-5'>内核</b><b class='flag-5'>学习</b>起步

    linux内核是什么_linux内核学习路线

    Linux内核是一个操作系统(OS)内核,本质上定义为类Unix。它用于不同的操作系统,主要是以不同的Linux发行版的形式。Linux
    发表于 09-16 15:49 2385次阅读

    Linux内核到底是什么应该如何学习

    Linux可以说是近期非常火的了,有的人想学习linux内核,那他到底是什么呢?
    发表于 10-06 18:02 1755次阅读

    Linux内核学习的环境搭建和内核编译

    一、linux内核学习之一:环境搭建--安装Debian7.3 本系列文章假设读者已对linux有一定的了解,其实学习
    的头像 发表于 01-02 18:01 1902次阅读

    Linux内核开发框架学习资料汇总

    Linux内核开发框架学习资料汇总
    发表于 06-17 09:29 23次下载

    嵌入式Linux内核驱动开发学习路线图

    嵌入式Linux内核驱动开发学习路线图(嵌入式开发软件工程师)-嵌入式Linux内核驱动开发学习
    发表于 07-30 13:51 12次下载
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>驱动开发<b class='flag-5'>学习</b>路线图

    如何开启你的Linux内核学习之路 论学习操作系统(Linux内核)的重要性

    一、学习操作系统(Linux内核)的重要性 为什么要学习Linux内核,这个问题我相信很多人都不
    发表于 05-06 22:15 1729次阅读
    如何开启你的<b class='flag-5'>Linux</b><b class='flag-5'>内核</b><b class='flag-5'>学习</b>之路 论<b class='flag-5'>学习</b>操作系统(<b class='flag-5'>Linux</b><b class='flag-5'>内核</b>)的重要性

    学习linux内核的一些建议

    学习linux内核,这个可不像学一门语言,c或者java一个月或者3月你就能精通掌握。学习linux内核
    发表于 05-07 15:20 465次阅读
    <b class='flag-5'>学习</b><b class='flag-5'>linux</b><b class='flag-5'>内核</b>的一些建议