Как создать то же Ядро Linux дважды источники и получить ту же контрольную сумму

Не используйте наследование, если не можете объяснить, зачем оно вам нужно.

6
задан RamenChef 10 November 2016 в 19:25
поделиться

5 ответов

Дата сборки включена в версию, см. 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: создается

/* 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 by scripts / mkcompile_h, где вы найдете следующую строку:

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

Удалив дату из предыдущей строки, вы сможете избавиться от зависимости времени сборки.

8
ответ дан 8 December 2019 в 14:45
поделиться

Даже простой дважды скомпилированный hello world приводит к разным двоичным файлам. Каким-то образом компоновщик добавляет некоторую информацию, которая изменяется в каждой сборке.

1
ответ дан 8 December 2019 в 14:45
поделиться

Самый быстрый способ проверить - это сделать, снять копию, очистить, а затем сделать снова. Если контрольная сумма совпадает, то это возможно. Если нет, то это говорит о том, что Make каким-то образом изменяет некоторые исходные файлы (нумерацию сборки, дату сборки и т. Д.)

0
ответ дан 8 December 2019 в 14:45
поделиться

Предположительно, сборка ядра в той же среде приведет к той же контрольной сумме. Итак, тот же компилятор (та же версия того же компилятора), точно тот же источник, те же зависимости (если это даже применимо к компиляции ядра) и т. Д.

0
ответ дан 8 December 2019 в 14:45
поделиться

Ответ Shodanex правильный, но неполный. После некоторого исследования я обнаружил, что двоичный файл ядра Linux включает ramfs по умолчанию, что является еще одной причиной различий между компиляциями двух ядер (заголовок CPIO RAMFS включает дату). Отключить эту функцию невозможно, но можно указать ramfs по умолчанию. Когда вы это сделаете, вы получите точно такую ​​же контрольную сумму.

Спасибо. Ваши ответы очень помогают мне решить мою проблему.

5
ответ дан 8 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: