新手看linux kernel,求推薦版本號(是看0.xx,還是看現在的3.xx)以及相關書籍?


一名phper,有一些C語言基礎,一年前開始想了解內核,近期終於告一階段了,分享一下.

剛開始的時候也糾結看哪個版本,不過簡單搜索了解下之後,發現2.6之前的版本都比較老了,2.6的版本和現在的kernel相對還是比較接近的.所以就選了2.6的最高版本2.6.39.

事實也證明這個版本確實還可以,kernel的啟動過程和我使用的Ubuntu 12.04基本一致,這在學習的初期幫助還是很大的,因為和現實離的近.

參考書主本有兩本:

  1. Linux Kernel Development (Robert Love)
  2. Understanding the Linux Kernel (Daniel P. Bovet, Marco Cesati)

這兩本書說是涵蓋了kernel 2.6, 但也有些過時了. 不過應該找不出更新的參考書了.

實際上除了選kernel版本外,還要選擇CPU架構,我更多的做php開發,所以選擇了x86_64.

不過上邊兩本書講是的x86的,湊和著看吧.

學習過程中一個很深的體會是,基礎知識準備不到位的話,看也看不懂.

還有就是學習kernel是個長期的事,想著兩三個月就結束的,恐怕是天才,所以記錄學習筆記很重要.

在開始看kernel源碼前,建議先做下邊幾件事:

1. 學習彙編

2. 寫一個bootloader

3. 寫一個x86的toy OS

現在的linux kernel自身已經不能載入啟動了,必須藉助bootloader將自己載入到內存,比如GRUB,所以了解bootloader是很有用的.

CPU加電啟動後,要從Real Mode進入Protected Mode,再進入Long Mode,最後進入Long Mode的64-bit mode,自己寫個toy OS的話一是先和操作系統混個臉熟,二是了解一下Protected Mode.

看kenerl源碼的話,那就沒的說了,一點點看就是了. 看一點補一點相關的背景知識.

這是我做的筆記,可以參考下: http://heguangyu5.github.io/my-linux/html/index.html


如果lz只是想寫寫作業、整整業餘愛好,隨便看。

如果lz要準備真刀真槍幹活,就把那些老掉牙的版本扔了。因為花了大量的時間學舊內核,卻最終發現新內核已經改得一塌糊塗,一下子就丟了很大一部分經驗值,實在不值得。

包括ULK3,大概是2.6.4 - 2.6.10的內核吧,都已經顯老了。諸如O(1)調度器什麼的,跟不上時代的腳步了。

推薦書籍:

lkd3 Linux內核設計與實現(原書第3版)(china-pub首發)

此書應該是公認的入門經典了。建議看到如同通俗小說一樣簡單的地步。

Linux內核編程(china-pub首發) 也是入門的

深入Linux內核架構(全球開源社區集體智慧結晶,領略Linux內核的絕美風光)

這本接ULK3的班,內核新聖經。


如果要基於新的內核做驅動開發之類,那就看新的吧;如果是想把操作系統各個細節在比較短的時間內通讀一遍,那麼建議看Linux 0.11,可以參考http://oldlinux.org 以及 我們開放的 5 分鐘實驗環境:http://tinylab.org/linux-0.11-lab,支持最新Ubuntu/Mac OS X/Qemu/Bochs等。

演示視頻:

1. 基本用法

http://showterm.io/ffb67385a07fd3fcec182

http://showdesk.io/50bc346f53a19b4d1f813b428b0b7b49

2. 添加新的系統調用

http://showterm.io/4b628301d2d45936a7f8a

如果想直接搞個在線Linux 0.11實驗環境,這裡走起:

https://weidian.com/item.html?itemID=1487448443share_id=nullwfr=wxifr=itemdetailcode=061QM9AN0wrN662G6yyN0OMOzN0QM9Acstate=H5WXshare

** 在線實驗地址(點擊Sign up可獲取賬號)**

http://tinylab.cloud:6080

有更多相關問題歡迎關注微博和微信公眾號:泰曉科技


The Linux Programming Interface: A Linux and UNIX System Programming Handbook

How Linux Works: What Every Superuser Should Know

Linux Kernel Development (3rd Edition)


以前我也和你一樣糾結,後來我就專心看2.6了,0.x的和實際的差太遠,高版本的工業界還沒用上,都是紅帽5或者紅帽6。


聽說NetBSD的源碼寫得工整,值得一試


趙炯的《Linux內核完全剖析》,這本書基於0.12內核,3.xx內核代碼量不知道翻了多少倍了,頭髮白了也看不完,能把0.12搞懂了,再看新內核就不是問題了


個人覺得《Linux內核設計與實現》這本書非常好,書中主要講原理,多是些代碼片段,無論是研究內核還是操作系統都是一本經典書籍,但是略有難度。

LS提到的那本書沒看過,但也聽說過,0.12的內核代碼比較少,但是很多技術已經不再使用,作為入門書籍也算不錯的選擇。

還有很多著名的Linux大部頭的書籍,看起來比較惱火,建議先從簡單的部分看起。


-

推薦《深入理解linux內核架構》,不解釋。

linux內核代碼還是看新的好,當然有人會說新的內核代碼過於龐大。

但是本身內核就是在不斷發展的,現在還看那些過時的東西實屬浪費生命。

另外,最好是有針對性的學。

譬如想了解進程調度機制,就仔細研究進程調度;

想了解內存管理機制,就看內存管理;

想了解netfilter機制,就看netfilter。

專而精,切勿博而雜。

-


我覺得大部分情況下你應該從低版本看起。

不管你有沒有書做指導,高版本的代碼對於絕大多數人來說都是根本看不懂,或者完全不知道為什麼。所以看了基本沒有什麼意義。

無非就是書里說這個文件中有這麼一段代碼,對對對,該文件除去90%的代碼後是有這麼一段,為什麼還有其它90%的代碼卻無法理解。

我個人覺得了解來龍去脈才能更好的理解代碼。


如果你只想學習操作系統,建議看低版本,如果你工作可以需要接觸到內核開發或者需要深入了解內核具體行為裡面的話,建議看比較高版本。


正在看linux內核代碼,趙炯的《Linux內核完全剖析》講得很細,不過非常晦澀,很難懂(也可能是我太笨。。。)。《Linux內核設計與實現》就好一些,注重原理講解,畢竟是大神啊,但是細節上有些不清楚,可能是書寫的太薄了吧。《Linux內核情景分析》就非常詳細。可以跟《Linux內核設計與實現》對照著看。我就是這麼看的,不知道這樣合理不。


Linux0.11內核剖析~趙炯的那本~

挑著看~


推薦閱讀:

請推薦關於二戰時期納粹德國、集中營、猶太人等方面的書籍?
最近有什麼想推薦給別人的書嘛?
請問有那些關於周恩來的書對他的描述是比較客觀全面的?不是只說正面的東西。
《 雪中悍刀行》哪一句話讓你泣不成聲亦或者熱血沸騰?
正版電子書什麼時候才能對讀者免費?

TAG:書籍 | Linux | 計算機 | 計算機科學 | Linux內核 |