u-boot 编译时间
给定的格式FORMAT 控制着输出,解释序列如下:
%% 一个文字的 %
%a 当前locale 的星期名缩写(例如: 日,代表星期日)
%A 当前locale 的星期名全称 (如:星期日)
%b 当前locale 的月名缩写 (如:一,代表一月)
%B 当前locale 的月名全称 (如:一月)
%c 当前locale 的日期和时间 (如:2005年3月3日 星期四 23:05:25)
%C 世纪;比如 %Y,通常为省略当前年份的后两位数字(例如:20)
%d 按月计的日期(例如:01)
%D 按月计的日期;等于%m/%d/%y
%e 按月计的日期,添加空格,等于%_d
%F 完整日期格式,等价于 %Y-%m-%d
%g ISO-8601 格式年份的最后两位 (参见%G)
%G ISO-8601 格式年份 (参见%V),一般只和 %V 结合使用
%h 等于%b
%H 小时(00-23)
%I 小时(00-12)
%j 按年计的日期(001-366)
%k hour, space padded ( 0..23); same as %_H
%l hour, space padded ( 1..12); same as %_I
%m month (01..12)
%M minute (00..59)
%n 换行
%N 纳秒(000000000-999999999)
%p 当前locale 下的"上午"或者"下午",未知时输出为空
%P 与%p 类似,但是输出小写字母
%r 当前locale 下的 12 小时时钟时间 (如:11:11:04 下午)
%R 24 小时时间的时和分,等价于 %H:%M
%s 自UTC 时间 1970-01-01 00:00:00 以来所经过的秒数
%S 秒(00-60)
%t 输出制表符 Tab
%T 时间,等于%H:%M:%S
%u 星期,1 代表星期一
%U 一年中的第几周,以周日为每星期第一天(00-53)
%V ISO-8601 格式规范下的一年中第几周,以周一为每星期第一天(01-53)
%w 一星期中的第几日(0-6),0 代表周一
%W 一年中的第几周,以周一为每星期第一天(00-53)
%x 当前locale 下的日期描述 (如:12/31/99)
%X 当前locale 下的时间描述 (如:23:13:48)
%y 年份最后两位数位 (00-99)
%Y 年份
%z +hhmm 数字时区(例如,-0400)
%:z +hh:mm 数字时区(例如,-04:00)
%::z +hh:mm:ss 数字时区(例如,-04:00:00)
%:::z 数字时区带有必要的精度 (例如,-04,+05:30)
%Z 按字母表排序的时区缩写 (例如,EDT)
U-BOOT的打印信息,可以清楚的显示该镜像的编译日期和时间,例如:
- U-Boot 2013.01 (Nov 19 2013 - 14:12:53)
- CPU0: P2020E, Version: 2.1, (0x80ea0021)
- Core: E500, Version: 5.1, (0x80211051)
首先,查看u-boot的makefie
- depend dep: $(TIMESTAMP_FILE) $(VERSION_FILE) \
- $(obj)include/autoconf.mk \
- $(obj)include/generated/generic-asm-offsets.h \
- $(obj)include/generated/asm-offsets.h
- for dir in $(SUBDIRS) $(CPUDIR) $(LDSCRIPT_MAKEFILE_DIR) ; do \
- $(MAKE) -C $$dir _depend ; done
编译要依赖 $(TIMESTAMP_FILE)
- $(TIMESTAMP_FILE):
- @mkdir -p $(dir $(TIMESTAMP_FILE))
- @LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > $@.tmp
- @LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> $@.tmp
- @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@
在编译的时候,可以动态生成$(TIMESTAMP_FILE)文件,里面动态包含了当前日期和时间
- TIMESTAMP_FILE = $(obj)include/generated/timestamp_autogenerated.h
查看u-boot代码,在一阶段初始化序列中会执行display_options
- int display_options (void)
- {
- #if defined(BUILD_TAG)
- printf ("\n\n%s, Build: %s\n\n", version_string, BUILD_TAG);
- #else
- printf ("\n\n%s\n\n", version_string);
- #endif
- return 0;
- }
version_string字符串common/version.h定义
U_BOOT_VERSION_STRING在inclue/version.h定义
U_BOOT_DATE和U_BOOT_TIME这是在timestamp_autogenerated.h定义
- #define U_BOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " - " \
- U_BOOT_TIME ")" CONFIG_IDENT_STRING
- const char __weak version_string[] = U_BOOT_VERSION_STRING;
借鉴这个套路,可以轻松在C源码中获得日期和时间字符串来应用到需要的地方,下面是一个简单的测试
目录结构
- auto_date.c Makefile tmp
C源码
- #include<stdio.h>
- #include"tmp/auto.h"
- #define MY_STR "("MY_STR_DATE"---"MY_STR_TIME")"
- int main()
- {
- printf("%s\n",MY_STR);
- return 0;
- }
Makefile
- all:auto
- @gcc auto_date.c
- @echo compile completed
- auto:
- @date +'#define MY_STR_DATE "%a %b %d %Y"' > tmp/auto.h
- @date +'#define MY_STR_TIME "%T"' >> tmp/auto.h
- clean:
- rm tmp/auto.h
- rm a.out
u-boot 编译时间的更多相关文章
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #6 使用localmodconfig缩短编译时间
HACK #6 使用localmodconfig缩短编译时间 本节介绍使用make localmodconfig生成精简的.config文件,缩短内核编译时间的方法.为了能够应对各种各样的环境,发布版 ...
- 代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值?
代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值? 解决:通过vs的预先生成命令中,添加批处理命令,删除对应的obj文件方式,强制 ...
- API查看Web App发布版本+编译时间+环境变量
项目环境: JDK7+Maven3.04 项目架构:SpringMVC 方法一:API访问Maven生成的MANIFEST.MF 1. 在pom.xml中添加jar包支持 <dependency ...
- C#获取程序集自动增加的版本号和编译时间
1. 首先找到文件AssemblyInfo.cs, 路径如下: 2. 修改版本的格式,修改后,程序每次编译,程序集的版本号都会自增. 修改前: [assembly: AssemblyVersion(& ...
- 如何把apk编译时间和最后次git commit的sha值,写入到app中
需求背景:我们修复Bug的时候,频繁提交APK包,导致测试同学搞不清哪个包才是最新的 比如一个版本3.0.1,我们可能后续基于这个版本陆续提交了好几个修复包 同时,如果服务端ip地址能在界面上配置的话 ...
- 减少C++代码编译时间的方法
c++ 的代码包含头文件和实现文件两部分, 头文件一般是提供给别人(也叫客户)使用的, 但是一旦头文件发生改变,不管多小的变化,所有引用他的文件就必须重新编译,编译就要花时间,假如你做的工程比较大(比 ...
- C#获取程序集的版本号和最后编译时间
C#获取程序集的版本号:string ver = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToStrin ...
- C++ 获取程序编译时间
一个简单的需求,就是需要程序判断当前系统的时间是不是在程序编译之后的,如果系统当前时间在编译之前,那说明这台机器的时间是不正确的,需要终止程序运行. 因为要在程序编译时候获取时间,如果每次编译前手动修 ...
- unity shader 编译时间过长
去掉opengles2.0能省一半时间 换ssd Compiled shader 'Shader Forge/Scenes_Ground_Standard_M' in 315.51s gles ...
- VC使用编译时间作为版本号
常用方法分两步:1. 得到编译时间:2. 设置基准时间,以编译时间距基准时间的总天数的2倍作为版本号,适当情况还可加上初值: 其中第一步实现有两种方法: 1. 直接使用系统宏:CString OcxT ...
随机推荐
- String字符串
主要来源:http://www.cnblogs.com/devinzhang/archive/2012/01/25/2329463.html http://blog.csdn.net/qh_java/ ...
- [CF245H] Queries for Number of Palindromes (容斥原理dp计数)
题目链接:http://codeforces.com/problemset/problem/245/H 题目大意:给你一个字符串s,对于每次查询,输入为一个数对(i,j),输出s[i..j]之间回文串 ...
- 构造方法Constructor
构造函数的名称与类名相同,没有返回值类型,主要用于在创建对象的时候进行一些初始化操作,如一个类中没有构造方法,java会默认给一个无参的构造方法
- JSP+Servlet中使用cos.jar进行图片上传(文件上传亦然)
链接:JSP+Servlet中使用jspsmartupload.jar进行图片上传下载 关于cos.jar,百度百科只有这么几句话(http://baike.baidu.com/subview/406 ...
- COSBench性能测试配置--一张图说明一切
COSBench性能测试配置--一张图说明一切: 测试配置,并发数,运行时间设置
- sql 简单事务例子
BEGIN TRY BEGIN TRAN ) BEGIN UPDATE table SET ... END ELSE BEGIN UPDATE table SET ... UPDATE table S ...
- review过去的10年
本科毕业有10个年头多了,如果对我的博客做一个主题分析,还真能发现一些规律,这里总结一下: 1. 活跃度 本科毕业最后一学期是思维最活跃的阶段,人生面临很多的变化和挑战,心态相对还不错. 从来北京以 ...
- 在php中写接口时 对json格式的转换 简单的方法
方法 一 方法二 可以通过urlencode();遍历出来
- linux 搭建 nexus 私服及配置
安装篇 1.tar -zxvf nexus-latest-bundle.tar.gz 2.cd nexus-2.13.0-01/bin 3../nexus start 这时可能提示 ********* ...
- uniDBGrid导入数据库(转红鱼儿)
有朋友问如何将excel导入数据库,这是我做的uniGUI项目中代码,实现uniDBGrid导入数据库的函数,因为用了kbmMW,所以你看到是将uniDBGrid导入kbmMWClientQuery, ...