當前位置:編程學習大全網 - 源碼下載 - linux源碼閱讀工具linux源碼閱讀

linux源碼閱讀工具linux源碼閱讀

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

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

如何查看linux內核源代碼?

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

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

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

12.documentation目錄下是壹些文檔,是對每個目錄作用的具體說明。

壹般在每個目錄下都有壹個.depend文件和壹個Makefile文件。這兩個文件都是編譯時使用的輔助文件。仔細閱讀這兩個文件對弄清各個文件之間的聯系和依托關系很有幫助。另外有的目錄下還有Readme文件,它是對該目錄下文件的壹些說明,同樣有利於對內核源碼的理解。

在閱讀方法或順序上,有縱向與橫向之分。所謂縱向就是順著程序的執行順序逐步進行;所謂橫向,就是按模塊進行。它們經常結合在壹起進行。對於Linux啟動的代碼可順著Linux的啟動順序壹步步來閱讀;對於像內存管理部分,可以單獨拿出來進行閱讀分析。實際上這是壹個反復的過程,不可能讀壹遍就理解。

如何獲取linux下命令源碼?

命令的源碼是壹個軟件包為單元的,放在壹個軟件包的源碼中。若要下載壹個命令的源碼,就要把這個命令所屬的軟件包的源碼都下載下來。命令的源碼就在下載的源碼的相關文件夾內。壹般是src文件夾,對應的主文件名稱為cmd.c,當中cmd為詳細的命令,如ls命令的主程序文件為ls.c。

因為在不同的Linux發行版上。源碼的獲取方法並不同樣。所以以下以Ubuntu和CentOS這兩種經常使用的Linux發行版為樣例進行說明。

1、Ubuntu中系統命令源碼的獲取方法

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

1)使用which命令查看ls命令的位置,例如以下:

whichls#輸出:/bin/ls

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

dpkg-S/bin/ls#輸出: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.repo,改動該文件須要root權限。

打開該文件,查看該文件的內容,在本人的機子上,該文件的內容例如以下:

#CentOS-Base.repo

#

#ThemirrorsystemusestheconnectingIPaddressoftheclientandthe

#updatestatusofeachmirrortopickmirrorsthatareupdatedtoand

#geographicallyclosetotheclient.YoushouldusethisforCentOSupdates

#unlessyouaremanuallypickingothermirrors.

#

#Ifthemirrorlist=doesnotworkforyou,asafallbackyoucantrythe

#remarkedoutbaseurl=lineinstead.

#

#

name=CentOS-$releasever-Base

mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=os

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#releasedupdates

name=CentOS-$releasever-Updates

mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=updates

#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additionalpackagesthatmaybeuseful

name=CentOS-$releasever-Extras

mirrorlist=http://mirrorlist.centos.org/?

release=$releaseverarch=$basearchrepo=extras

#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additionalpackagesthatextendfunctionalityofexistingpackages

name=CentOS-$releasever-Plus

mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=centosplus

#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib-packagesbyCentosUsers

name=CentOS-$releasever-Contrib

mirrorlist=http://mirrorlist.centos.org/?release=$releaseverarch=$basearchrepo=contrib

#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/

gpgcheck=1

enabled=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

該文件裏有兩個變量:releasever和basearch。分別表示release版本號和分支,如本人的機子上,這兩個值分別為6和i386。註意。releasever並不會細分為次級版本號。即不會是6.6之類的。

從該文件的內容能夠知道,該文件***同擁有5個節。也就是說本人的機子的軟件來源有5處,分別為base、updates、extras、centosplus和contrib。所以僅僅須要為例如以下的5處軟件源指定其源碼的源就可以。在文件的末尾加上例如以下的內容:

name=CentOS-$releasever-Basesrc

baseurl=http://vault.centos.org/6.6/os/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever-Updatessrc-centos

baseurl=http://vault.centos.org/6.6/updates/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever-Extrassrc-centos

baseurl=http://vault.centos.org/6.6/extras/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever-Plussrc-centos

baseurl=http://vault.centos.org/6.6/centosplus/Source/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

name=CentOS-$releasever-Contribsrc-centos

baseurl=http://vault.centos.org/6.6/contrib/Soruce/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

因為不同的版本號設置會有所不同,所以其設置會有所不同,方法可總結為例如以下:

(1)gpgkey與該文件裏已有的節的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)使用which命令查看ls命令的位置,例如以下:

whichls

#輸出:/bin/ls

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

rpm-qf/bin/ls

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

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

yumdownloader--sourcecoreutils-8.4-37.el6.i686

註:

(1)若yumdownloader命令沒有安裝,則能夠使用此命令安裝:yuminstallyum-utils。

(2)下載的文件在當前文件夾下。能夠使用_數--destdir指定下載到哪壹個文件夾。

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

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

#輸出:coreutils-8.4.tar.xz

6)使用rpm2cpio命令將rpm包文件轉換成cpio歸檔文件,再使用cpio命令,從cpio歸檔文件復制提取出壹個歸檔文件。出例如以下:

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

#輸出:

#coreutils-8.4.tar.xz

#9561blocks

cpio的man解釋為:cpiocopiesfilesintoanarchive

-i:與--extract等同。提取之意

-d:與--make-directories等同,當有須要時創建壹個載入文件夾

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

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

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

至此,命令的源碼獲取完畢。

如何閱讀linux內核代碼?

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

  • 上一篇:傾斜角度傳感器
  • 下一篇:信息技術 文件拓展名 大全
  • copyright 2024編程學習大全網