国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

Linux的補丁知識
2005-12-07   

補丁的工作方式

“補丁(patch)”是描述某個文件兩個不同版本之間區別的文件。程序 會逐行比較原始文件與新文件,并以特定格式向標準輸出打印這些區別。程序 可以讀取 的輸出,并將那些改變應用于原始文件的另一個拷貝。(注意,“補丁”一詞既涉及 命令的輸出,也涉及應用那個補丁的命令。)例如:


$ cat old/file.txt
This
is
a
simple
file.
$ cat new/file.txt
This
is
a
slightly more complex
file.
$ diff -uNr old new
diff -uNr old/file.txt new/file.txt
--- old/file.txt        Tue May 28 23:00:21 2002
+++ new/file.txt        Tue May 28 23:01:01 2002
@@ -1,5 +1,5 @@
 This
 is
 a
-simple
+slightly more complex
 file.

可見,兩個文件只有一行的區別。在命令行中列出的來自第一個文件的那一行顯示時在最前有一個“-”,接下來是來自第二個文件的那一行,在命令行中顯示時最前而有一個“+”。直觀上,是從舊文件中“減去(subtracting)”那一行,并“添加”來自新文件的那一行。記住,舊文件總是先出現,然后是較新的文件。

現在,讓我們來應用剛剛創建的補丁。補丁會將較舊版本的文件更新為較新版本的文件,所以我們應該對文件的較舊的版本應用補丁。


$ diff -uNr old new > patchfile
$ cd old
$ patch -p1 < ../patchfile
patching file file.txt
$ cat file.txt
This
is
a
slightly more complex
file.

使用 命令應用了 命令的輸出后,“舊”文件現在與“新”文件相同。

應用補丁

接下來我們將學習如何應用補丁。需要應用某個補丁的一個常見的原因是為了獲得一個特定的內核版本,它不能從 作為一個大的 tarball 下載得到 —— 或者是為了獲得一個增量的補丁,這樣當大部分內核文件仍然相同時就不必去下載整個新內核。

內核補丁的命名和創建標準不是特別簡單。假定出于某種原因您需要得到內核 ,而當前已經擁有版本 的完整的內核源代碼。為了從 升級到 需要下載下列補丁:

每一個 prepatch(兩個主版本之間的補丁,稱作 ,通常可以在 ftp 站點上名為 的目錄中找到)都是針對前一個主版本的變化而創建的。常見的錯誤是下載了內核版本 ,然后卻嘗試應用 prepatch。如果想要得到內核版本 ,應該下載內核 ,然后應用 prepatch。這是因為 的前身,不能顛倒。注意:命名的慣例和內核 prepatches 的位置會經常發生變化。可能不得不去閱讀 linux-內核郵件列表來得知最新補丁的保存位置及它們的名稱。

官方內核補丁的實現都支持您只需進行如下操作:


cd 
patch -p1 < ../patchfile

patch 命令的 選項表示的是“除去直到第一個正斜杠的部分路徑名,然后嘗試對除去了路徑名的文件應用補丁”。

如果所有這些看起來太過復雜和令人厭煩,那么可能應該去嘗試使用 Cogito。本部分的最后有對 Cogito 的簡短介紹。

創建一個補丁

要記住的第一件事情是,始終要在某個地方保存內核源代碼的一個未經改動的、原始的版本。不要在它里面進行編譯,不要編輯其中的任何文件,不要對它做任何事情 —— 只是拷貝它,來得到源代碼樹的工作拷貝。原始內核源代碼應該是在一個名為 的目錄中,并且工作目錄應該與原始代碼位于同一目錄之中。例如,如果原始源代碼位于 目錄下,那么工作所用的源代碼也應該位于 目錄中。

在對工作拷貝進行了修改后,將使用 創建一個補丁。假定您的工作源代碼樹名為 ,那么應該運行這個命令:


$ diff -upNr linux.vanilla linux.new > patchfile

原始內核源代碼與新的內核源代碼之間的所有區別現在就已經在 之中。 注意:不要使用不一致的目錄創建補丁,例如(不要 這樣做):


$ diff -upNr linux.vanilla working/usb/thing1/linux > patchfile

這將不會創建一個標準格式的補丁,而且沒有人會去費力嘗試您的補丁,因為它難以應用。

