1. 程式人生 > >用Source Insight開啟linux核心原始碼

用Source Insight開啟linux核心原始碼

用Source Insight開啟linux核心原始碼

2008-01-09 19:06

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()。而對於象記憶體管理等部分,則可以單獨拿出來進行閱讀分析。我的體會是:開始最好按順序閱讀啟動程式碼,然後進行專題閱讀,如程序部分,記憶體管理部分等。在每個功能函式內部應該一步步來。實際上這是一個反覆的過程,不可能讀一遍就理解。     

安 裝Source Insight並啟動程式,可以進入圖1介面。在工具條上有幾個值得注意的地方,如圖所示,圖中內凹左邊的是工程按鈕,用於顯示工程視窗的情況;右邊的那個按鈕按下去將會顯示一個視窗,裡邊提供游標所在的函式體內對其他函式的呼叫圖,通過點選該窗體裡那些函式就可以進入該函式所在的地方。


圖1 Source Insight介面圖

由 於Source Insight實質上是一個支援多種開發語言(java,c ,c++等等)的編輯器,只不過由於其查詢、定位、彩色顯示等功能的強大,而被我們當成原始碼閱讀工具使用。所以,為了有效的閱讀源程式,首先必須選擇功能選單上的 “Project”選項的子選單“New Project”新建一個專案,專案名稱可以自由選定,當然也可以選擇刪除(Remove)一個專案。當刪除一個專案的時候,並不刪除原有的原始碼檔案, 只是將該軟體生成的那些工程輔助檔案刪除。設定之後,將會彈出一個對話方塊如圖2,接受預設選擇,如果,硬碟空間足夠,可以將第一個複選框選上,該選項將會需要與原始碼大致同等的空間來建立一個本地資料庫以加快查詢的速度。
圖2 工程設定

點 擊“OK”按鈕,接受選擇後,將會有一個新的對話方塊彈出,在這個對話方塊裡,可以選擇將要閱讀的檔案加入工程,一種方式是通過在File Name中輸入要閱讀原始碼檔案的名稱,點選“Add”按鈕將其加入,也可以通過其中“Add All”和“Add Tree”兩個按鈕可以將選中目錄的所有檔案加入到工程中,其中“Add All”選項會提示加入頂層檔案和遞迴加入所有檔案兩種方式,而“Add Tree”相當於“Add All”選項的遞迴加入所有檔案,可以根據需要使用,就我來說,更喜歡“Add Tree”一些。由於該程式採用了部分開啟檔案的方式,沒有用到的檔案不會開啟,所以,加入數千個檔案也不用擔心加入的檔案超出程式的所能容忍的最大值,我就是採用“Add Tree”的方式將Linux2.4核心的四千五百九十一個檔案加入的。
圖3 新增檔案

加入檔案後,點選一個檔案,可以出現使用介面,如圖4所示,其中,右邊的那個視窗(Linux Project,即工程視窗)預設按照字母順序列出當前工程中所有的檔案。
圖4 工作視窗

