6 Stimmen

Wie man den gleichen Linux-Kernel zweimal erstellt und die gleiche Prüfsumme erhält

Ich bin auf der Suche, ob es möglich ist, den gleichen Linux Kerneltwice (gleiche Quellen, gleiche Umgebung, gleiche Optionen, gleicher Compiler) zu bauen und die gleiche Prüfsumme zu erhalten. Weiß jemand, wie man das macht?

1 Stimmen

Edition von @RamenChef macht keinen Sinn... Ist es eigentlich möglich, dass StackOverflow so schlecht geworden ist?

8voto

shodanex Punkte 14453

Das Datum der Erstellung ist in der Version enthalten, siehe init version.c :

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

und UTS_VERSION ist in include/linux/compile.h definiert:

/* 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 wird von scripts/mkcompile_h generiert, wo Sie die folgende Zeile finden:

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

Durch das Entfernen der date aus der vorigen Zeile, sollten Sie in der Lage sein, die Abhängigkeit von der Erstellungszeit loszuwerden.

5voto

gsempe Punkte 5296

Die Antwort von shodanex ist richtig, aber unvollständig. Nach einigen Nachforschungen habe ich herausgefunden, dass die Linux-Kernel-Binärdatei ein Standard-RAMFS einbettet, was ein weiterer Grund für die Unterschiede zwischen den Kompilierungen der beiden Kernel ist (CPIO RAMFS-Header bettet Datum ein). Es ist nicht möglich, diese Funktion zu deaktivieren, aber es ist möglich, ein Standard-RAMFS bereitzustellen. Wenn Sie dies tun, erhalten Sie genau die gleiche Prüfsumme.

Ich danke Ihnen. Ihre Antworten helfen mir sehr, mein Problem zu lösen.

3voto

fgeorgatos Punkte 146

@gsempe, das sollten Sie sich ansehen: "Kernel-Build deterministisch machen" ref. http://lwn.net/Articles/437864/

es ist möglich, bestimmte Lärmquellen zu beseitigen (Lärm liegt ... im Auge des Betrachters ;-)

1voto

FelipeC Punkte 7866

Selbst ein einfaches "Hallo Welt", das zweimal kompiliert wird, führt zu unterschiedlichen Binärdateien. Irgendwie fügt der Linker einige Informationen hinzu, die sich bei jedem Build ändern.

0voto

PaulJWilliams Punkte 18533

Der schnellste Weg, dies zu überprüfen, wäre, eine Kopie zu machen, sie zu säubern und dann erneut zu machen. Wenn die Prüfsumme übereinstimmt, dann ist es möglich. Wenn nicht, dann deutet das darauf hin, dass Make einige Quelldateien auf irgendeine Weise verändert (Build-Nummerierung, Build-Datum usw.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X