既然已經創建了一個補丁,那么閱讀它吧!幾乎可以肯定,補丁中包含的有些文件您不希望將它們作為補丁的一部分,比如舊的編輯器備份文件、對象文件,或者在開發過程中創建的隨機垃圾文件。要除去這些文件,可以讓 diff 忽略特定的文件,可以刪除這些文件,或者可以手工編輯 diff。在手工編輯補丁之前一定要理解補丁的格式,否則很可能創建出一個不能應用的補丁。 是一個實用的命令,可以用來除去在內核構建期間創建的額外文件。

不過要記住,這會刪除 文件并強制您對內核進行完全的編譯。

另外,要確保補丁位于正確的目錄中。新的行是不是前面有“+”的那些行?并且,要確保那些是您所希望執行的修改。非常容易使用完全錯誤的源代碼樹完成 diff。

當認為自己已經獲得了補丁的最終版本之后,將它應用到原始的源代碼樹(不要破壞原始源代碼樹的惟一拷貝)。如果它不能應用而又沒有報錯,那么重新去完成那個補丁。

同樣,如果這這看起來太過復雜,可能應該去嘗試使用 Cogito。

在提交補丁之前需要考慮的事情

創建了一個補丁之后,您會希望與其他人共享它。理想的情形是,您自己測試那個補丁,也讓其他人去測試它,并讓其他人去閱讀那個補丁本身。總之,您會希望自己的補丁沒有 bug、合理編寫、易于應用。

始終要自己編譯和測試自己的補丁。您會看到有人向 linux-內核提交“完全沒有測試的(totally untested)”補丁,但不會對其傾心 —— 完成沒有經過測試的補丁可能是一個沒用的補丁。內核維護人員曾不止一次發布根本不能編譯的內核。人無完人 —— 在任何情況下都要測試您的補丁。

確保代碼與相關代碼相符合,并遵循內核代碼風格慣例。雖然查看其他源文件通常是了解當前慣例的最佳途徑,不過還應去查看文件 中的規范說明。

如果您的補丁難以應用,那么它幾乎肯定不會被認可。除了要使用適當層次的目錄創建補丁以外,創建它時所針對的內核需要與其他人將補丁應用到的內核相同(或者幾乎相同)。所以,如果想讓 XYZ 來應用您的補丁,那么要確定 XYZ 正在使用的內核的版本,然后嘗試盡可能使用與之相近的內核。通常是內核維護人員所發布的最新 vanilla 內核。

例如,如果有一個針對 補丁,而 是發布的最新版本,那么應該針對 重新創建補丁。最簡單的方法是,將補丁從 應用到 ,并修訂兩個版本之間的所有變化,然后針對 重新進行 diff。

將補丁提交給誰

這個問題的答案是“看情況而定”。訂閱 Linux 內核郵件列表以及與您的研究領域更相關的列表;您將了解到誰是適合的人選。

嘗試確定最明確參與維護您正在修改的那部分內核的人。如果您對 bar 子系統中的 foo 驅動程序進行了修改,而 foo 驅動程序有一個維護人員,那么您可能應該將補丁提交給 foo 的維護人員,只有當 foo 的維護人員不理您時再提交給 bar 子系統的維護人員。

頂層內核源代碼目錄中的 經常會過期,不過,無論如何,通常還是會有所幫助。不管您將補丁發送給 文件的哪個人,都不會有人責怪您。當無法確定如何做時,這總是可采取的最安全方法。

另外,要將您的補丁發送到 linux-kernel@vger.kernel.org 的 Linux 內核郵件列表(除非有理由不這樣做)。除了維護人員以外的其他開發者可能需要知道您的修改。他們還可能會提供幫助,給出注解與建議。

發布補丁

大部分補丁都足夠小,可以包含在郵件中。雖然有些維護人員拒絕接收附件中的補丁,有些維護人員拒絕接收 MIME-編碼 的補丁,但是所有維護人員都會接收包含在純文本郵件主體中的補丁。確保郵件客戶機不會破壞您的補丁 —— 如果不能確定,那么將補丁用郵件發送給自己并應用它,這樣來確保其他人也可以應用它。大部分 Linux 郵件列表希望補丁擁有以字符串 為前綴的有意義的英語主題,便于查找和閱讀補丁。

如果您的補丁太大,不能通過電子郵件發送(大約 40 KB 或者更大),那么將它放在其他人可以下載的 Web 頁面上或者 ftp 站點上,然后把 URL 放在電子郵件中。

