Chinaunix

标题: busybox config如何去掉时间戳(已解决) [打印本页]

作者: tqyou85    时间: 2013-07-02 10:12
标题: busybox config如何去掉时间戳(已解决)
本帖最后由 tqyou85 于 2013-07-22 16:24 编辑

busybox连续两次编译出来的.o、binary文件都不一致,比对了下,原因是编译生成文件中包含了时间信息。
busybox本身的代码是不包含__DATA__, __TIME__这些的,仔细比对了下.o文件,
发现libbb/messages.c文件包含有时间信息:
#define BANNER "BusyBox v" BB_VER " (" BB_EXTRA_VERSION ")"
还有其他几个文件有这个宏的使用,去掉时间信息之后,.o文件连续两次编译能保持一致了。


但是,每次编译都会自动生成一个autoconf.h,这个文件包含了时间信息,怀疑跟busybox的config有关,但是不知道该如何修改config文件?生成autoconf.h的时候不要包含时间信息。

各位大侠请指点下。

经过几天的仔细分析,终于找到解决方法了:
比较.o文件发现,.o文件的前面都有一段字符串,包含时间信息,进一步跟进代码,找到原来是这个宏:
#define BANNER "BusyBox v" BB_VER " (" BB_EXTRA_VERSION ")"
在代码中修改了这个宏定义,去掉时间信息。
进一步比较发现每次编译都会自动生成autoconf.h文件,这个文件每次生成都带有时间戳。研究busybox的编译脚本scripts/kconfig/confdata.c发现:
  1. env = getenv("KCONFIG_NOTIMESTAMP");
  2.     if (env && *env)
  3.         use_timestamp = 0;

  4.     fprintf(out, _("#\n"
  5.                "# Automatically generated make config: don't edit\n"
  6.                "# Busybox version: %s\n"
  7.                "%s%s"
  8.                "#\n"),
  9.              sym_get_string_value(sym),
  10.              use_timestamp ? "# " : "",
  11.              use_timestamp ? ctime(&now) : "");
复制代码
看来busybox还是设置有参数可以修改的,只需要定义下KCONFIG_NOTIMESTAMP这个环境变量,搞定。






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2