一般在Linux系統(tǒng)中的/usr/src/linux*.*.*(*.*.*代表的是內(nèi)核版本,如2.4.23)目錄下就是內(nèi)核源代碼(如果沒有類似目錄,是因為還沒安裝內(nèi)核代碼)。另外還可從互連網(wǎng)上免費下載。注意,不要總到去下載,最好使用它的鏡像站點下載。請在里找一個合適的下載點,再到pub/linux/kernel/v2.6/目錄下去下載2.4.23內(nèi)核。
在陽城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站建設、成都網(wǎng)站設計 網(wǎng)站設計制作定制制作,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站設計,營銷型網(wǎng)站,外貿(mào)網(wǎng)站制作,陽城網(wǎng)站建設費用合理。
代碼目錄結(jié)構(gòu)
在閱讀源碼之前,還應知道Linux內(nèi)核源碼的整體分布情況?,F(xiàn)代的操作系統(tǒng)一般由進程管理、內(nèi)存管理、文件系統(tǒng)、驅(qū)動程序和網(wǎng)絡等組成。Linux內(nèi)核源碼的各個目錄大致與此相對應,其組成如下(假設相對于Linux-2.4.23目錄):
1.arch目錄包括了所有和體系結(jié)構(gòu)相關的核心代碼。它下面的每一個子目錄都代表一種Linux支持的體系結(jié)構(gòu),例如i386就是Intel CPU及與之相兼容體系結(jié)構(gòu)的子目錄。PC機一般都基于此目錄。
2.include目錄包括編譯核心所需要的大部分頭文件,例如與平臺無關的頭文件在include/linux子目錄下。
3.init目錄包含核心的初始化代碼(不是系統(tǒng)的引導代碼),有main.c和Version.c兩個文件。這是研究核心如何工作的好起點。
4.mm目錄包含了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關的內(nèi)存管理代碼位于arch/*/mm目錄下。
5.drivers目錄中是系統(tǒng)中所有的設備驅(qū)動程序。它又進一步劃分成幾類設備驅(qū)動,每一種有對應的子目錄,如聲卡的驅(qū)動對應于drivers/sound。
6.ipc目錄包含了核心進程間的通信代碼。
7.modules目錄存放了已建好的、可動態(tài)加載的模塊。
8.fs目錄存放Linux支持的文件系統(tǒng)代碼。不同的文件系統(tǒng)有不同的子目錄對應,如ext3文件系統(tǒng)對應的就是ext3子目錄。
Kernel內(nèi)核管理的核心代碼放在這里。同時與處理器結(jié)構(gòu)相關代碼都放在arch/*/kernel目錄下。
9.net目錄里是核心的網(wǎng)絡部分代碼,其每個子目錄對應于網(wǎng)絡的一個方面。
10.lib目錄包含了核心的庫代碼,不過與處理器結(jié)構(gòu)相關的庫代碼被放在arch/*/lib/目錄下。
11.scripts目錄包含用于配置核心的腳本文件。
12.documentation目錄下是一些文檔,是對每個目錄作用的具體說明。
一般在每個目錄下都有一個.depend文件和一個Makefile文件。這兩個文件都是編譯時使用的輔助文件。仔細閱讀這兩個文件對弄清各個文件之間的聯(lián)系和依托關系很有幫助。另外有的目錄下還有Readme文件,它是對該目錄下文件的一些說明,同樣有利于對內(nèi)核源碼的理解。
在閱讀方法或順序上,有縱向與橫向之分。所謂縱向就是順著程序的執(zhí)行順序逐步進行;所謂橫向,就是按模塊進行。它們經(jīng)常結(jié)合在一起進行。對于Linux啟動的代碼可順著Linux的啟動順序一步步來閱讀;對于像內(nèi)存管理部分,可以單獨拿出來進行閱讀分析。實際上這是一個反復的過程,不可能讀一遍就理解。
1. 以搜索ls命令源碼為例,先搜索命令所在包,命令如下:
lpj@lpj-linux:~$ which ls
/bin/ls
2. 用命令搜索該軟件所在包,代碼如下:
lpj@lpj-linux:~$ dpkg -S /bin/ls
coreutils: /bin/ls
3. 從上一步中可以知道ls命令的實現(xiàn)在包coreutils中,用apt安裝(說安裝有些歧義,主要是區(qū)分apt-get -d)該包的源代碼然后解壓,代碼如下:
sudo apt-get source coreutils
cd /usr/src/coreutils-XXX #XXX表示版本號
sudo tar zxvf coreutils-XXX.tar.gz
或者只下載源碼,然后手動打補丁再解壓,代碼如下:
sudo apt-get -d source coreutils
cd /usr/src
tar zxvf coreutils-XXX.tar.gz
gzip -d coreutils-XXX.diff.gz #這一步會生成coreutils-XXX.diff文件
patch -p0 coreutils-XXX.diff
cd coreutils-XXX
tar zxvf coreutils-XXX.tar.gz
OK,這幾步執(zhí)行完后,就可以進入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令對應的源代碼了
用linux一段時間了,有時候想看看ls、cat、more等命令的源代碼,在下載的內(nèi)核源碼中用cscope沒能找到,在網(wǎng)上搜索了一下,將方 法總結(jié)如下:以搜索ls命令源碼為例,先搜索命令所在包,命令如下:
lpj@lpj-linux:~$ which ls /bin/ls用命令搜索該軟件所在包,代碼如下:
lpj@lpj-linux:~$ dpkg -S /bin/ls coreutils: /bin/ls從上一步中可以知道ls命令的實現(xiàn)在包coreutils中,用apt安裝(說安裝有些歧義,主要是區(qū)分apt-get -d)該包的源代碼然后解壓,代碼如下:
sudo apt-get source coreutils cd /usr/src/coreutils-XXX #XXX表示版本號 sudo tar zxvf coreutils-XXX.tar.gz 或者只下載源碼,然后手動打補丁再解壓,代碼如下:
sudo apt-get -d source coreutils cd /usr/src tar zxvf coreutils-XXX.tar.gz gzip -d coreutils-XXX.diff.gz #這一步會生成coreutils-XXX.diff文件 patch -p0 coreutils-XXX.diff cd coreutils-XXX tar zxvf coreutils-XXX.tar.gzOK,這幾步執(zhí)行完后,就可以進入/usr/src/coreutils-XXX/coreutils-XXX/src中查看各命令對應的源代碼了。
關于更多Linux的學習,請查閱書籍《linux就該這么學》。
首先在linux命令行中新建一個目錄 mkdir github(名字可以按你項目名定義),之后敲git命令,確認git工具已經(jīng)安裝好了,我使用的是Ubuntu14.04,git工具默認安裝好了。若沒有安裝,可以嘗試自行安裝,安裝方法比較簡單。如下圖所示
2
在github查看你所需要使用下載源碼項目的URL地址,比如我下載的openwrt,在github中搜索該項目,可以查看到相關的URL地址: 復制下該地址,后面需要使用。如下圖所示
3
在linux命令行中使用 git clone 命令,對該項目源碼clone到本地,等待clone完成。如下圖所示(該項目較大,網(wǎng)絡不快,還未clone完成,只做參考)
當前名稱:linux系統(tǒng)命令源碼 linux011源碼分析
網(wǎng)頁路徑:http://jinyejixie.com/article14/dosjcde.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關鍵詞優(yōu)化、App設計、定制開發(fā)、外貿(mào)建站、動態(tài)網(wǎng)站、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)