當前位置:成語大全網 - 古籍善本 - linux源代碼閱讀工具Linux源代碼閱讀

linux源代碼閱讀工具Linux源代碼閱讀

如何讀取linux內核代碼?

想要深入了解linux,需要閱讀和分析Linux內核的源代碼。Linux內核源代碼可以從多種途徑獲得。壹般來說可以在安裝的linux系統下查看。

Linux是開源的,那麽如何查看源代碼呢?

Linux內核源代碼可以從多種途徑獲得。壹般來說,在安裝的linux系統下,/usr/src/linux目錄下的就是內核源代碼。

如何查看linux內核源代碼?

壹般來說,內核源代碼位於/usr/src/Linux *目錄下。*.* (*.*代表內核版本,如2.4.23)在Linux系統中(如果沒有類似的目錄,是因為沒有安裝內核代碼)。此外,還可以從網上免費下載。註意,不要總以為目錄就是核心網絡部分代碼,每個子目錄對應網絡的壹個方面。

10.lib目錄包含核心庫代碼,但與處理器結構相關的庫代碼放在arch/*/lib/目錄中。

目錄11.scripts包含用於配置內核的腳本文件。

12.documentation目錄下是壹些文檔,是對每個目錄功能的具體描述。

通常,每個目錄中都有壹個. depend文件和壹個Makefile文件。這兩個文件是編譯時使用的輔助文件。仔細閱讀這兩個文件,對理解兩者之間的關系和依賴是很有幫助的。另外,有些目錄下有Readme文件,是這個目錄下文件的壹些描述,也有利於理解內核源代碼。

有縱向和橫向的閱讀方法或順序。所謂縱向,就是沿著程序的執行順序壹步步進行;所謂橫向,就是按模塊。它們經常結合在壹起進行。對於Linux啟動代碼,可以按照Linux的啟動順序壹步壹步的讀;對於內存管理之類的部分,可以單獨閱讀分析。其實這是壹個叠代的過程,不可能看壹遍就明白。

如何獲取linux下的命令源代碼?

命令的源代碼是以壹個軟件包為單位,放在壹個軟件包的源代碼中。如果妳想下載壹個命令的源代碼,妳必須下載這個命令所屬軟件包的源代碼。命令的源代碼在下載的源代碼的相關文件夾中。壹般是src文件夾,對應的主文件名是cmd.c,其中cmd是詳細的命令,比如ls命令的主程序文件是ls.c

因為在不同的Linux發行版上。源代碼不是以同樣的方式獲得的。所以以下面兩個常用的Linux發行版Ubuntu和CentOS為例來說明。

1,在Ubuntu中獲取系統命令源代碼的方法

以32位Ubuntu14.04下獲取的ls命令源代碼為例,可以使用以下方法下載源代碼:

1)使用哪個命令查看ls命令的位置,如下所示:

哪個#輸出:/bin/ls

2)使用dpkg命令查詢ls命令所屬的包。例如,以下內容:

dpkg-S/bin/ls # Output:coreutils:/bin/ls

3)使用apt-get命令下載ls命令所在包的源代碼。例如,以下內容:

apt-getsourcecoreutils

註意:

1)使用dpkg時。如果有錯誤。您可以使用sudo命令以root權限運行它。

2)將使用apt-getsource下載的源代碼保存到當前文件夾。

。另外,當我們知道命令屬於哪個包的時候,也可以從相應的官網下載。

2.CentOS中獲取系統命令源代碼的方法。

以32位CentOS6.6下獲取的ls命令源代碼為例,可以使用以下方法下載源代碼:

1)配置源代碼。

在CentOS中,源的配置文件是:/etc/yum . repos . d/CentOS-base . reposo,更改此文件需要root權限。

打開文件並檢查文件的內容。在我的電腦上,該文件的內容如下:

#CentOS-Base.repo

#

# mirrorsystemusestheconnectingaddressofclientand

# updatestatusofeachmirrortopickmirrorsthatareupdatedtoand

# geographicallyclosetotheclient。YoushouldusethisforCentOSupdates

#除非ssyouaremanuallypickingthermirrors。

#

# Ifthemirrorlist =對您不起作用,因為fallbackyoucantrythe

# remarkedoutbaseurl = lineinstead。

#

#

name=CentOS-$releasever-Base

mirror list = http://mirror list . centos . org/?release = $ releasevearch = $ basearchrepo = OS

# base URL = http://mirror . centos . org/centos/$ release ver/OS/$ base arch/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

#已發布的更新

name = CentOS-$ release ver-更新

mirror list = http://mirror list . centos . org/?release = $ release verarch = $ basearchrepo = updates

# base URL = http://mirror . centos . org/centos/$ release ver/updates/$ base arch/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

# additionalpackagesthatmaybeused

name=CentOS-$releasever-Extras

mirror list = http://mirror list . centos . org/?

release = $ release verarch = $ basearchrepo = extras

# base URL = http://mirror . centos . org/centos/$ release ver/extras/$ base arch/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

# additionalpackagesthatextendfunctionalityofexistingpackages

name=CentOS-$releasever-Plus

mirror list = http://mirror list . centos . org/?release = $ release verarch = $ basearchrepo = centosplus

# base URL = http://mirror . centos . org/centos/$ release ver/cento plus/$ base arch/

gpgcheck=1

啟用=0

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

#contrib-packagesbyCentosUsers

name = CentOS-$ release ver-Contrib

mirror list = http://mirror list . centos . org/?release = $ release verarch = $ basearchrepo = contrib

# base URL = http://mirror . centos . org/centos/$ release ver/contrib/$ base arch/

gpgcheck=1

啟用=0

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

這個文件中有兩個變量:releasever和basearch。分別代表發布版本號和分支。比如在我的電腦上,這兩個值分別是6和i386。註意。Releasever沒有細分為次要版本號。就是不會是6.6什麽的。

從這個文件的內容,我們可以知道這個文件有五個部分。也就是說我的電腦有五個軟件源,分別是base、updates、extras、centosplus和contrib。因此只需要指定其源代碼的來源,例如以下五個軟件來源。例如,在文件末尾添加以下內容:

name = CentOS-$ release ver-bases RC

base URL = http://vault . centos . org/6.6/OS/Source/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

name = CentOS-$ release ver-updates src-CentOS

base URL = http://vault . centos . org/6.6/updates/Source/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

name = CentOS-$ release ver-extras src-CentOS

base URL = http://vault . centos . org/6.6/extras/Source/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

name = CentOS-$ release ver-pluss RC-CentOS

base URL = http://vault . centos . org/6.6/cento plus/Source/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

name = CentOS-$ release ver-Contribsrc-CentOS

base URL = http://vault . centos . org/6.6/contrib/Soruce/

gpgcheck=1

gpg KEY = file:///etc/PKI/RPM-gpg/RPM-GPG-KEY-CentOS-6

因為不同的版本號設置會有所不同,所以其設置也會有所不同,方法可以概括如下:

(1)gpgkey與該文件中現有部分的名稱相同。

(2)為了確認文件的存在和情況,您可以打開網站http://vault.centos.org/查看詳細情況,然後根據詳細情況進行填寫。

(3)設置baseurl時,要根據自己系統的版本號來設置。如果我的機器是CentOS-6.6,相關數字將設置為6.6。也就是說,http://vault.centos.org/之後的子路徑是6.6。

這個文件的目的是為yum及其相關作品的下載提供壹個源碼。例如,當使用yumdownloader(下面討論)下載源代碼時。例如,將發生以下操作:

(1)下載$baseurl/repodata/repomd.xml文件。如果repomd.xml文件比系統中的文件新。更新系統中相應的repomd.xml。

(2)下載$baseurl/SPackages/中對應的源rpm包。

2)使用哪個命令查看ls命令的位置,如下所示:

哪些

#輸出:/bin/ls

3)使用rpm命令查詢ls命令所屬的包,如下所示:

rpm-qf/bin/ls

#輸出:coreutils-8.4-37.el6.i686

4)yumdownloader是壹個從RPM源碼下載RPM的程序,可以用命令yumdownloader安裝源碼。例如,以下內容:

yum downloader-source coreutils-8.4-37 . el6 . i686

註意:

(1)如果未安裝yumdownloader命令,可以使用該命令安裝:yuminstallyum-utils。

(2)下載的文件在當前文件夾中。可以使用_ number - destdir來指定下載到哪個文件夾。

5)妳用yumdownloader下載的是壹個安裝包文件rpm,妳可以用以下命令查詢rpm中的tar文件,例如:

rpm-qplcoreutils-8.4-37 . el6 . src . rpm | greptar

# output: coreutils-8.4.tar.xz

6)使用rpm2cpio命令將rpm包文件轉換為cpio存檔文件,然後使用cpio命令從cpio存檔文件中復制並提取壹個存檔文件。舉以下例子:

rpm2 cpiocoreutils-8.4-37 . el6 . src . rpm | cpio-idvcoreutils-8.4 . tar . xz

#輸出:

#coreutils-8.4.tar.xz

# 9561街區

Cpio的man解釋為:cpiocopiesfilesintoanarchive

-i:相當於- extract。提取的含義

-d:相當於-make-directory,必要時創建壹個加載文件夾。

-v:列出了文件的處理過程。

7)使用tar命令解壓coreutils-8.4.tar.xz壓縮包,如下:

tar-xvf。/coreutils-8.4.tar.xz

至此,該命令的源代碼已經獲得。