源代碼樹中的 文件中可以找到關于如何提交補丁的更多指南。

策略考慮因素

如果所有事實都表明您的補丁有適當的格式、是正確的而且修訂了一個 bug,那么提交它將簡單得多。更重要的是,您的補丁需要有吸引力、適時、有趣,而且要考慮維護人員的自尊心。在大部分情況下,簡單的 bug 修復會被立即認可。不過,有時您會遇到更大的問題。重要的是要記住不能去從事 Linux 維護人員系統周邊的工作;您的工作必須深入其中。

學習關于 linux-內核的一些思路,人們試圖以這些思路來說服他人將自己的補丁融入內核。如果您的補丁沒有被認可,那么去聆聽其他人是如何評價它,并嘗試解決它的問題。最常被拒絕的補丁是特性(feature)補丁 —— 添加的新特性被其他維護人員認為沒有吸引力。不要浪費時間去嘗試讓補丁被認可,只需要單獨維護它。如果足夠多的人發現那個補丁有用,那么在下載并使用您的補丁的人中,您會被認為是一位有幫助的內核修改者而獲得名望。

有時,維護人員只是因為他或者她的自尊心而不認可某個補丁。在這種情況下,惟一的選擇是維護一個獨立于主內核的更好版本代碼。通常,在一段時間之后,被證明是更好的外部維護的代碼將取代內核內部代碼 —— 這是成為維護人員的一個途徑。

可取代 diff 和 patch 的另一種選擇:Cogito

當前很多內核開發者使用 Cogito 來取代 diff 和 patch。它簡化了大量內核開發任務,比如更新到最新的版本、創建補丁和應用補丁。

要添加一個文件,運行:


$ cg-add file

要創建一個補丁,運行:


$ cg-diff > patchfile

要應用一個補丁,運行:


$ cg-patch < patchfile


熱詞搜索:

