gse*_*mpe 6 linux binary kernel checksum binary-reproducibility
我正在搜索是否可以构建相同的Linux Kerneltwice(相同的源,相同的环境,相同的选项,相同的编译器)并获得相同的校验和.谁知道怎么做?
构建日期包含在版本中,请参阅init version.c:
const char linux_banner[] =
"Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@"
LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "\n";
Run Code Online (Sandbox Code Playgroud)
和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) "
Run Code Online (Sandbox Code Playgroud)
compile.h由scripts/mkcompile_h生成,您可以在其中找到以下行:
UTS_VERSION="$UTS_VERSION $CONFIG_FLAGS `LC_ALL=C LANG=C date`"
Run Code Online (Sandbox Code Playgroud)
通过date从上一行中删除,您应该能够摆脱构建时依赖性.
shodanex的答案是对的,但不完整.经过一些研究后我发现Linux内核二进制嵌入了一个默认的ramfs,这是两个内核编译之间差异的另一个原因(CPIO RAMFS头嵌入日期).禁用此功能是不可能的,但可以提供默认的ramfs.执行此操作时,您将获得完全相同的校验和.
谢谢.你的回答帮助我解决了我的问题.