0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

論述學(xué)習(xí)Linux內(nèi)核的各個(gè)階段

Linux閱碼場(chǎng) ? 來源:未知 ? 作者:李倩 ? 2018-08-20 17:23 ? 次閱讀

在下是一個(gè)碼農(nóng),也號(hào)稱是一個(gè)老濕,平生閱碼農(nóng)無數(shù)(吹牛的 ^-^)。經(jīng)由大量的案例,我能夠理解了為什么很多碼農(nóng)學(xué)了很多年Linux,還是感覺沒有掌握要領(lǐng),仍然內(nèi)心崩潰,最終對(duì)Linux吐血而亡,正所謂:人世間最大的痛苦,莫過于,碼農(nóng)落花有意,而Linux流水無情.......

在這個(gè)2018農(nóng)歷七夕之夜,我決定寫一點(diǎn)什么,來緬懷很多童鞋在Linux世界里逝去的青春,撫慰你內(nèi)心的失落、彷徨、迷茫乃至絕望。

很多為L(zhǎng)inux吐血而亡的程序員都犯了一個(gè)通病,那就是一開始就陷入無窮無盡的細(xì)節(jié),比如一開始就陷入源代碼情景分析。情景分析這樣的書,無疑是好書,但是你把《新華字典》從第一個(gè)單詞,背到最后一個(gè)單詞,你仍然寫不出一篇作文。

若言琴上有琴聲,放在匣中何不鳴?

若言聲在指頭上,何不于君指上聽?

《琴詩》

蘇軾

我建議的學(xué)習(xí)方法是,反復(fù)迭代螺旋上升法。如下圖:

下面我們來論述學(xué)習(xí)Linux內(nèi)核的各個(gè)階段

第一階段: 先形成整體輪廓,比如對(duì)Linux的進(jìn)程、內(nèi)存、I/O、驅(qū)動(dòng)模型有一些基本的認(rèn)識(shí),開始寫一些簡(jiǎn)單的內(nèi)核模塊,比如hello-world模塊、globalmem、globalfifo這樣的字符驅(qū)動(dòng),你一定要?jiǎng)邮?。這個(gè)時(shí)候你可以看的書是《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》,還有驅(qū)動(dòng)的書。

第二階段:從事具體的工作,在某個(gè)子系統(tǒng)(無論是進(jìn)程、內(nèi)存、IO還是驅(qū)動(dòng))從事工作,加新的功能,修bug,發(fā)patch,加深對(duì)知識(shí)的理解。這階段你如果有興趣,也有耐心,可以讀《深入理解Linux內(nèi)核》、《深入Linux內(nèi)核架構(gòu)》這樣的書,不過懶得看也沒有關(guān)系,因?yàn)槟愎ぷ鞯臅r(shí)候,會(huì)自然而然地自己進(jìn)行代碼分析。

第三階段(回歸第一階段):你已經(jīng)工作了一段時(shí)間,寫了一些代碼,修復(fù)了一些bug,提交了一些patch,然后你重新回來迭代整體的知識(shí)框架,搞清楚各個(gè)子系統(tǒng)內(nèi)在的聯(lián)系。這階段你如果有興趣可以讀《深入理解Linux內(nèi)核》、《深入Linux內(nèi)核架構(gòu)》這樣的書,不過懶得看也沒有關(guān)系,因?yàn)槟愕墓ぷ髯屇阕约河辛朔治龅哪芰Α?/p>

第四階段(回歸第二階段):從事具體的工作,在某個(gè)子系統(tǒng)(無論是進(jìn)程、內(nèi)存、IO還是驅(qū)動(dòng))從事工作,加新的功能,修bug,發(fā)patch,加深對(duì)知識(shí)的理解。這階段你如果有興趣可以讀《深入理解Linux內(nèi)核》、《深入Linux內(nèi)核架構(gòu)》這樣的書,不過懶得看也沒有關(guān)系,因?yàn)槟愕纳钊氲墓ぷ鳎瑫?huì)讓你自己具備了理清脈絡(luò)和深入細(xì)節(jié)的能力。

