1. gzyueqian
      13352868059

      Linux內(nèi)核源代碼的閱讀及相關(guān)工具介紹

      更新時(shí)間: 2006-03-02 10:26:52來(lái)源: 粵嵌教育瀏覽量:2508

        隨著Linux的逐步普及,現(xiàn)在有不少人對(duì)于Linux的安裝及設(shè)置已經(jīng)比較熟悉了。與Linux 的蓬勃發(fā)展相適應(yīng),想深入了解Linux的也越來(lái)越多。而要想深入了解Linux,就需要閱讀和分析Linux內(nèi)核的源代碼。

        Linux的內(nèi)核源代碼可以從很多途徑得到。一般來(lái)講,在安裝的Linux系統(tǒng)下,/usr/src/Linux目錄下的東西就是內(nèi)核源代碼。另外還可以從互連網(wǎng)上下載,解壓縮后文件一般也都位于Linux目錄下。內(nèi)核源代碼有很多版本,目前的穩(wěn)定版是2.2.14。

        許多人對(duì)于閱讀Linux內(nèi)核有一種恐懼感,其實(shí)大可不必。當(dāng)然,象Linux內(nèi)核這樣大而復(fù)雜的系統(tǒng)代碼,閱讀起來(lái)確實(shí)有很多困難,但是也不象想象的那么高不可攀。只要有恒心,困難都是可以克服的。也不用擔(dān)心水平不夠的問(wèn)題,事實(shí)上,有很多事情我們不都是從不會(huì)到會(huì),邊干邊學(xué)的嗎?

        任何事情做起來(lái)都需要有方法和工具。正確的方法可以指導(dǎo)工作,良好的工具可以事半功倍。對(duì)于Linux 內(nèi)核源代碼的閱讀也同樣如此。下面我就把自己閱讀內(nèi)核源代碼的一點(diǎn)經(jīng)驗(yàn)介紹一下,介紹Window平臺(tái)下的一種閱讀工具。

        對(duì)于源代碼的閱讀,要想比較順利,事先對(duì)源代碼的知識(shí)背景有一定的了解。對(duì)于linux內(nèi)核源代碼來(lái)講,我認(rèn)為,基本要求是:1、操作系統(tǒng)的基本知識(shí);2、對(duì)C語(yǔ)言比較熟悉,要有匯編語(yǔ)言的知識(shí)和GNU C對(duì)標(biāo)準(zhǔn)C的擴(kuò)展的知識(shí)的了解。另外在閱讀之前,還應(yīng)該知道Linux內(nèi)核源代碼的整體分布情況。我們知道現(xiàn)代的操作系統(tǒng)一般由進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、驅(qū)動(dòng)程序、網(wǎng)絡(luò)等組成。看一下Linux內(nèi)核源代碼就可看出,各個(gè)目錄大致對(duì)應(yīng)了這些方面。Linux內(nèi)核源代碼的組成如下(假設(shè)相對(duì)于linux目錄):

        arch 這個(gè)子目錄包含了此核心源代碼所支持的硬件體系結(jié)構(gòu)相關(guān)的核心代碼。如對(duì)于X86平臺(tái)就是i386。

        include 這個(gè)目錄包括了核心的大多數(shù)include文件。另外對(duì)于每種支持的體系結(jié)構(gòu)分別有一個(gè)子目錄。

        init 此目錄包含核心啟動(dòng)代碼。

        mm 此目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼位于arch/*/mm目錄下,如對(duì)應(yīng)于X86的就是arch/i386/mm/fault.c 。

        drivers 系統(tǒng)中所有的設(shè)備驅(qū)動(dòng)都位于此目錄中。它又進(jìn)一步劃分成幾類設(shè)備驅(qū)動(dòng),每一種也有對(duì)應(yīng)的子目錄,如聲卡的驅(qū)動(dòng)對(duì)應(yīng)于drivers/sound。

        ipc 此目錄包含了核心的進(jìn)程間通訊代碼。

        modules 此目錄包含已建好可動(dòng)態(tài)加載的模塊。

        fs Linux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄對(duì)應(yīng),如ext2文件系統(tǒng)對(duì)應(yīng)的就是ext2子目錄。

        kernel 主要核心代碼。同時(shí)與處理器結(jié)構(gòu)相關(guān)代碼都放在arch/*/kernel目錄下。

        net 核心的網(wǎng)絡(luò)部分代碼。里面的每個(gè)子目錄對(duì)應(yīng)于網(wǎng)絡(luò)的一個(gè)方面。

        lib 此目錄包含了核心的庫(kù)代碼。與處理器結(jié)構(gòu)相關(guān)庫(kù)代碼被放在arch/*/lib/目錄下。

        scripts此目錄包含用于配置核心的腳本文件。

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

        清楚了源代碼的結(jié)構(gòu)組成后就可以著手閱讀。對(duì)于閱讀方法或者說(shuō)順序,有所謂的縱向與橫向之分。所謂縱向就是順著程序的執(zhí)行順序逐步進(jìn)行;所謂橫向,就是分模塊進(jìn)行。其實(shí)他們之間不是的,而是經(jīng)常結(jié)合在一起進(jìn)行。對(duì)于Linux源代碼來(lái)講,啟動(dòng)的代碼就可以順著linux的啟動(dòng)順序一步一步來(lái),它的大致流程如下(以X86平臺(tái)為例):

        ./larch/i386/boot/bootSect.S-->./larch/i386/boot/setup.S-->./larch/i386/kernel/head.S-->./init/main.c中的start_kernel()。而對(duì)于象內(nèi)存管理等部分,則可以單獨(dú)拿出來(lái)進(jìn)行閱讀分析。我的體會(huì)是:開始按順序閱讀啟動(dòng)代碼,然后進(jìn)行專題閱讀,如進(jìn)程部分,內(nèi)存管理部分等。在每個(gè)功能函數(shù)內(nèi)部應(yīng)該一步步來(lái)。實(shí)際上這是一個(gè)反復(fù)的過(guò)程,不可能讀一遍就理解。

        俗話說(shuō):“工欲善其事,必先利其器”。 閱讀象Linux核心代碼這樣的復(fù)雜程序令人望而生畏。它象一個(gè)越滾越大的雪球,閱讀核心某個(gè)部分經(jīng)常要用到好幾個(gè)其他的相關(guān)文件,不久你將會(huì)忘記你原來(lái)在干什么。所以沒(méi)有一個(gè)好的工具是不行的。由于大部分愛(ài)好者對(duì)于Window平臺(tái)比較熟悉,并且還是常用Window系列平臺(tái),所以在此我介紹一個(gè)Window下的一個(gè)工具軟件:Source Insight。這是一個(gè)有30天免費(fèi)期的軟件,可以從www.sourcedyn.com下載。安裝非常簡(jiǎn)單,和別的安裝一樣,雙擊安裝文件名,然后按提示進(jìn)行就可以了。安裝完成后,就可啟動(dòng)該程序。這個(gè)軟件使用起來(lái)非常簡(jiǎn)單,是一個(gè)閱讀源代碼的好工具。它的使用簡(jiǎn)單介紹如下:先選擇Project菜單下的new,新建一個(gè)工程,輸入工程名,接著要求你把欲讀的源代碼加入(可以整個(gè)目錄加)后,該軟件就分析你所加的源代碼。分析完后,就可以進(jìn)行閱讀了。對(duì)于打開的閱讀文件,如果想看某一變量的定義,先把光標(biāo)定位于該變量,然后點(diǎn)擊工具條上的相應(yīng)選項(xiàng),該變量的定義就顯示出來(lái)。對(duì)于函數(shù)的定義與實(shí)現(xiàn)也可以同樣操作。別的功能在這里就不說(shuō)了,有興趣的朋友可以裝一個(gè)Source Insight,那樣你閱讀源代碼的效率會(huì)有很大提高的。怎么樣,試試吧!

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲欧美日韩文无线码 | 亚洲性爱免费视频网 | 亚洲а∨天堂在线网站 | 日本精品一区二区视频 | 亚洲国产综合精品二区 | 日韩欧美视频在线 |