• 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的打印信息,可以清楚的显示该镜像的编译日期和时间,例如:

    1. U-Boot 2013.01 (Nov 12013 - 14:12:53)  
    2.   
    3. CPU0:  P2020E, Version: 2.1, (0x80ea0021)  
    4. Core:  E500, Version: 5.1, (0x80211051)  


    首先,查看u-boot的makefie

    1. depend dep:     $(TIMESTAMP_FILE) $(VERSION_FILE)   
    2.                 $(obj)include/autoconf.mk   
    3.                 $(obj)include/generated/generic-asm-offsets.h   
    4.                 $(obj)include/generated/asm-offsets.h  
    5.                 for dir in $(SUBDIRS) $(CPUDIR) $(LDSCRIPT_MAKEFILE_DIR) ; do   
    6.                         $(MAKE) -C $$dir _depend ; done  


    编译要依赖 $(TIMESTAMP_FILE)

    1. $(TIMESTAMP_FILE):  
    2.                 @mkdir -p $(dir $(TIMESTAMP_FILE))  
    3.                 @LC_ALL=C date +'#define U_BOOT_DATE "%b %d %C%y"' > $@.tmp  
    4.                 @LC_ALL=C date +'#define U_BOOT_TIME "%T"' >> $@.tmp  
    5.                 @cmp -s $@ $@.tmp && rm -f $@.tmp || mv -f $@.tmp $@  


    在编译的时候,可以动态生成$(TIMESTAMP_FILE)文件,里面动态包含了当前日期和时间

    1. TIMESTAMP_FILE = $(obj)include/generated/timestamp_autogenerated.h  


    查看u-boot代码,在一阶段初始化序列中会执行display_options

    1. int display_options (void)  
    2. {  
    3. #if defined(BUILD_TAG)  
    4.     printf (" %s, Build: %s ", version_string, BUILD_TAG);  
    5. #else  
    6.     printf (" %s ", version_string);  
    7. #endif  
    8.     return 0;  
    9. }  

    version_string字符串common/version.h定义

    U_BOOT_VERSION_STRING在inclue/version.h定义

    U_BOOT_DATE和U_BOOT_TIME这是在timestamp_autogenerated.h定义

    1. #define U_BOOT_VERSION_STRING U_BOOT_VERSION " (" U_BOOT_DATE " - "   
    2.     U_BOOT_TIME ")" CONFIG_IDENT_STRING  
    1. const char __weak version_string[] = U_BOOT_VERSION_STRING;  


    借鉴这个套路,可以轻松在C源码中获得日期和时间字符串来应用到需要的地方,下面是一个简单的测试

    目录结构

    1. auto_date.c  Makefile  tmp  


    C源码

    1. #include<stdio.h>  
    2. #include"tmp/auto.h"  
    3.   
    4. #define MY_STR "("MY_STR_DATE"---"MY_STR_TIME")"  
    5. int main()  
    6. {  
    7.         printf("%s ",MY_STR);  
    8.         return 0;  
    9.   
    10.   
    11. }  


    Makefile

      1. all:auto  
      2.         @gcc auto_date.c  
      3.         @echo compile completed   
      4. auto:  
      5.         @date +'#define MY_STR_DATE "%a %b %d %Y"' > tmp/auto.h  
      6.         @date +'#define MY_STR_TIME "%T"' >> tmp/auto.h  
      7. clean:  
      8.         rm tmp/auto.h  
      9.         rm a.out 
  • 相关阅读:
    _mysql.c(42) : fatal error C1083: Cannot open include file: 'config-win.h':问题的解决
    pycharm 插件的升级
    机器学习
    Python三大神器
    印记中文
    Emacs, Nano, or Vim 编辑器“三剑客”
    码云-中国的github
    代码质量管控的四个阶段
    <<创新之路>> 纪录片观后感
    API (Application Programming Interface) 文档大全
  • 原文地址:https://www.cnblogs.com/zym0805/p/6037562.html
Copyright © 2020-2023  润新知