接下來怎么辦?不停地循環(huán)!生命不息,循環(huán)不止??!兩情若是久長(zhǎng)時(shí),又豈在朝朝暮暮。

你千萬不要倒著學(xué),先跑進(jìn)去細(xì)節(jié),跑進(jìn)去一行行,總共2000萬行地?cái)]代碼,這樣量太大,整體性太弱,各個(gè)組件的關(guān)聯(lián)很難建立。且中間無法用前期的成就感,來催生后期學(xué)習(xí)的動(dòng)力,只會(huì)強(qiáng)擼灰飛煙滅。你不從外圍看Linux,橫著看,豎著看,你是看不到Linux的真面目的。

橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同。

不識(shí)廬山真面目,只緣身在此山中。

據(jù)我個(gè)人所知,也有極少量的人,一開始就以情景分析的方法,逐行解釋代碼,最后也學(xué)有所成,但是這樣的人,都具有非凡的毅力,不是一般人可以去模仿的。

一般的人,類似我這樣的懶惰分子,需要用整體帶動(dòng)部分的方法。正如我們看一個(gè)別人的.c文件,你不可能傻到從第一行讀到最后一行。你肯定是先搞清楚這個(gè).c的整體功能,對(duì)外接口API,再深入到static的內(nèi)部函數(shù),由外及內(nèi),繼而由內(nèi)及外。

下面我們用一個(gè)球來比如Linux,最外圈的球是整體的Linux,球內(nèi)的小球是Linux的某個(gè)組件。最開始你這樣看Linux:

接下來你把其中的某些子系統(tǒng)放大,整個(gè)Linux這個(gè)氣球也隨著變大:

隨著掌握的越多,這個(gè)球越來越大:

然后,某個(gè)領(lǐng)域成為你的專業(yè)領(lǐng)域(比如你文件系統(tǒng)牛逼,比如你內(nèi)存優(yōu)化牛逼),這個(gè)球里面這個(gè)專業(yè)領(lǐng)域就凸起了:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1372

    瀏覽量

    40290
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11304

    瀏覽量

    209518
  • 源代碼
    +關(guān)注

    關(guān)注

    96

    文章

    2945

    瀏覽量

    66748

原文標(biāo)題:宋寶華: 迭代螺旋法——關(guān)于Linux學(xué)習(xí)方法的血淚建議

