我在搜索是否可以構建相同的Linux Kerneltwice(相同的源,相同的環境,相同的選項,相同的編譯器)並獲得相同的校驗和。 任何人都知道如何去做?如何構建相同的Linux內核兩次源並獲得相同的校驗和
回答
構建日期包含在版本中,請參閱INIT version.c:
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
和UTS_VERSION被定義在include/linux/compile.h:由腳本/ mkcompile_h,在那裏你找到下面的行產生
/* This file is auto generated, version 1 */
/* PREEMPT */
#define UTS_MACHINE "arm"
#define UTS_VERSION "#1 PREEMPT Mon Jun 29 10:49:17 CEST 2009"
#define LINUX_COMPILE_TIME "10:49:17"
#define LINUX_COMPILE_BY "cynove"
#define LINUX_COMPILE_HOST "jp"
#define LINUX_COMPILE_DOMAIN "evonyc"
#define LINUX_COMPILER "gcc version 4.3.2 (crosstool-NG-1.4.0) "
compile.h:
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS `LC_ALL=C LANG=C date`"
通過從上述行中刪除date
,您應該能夠擺脫構建時間依賴關係。
最快的檢查方法是製作,複印,清潔,然後重新制作。如果校驗和匹配,那麼它可能。如果不是,那麼表明Make以某種方式修改了某些源文件(內部編號,內部日期等)
假設在相同環境中構建內核將導致相同的校驗和。因此,相同的編譯器(相同版本的相同編譯器),完全是相同的來源,相同的依賴關係(如果它甚至適用於內核編譯)等。
即使具有完全相同的環境設置(相同的源,相同的編譯器和相同的依賴關係),兩個連續的構建也會給出不同的校驗和。我認爲問題在於編譯選項,我不知道可以更改哪些編譯選項,以便在不修改內核正確性的情況下獲得相同的校驗和。 – gsempe 2009-06-29 08:45:46
即使是一個簡單的hello world編譯兩次也會導致不同的二進制文件。不知怎的,鏈接器添加了一些在每個構建中發生變化的信息。
當結果二進制文件被剝離時,這仍然是真的嗎? – shodanex 2009-06-29 09:22:02
shodanex的答案是正確的,但不完整。 經過一番研究,我發現Linux內核二進制嵌入了默認的ramfs,這是兩個內核編譯(CPIO RAMFS頭嵌入日期)之間差異的另一個原因。禁用此功能是不可能的,但可以提供默認的ramfs。 當你這樣做時,你會得到完全相同的校驗和。
謝謝。你的回答可以幫助我解決我的問題。
@gsempe,你想尋找這樣的:「讓內核構建確定性」 ref。 http://lwn.net/Articles/437864/
有可能擺脫噪音 的某些來源(噪音......在旁觀者;-)的眼睛
偉大的補充,但我已經解決了我的問題。看看這裏http://stackoverflow.com/a/1214926/21052 – gsempe 2014-01-20 11:10:41
- 1. 校驗值相同
- 2. 構建兩次相同RPM包的不同MD5總和
- 3. 使用Delphi 6編譯兩次並在二進制文件上獲得相同的校驗和
- 4. 校驗和不同對於相同的文件創建者兩個進程
- 5. Android和Python不同的SHA1校驗和相同的文件
- 6. 比較從相同的確切來源構建的兩個可執行文件的校驗和
- 7. 訪問相同的資源兩次
- 8. 如何獲得不連續兩次相同的數組值
- 9. 解析PDF在同一頁獲得兩次相同的文本
- 10. 如何在同一個內核上並行多次運行相同的進程?
- 11. 我得到兩次相同的對象
- 12. 如何生成與artifactory相同的校驗和?
- 13. 獲取VBA中的FCIV(或相同)校驗和
- 14. 解析相同的內容兩次lxml.iterparse
- 15. 兩次不抓取相同的內容
- 16. 如何把相同的JLabel兩次
- 17. Maven獲取相同的神器兩次
- 18. jQuery + Knockout獲取相同的值兩次
- 19. 兩個相互依賴的Linux內核模塊的結構?
- 20. 在C#和SQL中的相同的校驗和
- 21. 構建具有相同內核的多個應用程序
- 22. 如何創建兩個相同的div。彼此相鄰,並在同一水平
- 23. 校驗值內爆的/不同的陣列與陣列相交
- 24. 如何在JasperReports/iReport中使用相同的數據源兩次
- 25. laravel 4.1校驗規則相同錯誤
- 26. HTML敏捷包獲得相同的輸出兩次C#
- 27. 在結果中獲得相同的記錄兩次
- 28. RESTful - 獲得不同形式的相同資源的相同資源的不同URI
- 29. 如何獲得相同的列?
- 30. CSS如何獲得相同的高度?
通過@RamenChef版沒有任何意義......它實際上是可能的StackOverflow變得如此糟糕? – gsempe 2016-11-11 18:35:42