Linux 內核測試與調試(2)
如果你想開上內核快車道,追求與時俱進,那就去下載 mainline 狀態的內核或 linux-next 狀態的內核(LCTT:讀者可進入 kernel.org 獲取代碼,linux 代碼被分為4種狀態:mainline, stable, longterm, linux-next)。安裝測試 mainline 狀態或 linux-next 狀態的內核,你就可以在正式發布之前幫助內核找到並修復裡面的 bug。
mainline 狀態的內核源碼:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
linux-next 狀態的內核源碼:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
編譯安裝這兩種內核的步驟與編譯安裝穩定版內核一樣。按之前講過的步驟來就行了。
打補丁
Linux 內核的補丁是一個文本文件,包含新源碼與老源碼之間的差異。每個補丁只包含自己所依賴的源碼的改動,除非它被特意包含進一系列補丁之中。打補丁方法如下:
patch -p1 < file.patch
git apply --index file.patch
兩種方法都可以打補丁。但是,如果你要打的補丁包含一個新文件,git 命令不能識別這個新增的文件,也就是說這個新文件在 git 裡面屬於 untracked 文件(LCTT:玩 git 的人對這個會比較熟悉,就是文件處於未被跟蹤的狀態,你需要使用 git add 命令將文件放入暫存區)。git diff 命令不會將這個文件的增量顯示出來,並且 git status 命令會顯示這個文件處於 untracked 狀態。
大多數情況下,有個沒被跟蹤的文件,對於編譯安裝內核來說沒什麼問題,但是 git 操作就會出現一些問題了: git reset --hard 命令不會刪除這個新加的文件,並且接下來的 git pull 操作也會失敗。你有多種選擇來避免上面所說的狀況:
選項1,不跟蹤這個新文件:
如果打補丁後新添加了文件,在 git reset --hard 前使用 git clean 命令來刪除沒有被跟蹤的文件。舉個例子,git clean -dfx 命令會強制刪除未被跟蹤的目錄和文件,忽略在 .gitigniore 文件內規定的文件。如果你不在乎哪些文件會被刪除,你可以使用 -q 選項讓 git clean 命令進入安靜模式,不輸出任何處理過程。
選項2,跟蹤新文件:
你可以在使用 git apply --index file.patch 命令後讓 git 跟蹤打完補丁後新產生的文件(LCTT:使用 git add 命令),就是讓 git 把文件放入 index 區域。做完這個後,git diff 命令會將新文件的增量列印出來,git status 也會顯示者這是一個正常的新增文件。
via: http://www.linuxjournal.com/content/linux-kernel-testing-and-debugging?page=0,1
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive