u-boot编译技巧利用——编译时间

本文介绍如何在U-Boot启动时自动显示版本编译时间和日期,通过提取Makefile中的关键代码实现这一功能,提升软件管理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每次我们重新编译u-boot的时候,运行起来总会看到以下信息:、

U-Boot 2009.08 (Feb 16 2011 - 10:29:10)

DRAM:  64 MB
Flash:  0 kB
NAND:  64 MiB
In:    serial
Out:   serial
Err:   serial
dm9000 i/o: 0x18000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
Net:   dm9000
Hit any key to stop autoboot:  3

红色这行给我们的提示:u-boot的版本,编译时间。

这样每次我们启动程序都可以看到编译时间,对于软件管理有很大的帮助,我就提取了这个技巧。

u-boot目录下的Makefile有以下这几行:

第24行:

VERSION = 2009
PATCHLEVEL = 08
SUBLEVEL =
EXTRAVERSION =
ifneq "$(SUBLEVEL)" ""
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
else
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
endif


第378行:

TIMESTAMP_FILE = $(obj)include/timestamp_autogenerated.h
VERSION_FILE = $(obj)include/version_autogenerated.h

$(VERSION_FILE):
  @( printf '#define U_BOOT_VERSION "U-Boot %s%s"\n' "$(U_BOOT_VERSION)" \
   '$(shell $(TOPDIR)/tools/setlocalversion $(TOPDIR))' ) >
$@.tmp
  @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@

$(TIMESTAMP_FILE):
  @date +'#define U_BOOT_DATE "%b %d %C%y"' > $@
  @date +'#define U_BOOT_TIME "%T"' >> $@

 

linux内核Makefile也有同样的功能,我提取了提示编译者和编译主机。整合之后就是以下的:

VERSION = 2011
PATCHLEVEL = 12
SUBLEVEL =
EXTRAVERSION = -rc1
ifneq "$(SUBLEVEL)" ""
ATE_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
else
ATE_VERSION = $(VERSION).$(PATCHLEVEL)$(EXTRAVERSION)
endif
VERSION_FILE = version.h  //全部都放在version.h头文件

 

all: $(VERSION_FILE)  ate  //必须放在被调用的文件之前生成,这里ate是最后要生成的文件,包含了version.h,所以必须放在后面。

$(VERSION_FILE):  //生成这个文件,
 @(printf '#define ATE_VERSION "ATE-GXV31XX %s "\n' "$(ATE_VERSION)") > $@
  @date +'#define ATE_DATE "%b %d %C%y"' >> $@
  @date +'#define ATE_TIME "%T"' >> $@
  @echo \#define ATE_COMPILE_BY \"`whoami`\" >> $@
  @echo \#define ATE_COMPILE_HOST \"`hostname`\" >> $@

 

clean:
 rm -f *.o ate

 rm -f $(VERSION_FILE)

实例中应包括:

#include "version.h"

const char version_string[] =
 ATE_VERSION " " ATE_COMPILE_BY "@" ATE_COMPILE_HOST" (" ATE_DATE " - " ATE_TIME ")";

    printf("\n\n***********************************************************\n");
    printf ("\n\n\n%s\n\n\n", version_string);
    printf("\n***********************************************************\n\n");

 

一点点小技巧 奋斗,积少成多。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值