2009-06-29 11 views
6

प्राप्त करें, मैं खोज रहा हूं कि एक ही लिनक्स कर्नेलटेलिस (समान स्रोत, एक ही वातावरण, एक ही विकल्प, एक ही कंपाइलर) बनाना और एक ही चेकसम प्राप्त करना संभव है। कोई भी जानता है कि ऐसा कैसे करें?एक ही लिनक्स कर्नेल को दो बार स्रोतों का निर्माण कैसे करें और उसी चेकसम

+0

@RamenChef द्वारा संस्करण किसी भी मतलब नहीं है देखने वाले की आंखों में ;-) ... है ... से छुटकारा पाने के लिए संभव है यह वास्तव में है संभव StackOverflow इतना बुरा हो रहा है? – gsempe

उत्तर

7

निर्माण का पुराना संस्करण में शामिल है, को देखने के init version.c:

/* 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 द्वारा लिपियों/mkcompile_h है, जहां आप निम्न पंक्ति को खोजने उत्पन्न होता है:

const char linux_banner[] = 
    "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" 
    LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n"; 

और UTS_VERSION में परिभाषित किया गया है/linux/compile.h शामिल

UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS `LC_ALL=C LANG=C date`" 

व्यापक लाइन से date को हटाकर, आप बिल्ड समय निर्भरता से छुटकारा पाने में सक्षम होना चाहिए।

0

चेक करने का सबसे तेज़ तरीका बनाना होगा, प्रतिलिपि बनाना, साफ करना होगा, और फिर फिर से बनाना होगा। यदि चेकसम मिलान करता है, तो यह संभव है। यदि नहीं, तो यह सुझाव देता है कि मेक कुछ स्रोत फ़ाइलों को किसी तरह से बदल रहा है (संख्या बनाना, निर्माण दिनांक इत्यादि)

0

संभवतः, उसी वातावरण में कर्नेल का निर्माण उसी चेकसम में होगा। तो, एक ही संकलक (समान संकलक के समान संस्करण), बिल्कुल एक ही स्रोत, एक ही निर्भरता (यदि है कि एक कर्नेल संकलन करने के लिए भी लागू होता है), आदि

+0

यहां तक ​​कि एक ही पर्यावरण सेटअप (समान स्रोत, एक ही कंपाइलर और समान निर्भरता) के साथ भी दो लगातार निर्माण एक अलग चेकसम प्रदान करते हैं। मुझे लगता है कि समस्या संकलन विकल्पों के आसपास है और मुझे नहीं पता कि कौन से संकलन विकल्प कर्नेल शुद्धता को संशोधित किए बिना समान चेकसम प्राप्त करने के लिए बदलना संभव है। – gsempe

1

यहां तक ​​कि एक साधारण हैलो दुनिया दो बार संकलित विभिन्न बाइनरी में परिणाम। किसी भी तरह से लिंकर कुछ जानकारी जोड़ रहा है जो प्रत्येक निर्माण में बदलता है।

+0

क्या यह अभी भी सच है जब परिणामस्वरूप बाइनरी छीन ली जाती है? – shodanex

5

shodanex का जवाब सही है लेकिन अपूर्ण है। कुछ शोध के बाद मैंने पाया कि लिनक्स कर्नेल बाइनरी एक डिफ़ॉल्ट रैमफिक्स एम्बेड करता है जो दो कर्नेल संकलन (सीपीआईओ रैमएफएस हेडर एम्बेड तिथि) के बीच अंतर का एक और कारण है। इस सुविधा को अक्षम करना असंभव है लेकिन डिफ़ॉल्ट रैमफ प्रदान करना संभव है। जब आप ऐसा करते हैं, तो आपको बिल्कुल वही चेकसम मिल जाता है।

धन्यवाद। आपके उत्तर मेरी समस्या को हल करने के लिए मुझे बहुत मदद करते हैं।

2

@gsempe, आप इसे देखना चाहते हैं: "कर्नेल निर्माण निर्धारक बनाएं" रेफरी। http://lwn.net/Articles/437864/

यह शोर के कुछ स्रोतों (शोर

+0

बढ़िया जोड़ लेकिन मैंने अपनी समस्या हल कर ली थी। Http://stackoverflow.com/a/1214926/21052 यहां देखें – gsempe

संबंधित मुद्दे