Linux做爲一個開源的內核,其源代碼也能夠用git下載和管理html
- 獲取最新提交到版本樹的一個副本 - $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git - 下載代碼後,更新本身的分支到最新分支 - $ git pull
$ tar xvjf linux-x.y.z.tar.bz2
壓縮形式爲zip:$ tar xvzf linux-x.y.z.tar.gz
linux
關於參數: -x 解開.tar格式的文件 -v 顯示詳細信息 -j 使用bzip2程序 -z 使用gzip程序 -f 使用歸檔文件
從內部源碼樹開始,運行$ patch -p1 < ../patch-x,y,z
git
詳見LINUX內核分析第三週學習總結:構造一個簡單的LINUX系統MENUOS中第一部分:「Linux內核源碼簡介」。安全
目 錄 | 描 述 |
---|---|
arch | 特定體系結構的代碼 |
block | 塊設備I/O層 |
crypo | 加密API |
Documentation | 內核源碼文檔 |
drivers | 設備驅動程序 |
firmware | 使用某些驅動程序而須要的設備固件 |
fs | VFS和各類文件系統 |
include | 內核頭文件 |
init | 內核引導和初始化 |
ipc | 進程間通訊代碼 |
kernel | 像調度程序這樣的核心子系統 |
lib | 一樣內核函數 |
mm | 內存管理子系統和VM |
net | 網絡子系統 |
samples | 示例,示範代碼 |
scripts | 編譯內核所用的腳本 |
security | Linux 安全模塊 |
sound | 語音子系統 |
usr | 早期用戶空間代碼(所謂的initramfs) |
tools | 在Linux開發中有用的工具 |
virt | 虛擬化基礎結構 |
make config
)和配置用戶界面(例如:make menuconfig
:基於ncurse庫的圖形界面工具;make gconfig
:基於gtk+的圖形工具...)。/boot
目錄下的配置文件寫進.config
文件中,採用的是註釋的形式寫進新增長的功能。CONFIG_IKCONFIG_PROC
會把完整的壓縮過的內核配置文件存放在/proc/config.gz
中,再次編譯時能夠方便地克隆當前的配置。減小垃圾信息網絡
$ make > ../detritus #將錯誤報告和警告信息重定向到文件中 $ make > /dev/null #將無用的輸出信息重定向到/dev/null中 - /dev/null:空設備,輸入的信息直接丟棄
衍生多個編譯做業:make程序能把編譯過程拆分紅多個並行的做業。其中每一個做業獨立併發地運行,有助於加快多處理器系統上的編譯過程,也有利於改善處理器的利用率。默認狀況下,make只衍生一個做業。併發
$ make -jn #以多個做業編譯內核 - j:指定同時執行多任務 - n:要衍生出的做業數
make modules_install #把全部已編譯的模塊安裝到正確的主目錄/lib/modules下
符號對照表
。用來將內核符號與它們的起始地址對應起來。include
中arch/<architecture>/include/asm
目錄下什麼是GNU?GNU是一種操做系統,GNU提供的C編譯器就是咱們以前使用的gcc。
static inline void wolf(unsigned long tail_size); - static:關鍵字 - inline:用於限定關鍵字
定義內聯函數特色:時間要求高,自己長度較短的函數。異步
使用以前就要定義好內聯函數,通常在頭文件中定義。分佈式
爲了類型安全和易讀性,優先使用內聯函數而不是複雜的宏。函數
unsigned int low, high; asm volatile("rdtsc" : "=a" (low), "=d" (high)); /* low 和 high 分別包含64位時間戳的低32位和高32位 */ - asm:嵌入彙編代碼 - volatile:不優化
/* 若是error在絕大多數狀況下爲0(假) */ if (unlikely(error)) { /* ... */ } /* 若是success在絕大多數狀況下不爲0(真) */ if (likely(success)) { /* ... */ }
參考資料1:《Linux內核設計與實現》(原書第三版)
參考資料2:make config 解惑工具