Linux核心原始碼的閱讀及相關工具介紹)

來源:互聯網
上載者:User

轉寄自:http://linux.sheup.com/linux/40/linux30708.htm

                http://www.cnblogs.com/BloodAndBone/archive/2010/12/01/1893402.html

 

 

隨著Linux的逐步普及,現在有不少人對於Linux的安裝及設定已經比較熟悉了。與Linux 的蓬勃發展相適應,想深入瞭解Linux的也越來越多。而要想深入瞭解Linux,就需要閱讀和分析linux核心的原始碼。

  Linux的核心原始碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是核心原始碼。
另外還可以從互連網上下載,解壓縮後檔案一般也都位於linux目錄下。核心原始碼有很多版本,目前最新的穩定版是2.2.14。

  許多人對於閱讀Linux核心有一種恐懼感,其實大可不必。當然,象Linux核心這樣大而複雜的系統代碼,閱讀起來確實有很多困難,但是也不
象想象的那麼高不可攀。只要有恒心,困難都是可以克服的。也不用擔心水平不夠的問題,事實上,有很多事情我們不都是從不會到會,邊幹邊學的嗎?

  任何事情做起來都需要有方法和工具。正確的方法可以指導工作,良好的工具可以事半功倍。對於Linux 核心原始碼的閱讀也同樣如此。下面我就把自己閱讀核心原始碼的一點經驗介紹一下,最後介紹Window平台下的一種閱讀工具。

  對於原始碼的閱讀,要想比較順利,事先最好對原始碼的知識背景有一定的瞭解。對於linux核心原始碼來講,我認為,基本要求是:1、作業系統
的基本知識;2、對C語言比較熟悉,最好要有組合語言的知識和GNU
C對標準C的擴充的知識的瞭解。另外在閱讀之前,還應該知道Linux核心原始碼的整體分布情況。我們知道現代的作業系統一般由進程管理、記憶體管理、檔案
系統、驅動程式、網路等組成。看一下Linux核心原始碼就可看出,各個目錄大致對應了這些方面。Linux核心原始碼的組成如下(假設相對於linux
目錄):

  arch 這個子目錄包含了此核心原始碼所支援的硬體體繫結構相關的核心代碼。如對於X86平台就是i386。

  include 這個目錄包括了核心的大多數include檔案。另外對於每種支援的體繫結構分別有一個子目錄。

  init 此目錄包含核心啟動代碼。

  mm 此目錄包含了所有的記憶體管理代碼。與具體硬體體繫結構相關的記憶體管理代碼位於arch/*/mm目錄下,如對應於X86的就是arch/i386/mm/fault.c 。

  drivers 系統中所有的裝置驅動都位於此目錄中。它又進一步劃分成幾類裝置驅動,每一種也有對應的子目錄,如音效卡的驅動對應於drivers/sound。

  ipc 此目錄包含了核心的進程間通訊代碼。

  modules 此目錄包含已建好可動態載入的模組。

  fs Linux支援的檔案系統代碼。不同的檔案系統有不同的子目錄對應,如ext2檔案系統對應的就是ext2子目錄。

  kernel 主要核心代碼。同時與處理器結構相關代碼都放在arch/*/kernel目錄下。

  net 核心的網路部分代碼。裡面的每個子目錄對應於網路的一個方面。

  lib 此目錄包含了核心的庫代碼。與處理器結構相關庫代碼被放在arch/*/lib/目錄下。

  scripts此目錄包含用於配置核心的指令檔。

  Documentation 此目錄是一些文檔,起參考作用。

  清楚了原始碼的結構組成後就可以著手閱讀。對於閱讀方法或者說順序,有所謂的縱向與橫向之分。所謂縱向就是順著程式的執行順序逐步進行;所謂橫
向,就是分模組進行。其實他們之間不是絕對的,而是經常結合在一起進行。對於Linux原始碼來講,啟動的代碼就可以順著linux的啟動順序一步一步
來,它的大致流程如下(以X86平台為例):

  ./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->.
/larch/i386/kernel/head.S-->./init/main.c中的start_kernel()。而對於象記憶體管理等部
分,則可以單獨拿出來進行閱讀分析。我的體會是:開始最好按順序閱讀啟動代碼,然後進行專題閱讀,如進程部分,記憶體管理部分等。在每個功能函數內部應該一
步步來。實際上這是一個反覆的過程,不可能讀一遍就理解。

  俗話說:“工欲善其事,必先利其器”。
閱讀象Linux核心代碼這樣的複雜程式令人望而生畏。它象一個越滾越大的雪球,閱讀核心某個部分經常要用到好幾個其他的相關檔案,不久你將會忘記你原來
在幹什麼。所以沒有一個好的工具是不行的。由於大部分愛好者對於Window平台比較熟悉,並且還是常用Window系列平台,所以在此我介紹一個
Window下的一個工具軟體:Source
Insight。這是一個有30天免費期的軟體,可以從www.sourcedyn.com下載。安裝非常簡單,和別的安裝一樣,雙擊安裝檔案名稱,然後按
提示進行就可以了。安裝完成後,就可啟動該程式。這個軟體使用起來非常簡單,是一個閱讀原始碼的好工具。它的使用簡單介紹如下:先選擇Project菜單
下的new,建立一個工程,輸入工程名,接著要求你把欲讀的原始碼加入(可以整個目錄加)後,該軟體就分析你所加的原始碼。

分析完後,就可以進行閱讀了。對於開啟的閱讀檔案,如果想看某一變數的定義,先把游標定位於該變數,然後點擊工具條上的相應選項,該變數的定義就顯示出
來。對於函數的定義與實現也可以同樣操作。別的功能在這裡就不說了,有興趣的朋友可以裝一個Source
Insight,那樣你閱讀原始碼的效率會有很大提高的。怎麼樣,試試吧!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.