點 擊一個檔案就可以開啟該檔案,顯示如圖5所示,進入到右邊的那個視窗分別可以以檔案列表的方式,列出所有的檔案,每個窗體下邊有一排按鈕,左邊的視窗(21142.c)從左至右分別為:按字母順序排列所有標記、按照檔案中行數順序排列標記、按照型別排列標記、瀏覽本地檔案標記、標記視窗屬性。右邊的視窗(Linux Project)從左至右分別為:按字母順序檔案列表、顯示資料夾、按照檔案型別歸類檔案、全部檔案的所有標記列表、按照標記型別歸類標記、跳轉到定義處、顯示標記資訊、瀏覽工程標記、查詢函式呼叫、工程屬性,其中全部檔案的所有標記列表選項可能要一段時間抽取標記,同步到資料庫去,如果開始選擇了建立標記資料庫,將會在今後節省同步時間,最有用的莫過於瀏覽標記資訊和查詢函式呼叫,前者可以通過“Jump”按鈕在不同的地方查詢同樣的標誌,還可以通過 “Reference”按鈕結合後者進行全域性的標記查詢。
Reference 功能是Source Insight的特色之一,它可以在速度極快的在整個工程中找到所有的標記,並且在該行程式的前邊加上紅色箭頭的小按鈕連結上。圖6是一個 Reference搜尋後的結果,它可以有兩種模式,一種集中顯示結果,圖6顯示的就是這種模式,在這種模式下,可以通過前邊的紅色箭頭小按鈕進入另外一種模式,該標記的具體的所在處,也可以通過標記的具體所在處點選紅色箭頭小按鈕進入警種模式,還可以通過工具條上的兩個紅色小箭頭直接在第二種模式下前後移動,察看相應資訊。它的這個強大的功能使得閱讀Linux源程式有如神助。但是要注意的是,當進行了第二次“Reference”時,它會提示你將結果集附加在第一個結果集的後邊還是取代第一個結果集。如果選擇前者,不能對結果集根據前後兩次搜尋結果進行分類,然後在其子類裡進行移動,只能在整個結果集裡移動;如果,選擇後者,結果集將會被替換為第二次搜尋的結果,略微有些不方便。
圖6 Reference的搜尋結果

當 然,Source Insight 還提供了一些其他常見的便利。比如:右鍵選單幾乎包含了程式的所有功能,可以在編輯視窗為程式加上行號,還可以統計整個工程的程式行數,當然還有功能強大卻用不上自動完成功能,似乎連它的30天試用期也是別有用心――可以迫使你儘可能快速的閱讀源程式,其他一些技巧大家可以在使用過程中慢慢摸索。怎麼樣?愛好讀原始碼的朋友,不妨馬上去下載一個,去開始我們的Linux核心探險之旅吧

相關推薦

Source Insight開啟linux核心原始碼

用Source Insight開啟linux核心原始碼 2008-01-09 19:06 Linux的核心原始碼可以從很多途徑得到。一般來講,在安裝的linux系統下,/usr/src/linux目錄下的東西就是核心原始碼。另外還可以從互連網上下載,解壓縮後文件一般也都位於linux目錄下。核心原始碼有很多

Source Insight解析Linux核心的c.tom檔案內容

在C:\Documents and Settings\XXXX\My Documents\Source Insight目錄下的C.tom檔案中增加如下內容(需要不斷完善,碰到不能解析的巨集時新增進來)。 新增後,關閉SourceInsight工程,重新開啟,重新同步。 共享

Linux核心原始碼閱讀之開啟檔案篇

至此我們轉向最重要的程式碼__link_walk_path,該函式把傳進來的字串name,也就是使用者指定的路徑,按路徑分隔符分解成一系列小的component。比如使用者說,我要找/path/to/dest這個檔案,那麼我們的檔案系統就會按path,to,dest一個一個來找,知道最後一個分量是檔案或者查詢

