Linux内核入门之路 (非广告)
筆者從開始接觸 Linux 內核應該有 4 ~ 5 年了,雖然不敢說非常了解 Linux 內核,但起碼也有了點眉目。所以,本文主要想分享一下我的 Linux 內核入門之路,如果對大家有幫助的話,希望能夠轉發一下,幫助更多想學習內核的同學們。
我的“碼農”之路
本人大學的專業并不是計算機系,而是應用化學。在機緣巧合下接觸到 PHP(那時候 PHP 還是挺火的),開始著迷地學習 PHP,基本上把圖書館所有 PHP 的書籍都借回來了。
由于不是計算機專業,所以只能在課堂偷偷看 PHP 的書(也不算偷看吧,因為根本沒人會關注,哈哈)。并且開始自己寫一些留言板、小型論壇、博客之類的網站(那時是08-09年的時候,現在論壇好像消失了),也開始接觸 MySQL 數據庫。
當然,寫些小論壇是不能滿足我的,所以不知天高地厚的我,開始看 PHP 是怎樣實現的。但一看發現,全部都是 .c 的文件,我以前接觸的都是 .php 的,所以完全看不懂。Google一下才發現(那時還沒被墻的),原來是 .c 的文件是使用 C 語言編寫的。
OK,不懂就學咯,還好那時是大四,比較閑。就去圖書館借了本經典的譚浩強版《C語言程序設計》,現在想起來,雖然這本書很多小錯誤,但還算比較通俗,不像C語言經典之作 K&R 版本的《C程序設計語言》那么難懂。
PS:我覺得是不是好書的標準是,你能不能從中學習到知識。所以對我來說,譚浩強版的《C語言程序設計》還算是本好書。
C 語言學起來不難,但用起來真的 TMD 難(So!PHP 是世界上最好的語言!!!),不過我學 C 語言也只是為了能看懂 PHP 源碼。對 C 語言有了一點基礎后,就開始看 PHP 的源碼,最開始看的是 PHP 3.0 版本。其實那時候還是看不懂的,而且資料少之又少。
我也忘記是怎么開始看懂的,反正有一天突然好像開竅一樣看懂了(難道是頓悟?),接著開始看 PHP 4.0 版本的源碼。
這就開始我的程序員(碼農)生涯...
畢業后一直從事 PHP 的開發,由于不是計算機專業,所以剛開始找工作挺困難的,只能從小公司做起(俗話說,萬事開頭難嘛)。
2011 年的時候,那時剛畢業2年,就開始不知天高地厚的想分享自己的經驗(年輕人就是不懂事啊),但想起來當時好像也沒什么經驗分享... 就邀約了帥氣的白菜兄寫了本 PHP 的書籍《PHP核心技術與最佳實踐》。
為什么要學 Linux 內核?
說了那么多廢話,現在講講本人為什么要學 Linux 內核吧。因為第一家公司是家小公司,所以很多事情都要自己去干,比如:編譯安裝 PHP 環境,安裝 MySQL 數據庫等(因為當時沒有云平臺,都是自己搭建機器的)。
這樣就開始接觸到 Linux 系統,雖然大學也自己搗蛋過 Linux,但也沒怎么深入去了解。剛開始使用 Linux 的時候,用慣 Windows 的我覺得太 TMD 難用了。不過因為工作需要沒辦法,硬著頭皮上。
用著用著,就出現很多奇怪的問題,比如文件系統的 inode 不足(當時想,這是什么鬼...)。
好奇心的驅使下,又是不知天高地厚的我下載了最新版本的 Linux 源代碼(當時應該是 3.0 吧)。解壓后一看,傻眼了,簡直是天書一樣(因為當時也看了很長一段時間的 PHP 源碼,對 C 語言也有比較深的認識),這還是我認識的 C 語言嗎?所以,不得不放棄。
不過,懷著尋根問底的信念,我還是重新開始學習 Linux 內核。下面介紹一下我的學習之路。
Linux 內核入門之路
有了上次的經驗,這次我就從低版本的 Linux 學起,也就是 Linux 0.12。從 0.12 開始學起是因為 0.12 版本有本不錯的書籍介紹,就是《Linux內核完全剖析》,下面就是它的封面:
其實剛開始看這本書的時候也有難度,主要是本人不是計算機專業,所以硬件相關的知識面比較差。另外,內核充斥著大量的匯編代碼,所以必須要先了解匯編語言。
直到發現《x86匯編語言-從實模式到保護模式》這本書,我才開始慢慢了解操作系統的原理,封面如下:
這本書解開我很多迷霧,比如實模式和保護模式,虛擬內存與物理內存映射等。這本書雖然非常好,但有個問題,就是 Linux 使用的是 AT&T 風格的匯編,而這本書介紹的是 Intel 風格的匯編。所以,要看內核前,最好先了解下 AT&T 風格的匯編,網上也挺多資料。
所以,我建議先看完《x86匯編語言-從實模式到保護模式》這本,然后再看《Linux內核完全剖析》,那就基本能看懂 Linux 0.12 的源代碼了,看懂 Linux 0.12 就算是 Linux 內核的入門了。
Linux 內核進階之路
看懂 Linux 0.12 后,就可以開始看高版本的內核了。但在看高版本的內核之前,最好先了解下現代 Linux 的設計,所以我推薦下面這本書《Linux內核設計與實現》:
這本書介紹的是 Linux 2.6 版本,比較簡單,而且沒有過多的展示代碼。但缺點就是,只是大概介紹 Linux 的設計,沒有很詳細的分析,不過作為入門是個不錯的選擇。
然后就是看 Linux 內核最經典的書籍:《深入理解Linux內核》。
這本書是學習內核必看的書籍,它非常詳細的分析了 Linux 內核的原理和實現,而且譯者是在 Linux 內核方面很有建樹的“陳莉君”老師,翻譯質量不錯。這本書也是以 Linux 2.6 作為分析對象的,看完這本書,就可以直接去看 Linux 代碼了。
還有嗎?
看完上面這 4 本書后,對內核也有不錯的認識了,當然最重要還是要多看內核源碼。如果看完上面這些書,還是覺得不是太懂,那么就要祭出神器了。就是下面這本:
為什么說這本書是神器?因為這本書是我看過分析內核最詳細的書籍,詳細到你會覺得啰嗦。但缺點就是,使用的 Linux 版本太低(2.4.0),還有就是配圖有點少。
除了上面這本,我還要推薦一下《深入Linux內核架構》這本書:
這本書分析比較詳細,而且版本也相對較高,這本書我覺得作為選讀吧,不看也沒什么關系,可以直接看 Linux 源碼。
最后說說
Linux 內核的參考書就大概是上面這些了,當然還有很多其他的書籍,但我認為看完上面這些,再直接看源碼就好了,畢竟看源碼才能真正理解 Linux。
我們來總結一下讀上面這些書的順序:
格拉德威爾在《異類》一書中指出:人們眼中的天才之所以卓越非凡,并非天資超人一等,而是付出了持續不斷的努力,1萬小時的錘煉是任何人從平凡變成世界級大師的必要條件。
所以,不是天賦異稟的話,還是好好遵從“1萬小時定律”吧。
另外,如果你是剛入門的同學,建議把本文收藏起來,然后按照這個學習路徑來學習,我覺得一定能學會 Linux 內核的。
那么,學習 Linux 內核有什么用途?最明顯的就是面試時可以裝下逼吧,還可以在工作中解決一些奇怪的內核問題。
推薦閱讀:
專輯|Linux文章匯總
專輯|程序人生
專輯|C語言
我的知識小密圈
關注公眾號,后臺回復「1024」獲取學習資料網盤鏈接。
歡迎點贊,關注,轉發,在看,您的每一次鼓勵,我都將銘記于心~
嵌入式Linux
微信掃描二維碼,關注我的公眾號
總結
以上是生活随笔為你收集整理的Linux内核入门之路 (非广告)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sklearn 中的 Iris 数据集
- 下一篇: kuangbin专题 专题1 简单搜索