Szukam, czy możliwe jest zbudowanie tego samego Linux Kerneltwice (te same źródła, to samo środowisko, te same opcje, ten sam kompilator) i uzyskanie tej samej sumy kontrolnej. Ktoś wie, jak to zrobić?Jak zbudować to samo jądro Linux dwa razy i uzyskać tę samą sumę kontrolną?
Odpowiedz
Data kompilacji jest zawarta w wersji, zobacz startowych version.c:
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
i UTS_VERSION jest zdefiniowana w include/linux/compile.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 są generowane przez skrypty/mkcompile_h, gdzie można znaleźć następującą linię:
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS `LC_ALL=C LANG=C date`"
Po usunięciu date
z linii przeczącej powinieneś być w stanie pozbyć się zależności czasu kompilacji.
Najszybszym sposobem sprawdzenia byłoby zrobienie, wykonanie kopii, oczyszczenie, a następnie ponowne wykonanie. Jeśli suma kontrolna jest zgodna, to jest możliwa. Jeśli nie, to sugeruje to, że Make modyfikuje niektóre pliki źródłowe w jakiś sposób (numeracja kompilacji, data kompilacji itp.).
Prawdopodobnie budowanie jądra w tym samym środowisku da taką samą sumę kontrolną. Tak więc ten sam kompilator (ta sama wersja tego samego kompilatora), dokładnie to samo źródło, te same zależności (jeśli to dotyczy nawet kompilacji jądra), itp.
Nawet z dokładnie tą samą konfiguracją środowiska (te same źródła, ten sam kompilator i te same zależności), dwie kolejne kompilacje dają inną sumę kontrolną. Myślę, że problem dotyczy opcji kompilacji i nie wiem, które opcje kompilacji można zmienić, aby uzyskać tę samą sumę kontrolną bez modyfikowania poprawności jądra. – gsempe
Nawet prosty świat hello skompilowany dwukrotnie powoduje różne pliki binarne. W jakiś sposób linker dodaje pewne informacje, które zmieniają się w każdej kompilacji.
Czy to nadal prawda, gdy wynikowy plik binarny jest usuwany? – shodanex
Odpowiedź shodanex jest słuszna, ale niekompletna. Po kilku badaniach znalazłem binaria jądra Linuksa osadzające domyślne ramfy, co jest kolejnym powodem różnic między kompilacjami jądra (data osadzenia nagłówka CPIO RAMFS). Nie można wyłączyć tej funkcji, ale możliwe jest podanie domyślnych ramfów. Po wykonaniu tej czynności otrzymasz dokładnie taką samą sumę kontrolną.
Dziękuję. Twoje odpowiedzi bardzo mi pomogą rozwiązać mój problem.
@ gsempe, chciałbyś poszukać tego: "Ustaw deterministyczny kernel" ref. http://lwn.net/Articles/437864/
możliwe jest, aby pozbyć się niektórych źródeł hałasu (hałas ... jest w oku patrzącego ;-)
Świetny dodatek, ale rozwiązałem mój problem. Sprawdź tutaj http://stackoverflow.com/a/1214926/21052 – gsempe
- 1. Jak obliczyć sumę kontrolną
- 2. Skycons, cant wyświetlają tę samą ikonę dwa razy?
- 3. Jak wymienić tę samą postać kilka razy?
- 4. aplikacja Kolba GET powrocie to samo dwa razy
- 5. Jak uzyskać sumę kontrolną SHA-1/MD5 pliku z Qt?
- 6. Jak zmienić sumę kontrolną modułu w minizrzadku?
- 7. Jak obliczyć SHA256 sumę kontrolną pliku Przejdź
- 8. LISP: jak zdobyć sumę kontrolną? (bez zmiennej globalnej)
- 9. Jak przetestować dwa terminy dateTimes na tę samą datę?
- 10. Możliwe, że mają tę samą umowę, to samo wiązanie, ten sam adres, ale różne porty?
- 11. Oblicz sumę kontrolną MD5 dla pliku
- 12. Czy mogę zadeklarować tę samą zmienną dwa razy w różnych pętlach w JavaScript?
- 13. To samo pod-zapytanie używane wiele razy w pojedynczym zapytaniu
- 14. Jak skonfigurować jądro Linux w Buildroot?
- 15. jądro Linux mutexes
- 16. Buduj nowoczesne (4.x) GCC, aby skierować jądro 2.4.x na tę samą architekturę co host?
- 17. Jeden obiekt dwa klucze obce na tę samą tabelę
- 18. Jak uzyskać tę samą sesję subdomen w Grails
- 19. Jak obliczyć sumę kontrolną Internetu z bajtu [] w Javie
- 20. Jak wygenerować sumę kontrolną MD5 dla pliku w systemie Android?
- 21. Jak obliczyć sumę kontrolną md5 pliku w Pythonie?
- 22. Łączenie w sumę kontrolną Moongoose $ nie pasuje do identyfikatora
- 23. Oblicz sumę kontrolną na telefonie iPhone od NSData
- 24. float: lewy wypełnij tę samą kolumnę, gdzie to możliwe
- 25. Jak udostępnić tę samą zmienną między modułami?
- 26. Jak uzyskać skumulowaną sumę
- 27. System.Random nadal zwraca tę samą wartość
- 28. Proces VS wątku: czy dwa procesy mogą współużytkować tę samą pamięć współdzieloną? czy dwa wątki?
- 29. Jak ustawić tę samą szerokość i wysokość przycisku?
- 30. Jak zrobić tę samą szerokość wskaźnika Tablayout i tekstu
Edition @RamenChef nie ma żadnego sensu ... Czy to rzeczywiście możliwe, że StackOverflow staje się tak zły? – gsempe