Linux 核心原始碼(kernel source

檢視核心的發行版:uname -r(--kernel-release) $ uname -r 4.4.0-78-generic 核心原始碼所在的位置:/usr/src $ cd /usr/src

source insight 檢視linux原始碼

https://www.baidu.com/s?tn=baiduhome_pg&wd=source+insight+%E6%9F%A5%E7%9C%8Blinux%E6%BA%90%E7%A0%81&r

隨想錄(怎麼source insight閱讀kernel程式碼)

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】       大家都知道,linux kernel程式碼很多,檔案多,行數多。作為學習和開發來說,閱讀kernel程式碼常常又是我們必須要做的工作,那麼怎麼

編譯linux核心原始碼,安裝、刪除核心

Linux核心編譯、安裝流程 本部落格屬於原創,轉載請註明來源 此處只講linux核心編譯步驟至於安裝虛擬機器,安裝ubuntu作業系統請自行百度 環境資訊: Linux作業系統:ubuntu16.04 核心版本:4.15.0-29-generic 需要編譯和安裝的核心原始碼

linux核心原始碼分析-夥伴系統

之前的文章已經介紹了夥伴系統,這篇我們主要看看原始碼中是如何初始化夥伴系統、從夥伴系統中分配頁框,返回頁框於夥伴系統中的。   我們知道,每個管理區都有自己的夥伴系統管理屬於這個管理區的頁框,這也說明了,在夥伴系統初始化時,管理區必須要已經存在(初始化完成)

紅黑樹原理淺談(附Linux核心原始碼註釋)

引言:紅黑樹(英語:Red–black tree)是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。它是在1972年由魯道夫·貝爾發明的,他稱之為"對稱二叉B樹",它現代的名字是在Leo J. Guibas和Robert Sedgewick於19

《深入分析Linux核心原始碼》筆記:Linux 核心結構

一、Linux 核心在整個作業系統中的位置                      圖1 Linux核心在整個作業系統中的位置 1)使用者程序 使用者程序位於作業系統的最上層,它執行在作業系統上,成為一個作業系統中的一個程序。 2)系統呼叫介面 應用程式中,可以

《深入分析linux核心原始碼》筆記:linux 核心原始碼

一、Linux核心原始碼的結構 Linux 核心原始碼位於/usr/src/linux 目錄下。 include/目錄包含了建立核心程式碼時所需的大部分包含檔案,這個模組利用其他模組重建核心。 i

Linux核心原始碼分析--zImage出生實錄(Linux-3.0 ARMv7)

此文為兩年前為好友劉慶敏的書《嵌入式Linux開發詳解--基於AT91RM9200和Linux 2.6》中幫忙寫的章節的重新整理。如有雷同,純屬必然。經作者同意,將我寫的部分重新整理後放入blog中。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

windows中用Source Insight編輯Linux中的程式

1、在windows系統上右擊smb資料夾,選擇“對映網路驅動器”,然後選擇一個驅動器,點選“完成”,這樣在Windows系統 上的網路位置出現瞭如下內容: 這是要對映的Linux檔案。 2、給要對映的Linux檔案賦予許可權:   chmod -R 777 t

linux 核心原始碼打 patch

一、下載當前Linux核心對應的增量包 https://www.kernel.org/   我的核心當前版本是 4.9.135 最新的版本是4.9.145,中間有10個增量版本,需要全部下載,增量包不支援跨版本,只能從相鄰的版本打patch 增量包下載地址示例:

開啟linux核心自帶的模擬i2c-gpio模組過程

首先我們要知道核心的makefile是根據配置檔案,也就是kconfig來決定是否編譯一個檔案的。 如果沒有配置核心編譯它,就不會生成.o檔案。 自然就不會開啟這個模組了。 如下是Kconfig 檔

Linux核心原始碼情景分析-特殊檔案系統/proc

    由於proc檔案系統並不物理地存在於任何裝置上,它的安裝過程是特殊的。對proc檔案系統不能直接通過mount()來安裝,而要先由系統核心在核心初始化時自動地通過一個函式kern_mount()安裝一次,然後再由處理系統初始化的程序通過mount()安裝,實際上是"重

Linux核心原始碼目錄結構詳解

    3.1 Linux核心原始碼目錄如下:         /arch:目錄包括了所有和體系結構相關的核心程式碼。它下面的每一個子目錄都代表一種Linux支援的體系結構,例如i386就是Intel

Linux核心原始碼閱讀以及工具

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

編譯適配小米2S的CM Linux核心原始碼及問題解決

1. 下載核心原始碼 首先進入CM官網與小米2S相關的頁面: http://wiki.cyanogenmod.org/w/Aries_Info 在頁面中可以找到Kernel後面的連結: http://www.github.com/cyanogenmod/android_kerne