文章出處:【微信號(hào):LinuxDev,微信公眾號(hào):Linux閱碼場(chǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    高效學(xué)習(xí)Linux內(nèi)核

    高效學(xué)習(xí)Linux內(nèi)核
    發(fā)表于 08-19 23:43

    自學(xué)Linux有哪些階段?

    `自學(xué)Linux有哪些階段?作為一個(gè)新人在自學(xué)Linux的過程中,很容易陷入很多學(xué)習(xí)誤區(qū),這里給大家分享一個(gè)Linux
    發(fā)表于 10-15 14:22

    嵌入式系統(tǒng)基礎(chǔ)階段學(xué)習(xí)建議

    什么是 Linux 內(nèi)核》· 《嵌入式 Linux 框架的理解》8、Linux應(yīng)用開發(fā)· 《韋東山嵌入式 Linux 應(yīng)用開發(fā)完全手冊(cè)》·
    發(fā)表于 10-29 07:36

    Linux內(nèi)核教程

    本章學(xué)習(xí)目標(biāo)掌握LINUX內(nèi)核版本的含義理解并掌握進(jìn)程的概念掌握管道的概念及實(shí)現(xiàn)了解內(nèi)核的數(shù)據(jù)結(jié)構(gòu)了解LINUX
    發(fā)表于 04-10 16:59 ?0次下載

    Linux內(nèi)核學(xué)習(xí)起步課件

    Linux內(nèi)核學(xué)習(xí)起步介紹
    發(fā)表于 04-10 17:22 ?0次下載

    Linux 內(nèi)核源代碼

    Linux 內(nèi)核源代碼 實(shí)模式setup階段setup用于體系結(jié)構(gòu)相關(guān)的硬件初始化工作,在arch目錄中的各個(gè)系統(tǒng)結(jié)構(gòu)的平臺(tái)相關(guān)都有類似功能的代碼。在32位的x86平臺(tái)中,s
    發(fā)表于 02-10 13:45 ?28次下載

    新手Linux內(nèi)核學(xué)習(xí)起步

    新手Linux內(nèi)核學(xué)習(xí)起步
    發(fā)表于 10-27 16:10 ?13次下載
    新手<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>學(xué)習(xí)</b>起步

    linux內(nèi)核是什么_linux內(nèi)核學(xué)習(xí)路線

    Linux內(nèi)核是一個(gè)操作系統(tǒng)(OS)內(nèi)核,本質(zhì)上定義為類Unix。它用于不同的操作系統(tǒng),主要是以不同的Linux發(fā)行版的形式。Linux
    發(fā)表于 09-16 15:49 ?2651次閱讀

    Linux內(nèi)核到底是什么應(yīng)該如何學(xué)習(xí)

    Linux可以說是近期非常火的了,有的人想學(xué)習(xí)linux內(nèi)核,那他到底是什么呢?
    發(fā)表于 10-06 18:02 ?1911次閱讀

    最硬核的Linux內(nèi)核文章

    來源 :頭條號(hào)@Linux學(xué)習(xí)教程,冰凌塊兒 01 前言 本文主要講解什么是Linux內(nèi)核,以及通過多張圖片展示Linux
    的頭像 發(fā)表于 10-19 17:46 ?2122次閱讀
    最硬核的<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>文章

    Linux內(nèi)核學(xué)習(xí)的環(huán)境搭建和內(nèi)核編譯

    一、linux內(nèi)核學(xué)習(xí)之一:環(huán)境搭建--安裝Debian7.3 本系列文章假設(shè)讀者已對(duì)linux有一定的了解,其實(shí)學(xué)習(xí)
    的頭像 發(fā)表于 01-02 18:01 ?2114次閱讀

    Linux內(nèi)核開發(fā)框架學(xué)習(xí)資料匯總

    Linux內(nèi)核開發(fā)框架學(xué)習(xí)資料匯總
    發(fā)表于 06-17 09:29 ?24次下載

    嵌入式Linux內(nèi)核驅(qū)動(dòng)開發(fā)學(xué)習(xí)路線圖

    嵌入式Linux內(nèi)核驅(qū)動(dòng)開發(fā)學(xué)習(xí)路線圖(嵌入式開發(fā)軟件工程師)-嵌入式Linux內(nèi)核驅(qū)動(dòng)開發(fā)學(xué)習(xí)
    發(fā)表于 07-30 13:51 ?12次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>驅(qū)動(dòng)開發(fā)<b class='flag-5'>學(xué)習(xí)</b>路線圖

    如何開啟你的Linux內(nèi)核學(xué)習(xí)之路 論學(xué)習(xí)操作系統(tǒng)(Linux內(nèi)核)的重要性

    一、學(xué)習(xí)操作系統(tǒng)(Linux內(nèi)核)的重要性 為什么要學(xué)習(xí)Linux內(nèi)核,這個(gè)問題我相信很多人都不
    發(fā)表于 05-06 22:15 ?1919次閱讀
    如何開啟你的<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b><b class='flag-5'>學(xué)習(xí)</b>之路 論<b class='flag-5'>學(xué)習(xí)</b>操作系統(tǒng)(<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>)的重要性

    學(xué)習(xí)linux內(nèi)核的一些建議

    學(xué)習(xí)linux內(nèi)核,這個(gè)可不像學(xué)一門語言,c或者java一個(gè)月或者3月你就能精通掌握。學(xué)習(xí)linux內(nèi)核
    發(fā)表于 05-07 15:20 ?623次閱讀
    <b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>linux</b><b class='flag-5'>內(nèi)核</b>的一些建議