上一篇:端口、木馬、安全、掃描應用知識(1)
下一篇:CA認證系統知識點滴

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
久久精品二区亚洲w码| 亚洲成人一区二区| 欧美蜜桃一区二区三区| 国产精品一区三区| 午夜成人免费电影| 亚洲欧洲色图综合| 久久久久青草大香线综合精品| 在线精品视频免费播放| 成人免费黄色在线| 精品无码三级在线观看视频| 亚洲一区二区四区蜜桃| 国产精品福利一区二区| xf在线a精品一区二区视频网站| 欧美影片第一页| 99精品国产热久久91蜜凸| 韩国欧美国产1区| 日本va欧美va欧美va精品| 亚洲一区日韩精品中文字幕| 国产精品第四页| 久久久99久久| 久久久精品影视| 欧美mv日韩mv国产网站| 日韩一区二区三| 欧美美女黄视频| 欧美日韩一二三区| 91成人看片片| 色婷婷精品久久二区二区蜜臀av| 不卡区在线中文字幕| 国产·精品毛片| 国产福利一区在线| 国产91富婆露脸刺激对白| 国产精品资源在线看| 国产永久精品大片wwwapp| 国产最新精品精品你懂的| 蜜臀av一区二区在线观看| 丝袜美腿高跟呻吟高潮一区| 日韩国产欧美在线播放| 日本sm残虐另类| 蜜臀精品一区二区三区在线观看 | 激情五月播播久久久精品| 奇米四色…亚洲| 美女一区二区三区| 久久精品国产99国产| 久国产精品韩国三级视频| 极品尤物av久久免费看| 狠狠色狠狠色合久久伊人| 国产中文字幕精品| 国产乱码精品1区2区3区| 国产精品996| 99精品久久只有精品| 欧美中文字幕一二三区视频| 欧美日精品一区视频| 在线播放一区二区三区| 精品久久人人做人人爽| 精品国产乱码久久久久久闺蜜| 久久日韩精品一区二区五区| 亚洲国产另类精品专区| 亚洲福利一区二区| 免费在线欧美视频| 国产伦精品一区二区三区免费迷 | 国产99一区视频免费| 国产伦精品一区二区三区免费迷| 成人性生交大片免费| 91麻豆自制传媒国产之光| 在线中文字幕一区| 日韩视频免费观看高清完整版在线观看 | 亚洲成人精品一区| 久久97超碰色| 99久久久久久99| 欧美精品日韩综合在线| 久久影音资源网| 亚洲裸体xxx| 蜜桃视频在线观看一区二区| 粉嫩一区二区三区在线看| 91国偷自产一区二区使用方法| 6080日韩午夜伦伦午夜伦| 久久久久99精品一区| 亚洲午夜私人影院| 国内外成人在线视频| 色婷婷av一区二区三区软件 | 日韩国产欧美一区二区三区| 日韩精品亚洲专区| 国产真实乱对白精彩久久| 91视频在线观看| 欧美一三区三区四区免费在线看 | 日本成人在线看| av综合在线播放| 在线播放国产精品二区一二区四区| 久久综合中文字幕| 亚洲在线一区二区三区| 国产精品一区二区在线看| 欧美在线啊v一区| 久久精品网站免费观看| 丝袜美腿亚洲色图| 91丝袜高跟美女视频| 欧美成人vr18sexvr| 亚洲美女少妇撒尿| 岛国一区二区在线观看| 欧美一级免费大片| 亚洲男人电影天堂| 成人精品国产福利| 欧美白人最猛性xxxxx69交| 亚州成人在线电影| 99精品桃花视频在线观看| 精品国产青草久久久久福利| 亚洲一线二线三线久久久| 成人av网址在线| 亚洲五月六月丁香激情| 国产69精品久久久久毛片| 日韩一区二区三区在线视频| 一区二区高清在线| 99久久777色| 国产精品欧美一区喷水| 国产一区视频导航| 欧美一级生活片| 日韩在线卡一卡二| 欧美精品粉嫩高潮一区二区| 亚洲天天做日日做天天谢日日欢 | 成人av先锋影音| 久久精品免费在线观看| 国产一区二区三区高清播放| 欧美一区二区三区四区久久| 亚洲国产日韩av| 91福利视频在线| 亚洲男人天堂av| 色综合久久中文字幕综合网| 亚洲欧美综合网| 成人免费观看av| 欧美国产精品一区二区三区| 国产乱色国产精品免费视频| 久久亚洲综合色| 国产一区二区三区在线观看精品 | 亚洲一二三四区| 91视频在线看| 亚洲亚洲精品在线观看| 欧美日韩久久一区二区| 亚洲一区电影777| 欧美另类久久久品| 麻豆精品视频在线观看| 日韩欧美不卡在线观看视频| 久久99精品视频| 久久精品人人爽人人爽| 国产精品一区二区不卡| 欧美韩国日本不卡| 99精品欧美一区二区蜜桃免费| 亚洲精品国产一区二区精华液| 日韩一区二区三区四区| 狠狠色丁香久久婷婷综合丁香| 精品免费日韩av| 国产mv日韩mv欧美| 亚洲精品国产a| 欧美日本免费一区二区三区| 美女精品自拍一二三四| 久久先锋资源网| 一本色道综合亚洲| 日本亚洲三级在线| 国产欧美日韩亚州综合| 91老师片黄在线观看| 三级精品在线观看| 欧美精品一区二区在线观看| 成人在线综合网| 亚洲一卡二卡三卡四卡五卡| 日韩欧美美女一区二区三区| 国产成人综合视频| 一区二区三区在线视频免费观看| 欧美日韩一卡二卡| 国产精品亚洲综合一区在线观看| 亚洲天堂网中文字| 日韩一区二区三| 99久久久无码国产精品| 免费在线观看不卡| 国产精品美女一区二区三区| 欧美日韩一二三区| 国产成人免费视频一区| 亚洲一区二区中文在线| 久久久精品tv| 欧美最新大片在线看 | 成人aa视频在线观看| 亚洲国产裸拍裸体视频在线观看乱了 | 国内成+人亚洲+欧美+综合在线| 中文一区二区在线观看| 欧美日韩精品系列| 成人av影视在线观看| 日本欧美一区二区| 日韩毛片视频在线看| 日韩欧美一卡二卡| 在线观看视频一区| 国产精品123| 青青国产91久久久久久| 自拍偷在线精品自拍偷无码专区| 91麻豆精品国产91久久久久久| 成人app软件下载大全免费| 免费人成黄页网站在线一区二区| 综合网在线视频| 久久色在线观看| 3atv一区二区三区| 在线观看日韩av先锋影音电影院| 国产精品91xxx| 精品夜夜嗨av一区二区三区| 午夜电影久久久|