add version info
1.0.0
嵌入式程序员经常在链接后面临将校验和插入二进制文件的任务。然后,引导加载程序可以在允许固件更新或运行程序之前验证校验和。
add_version_info是一个小型Python脚本,可以将版本控制信息和校验和校验和校验插入精灵或二进制固件图像中。
该工具将在固件图像中搜索两个16个字节标记,并使用当前的git或subversion ID,校验和构建时间信息填充结构。校验和锻造,因此在整个图像上运行CRC32检查将产生所需的校验和。
version.h #include <stdint.h>
#define VCS_INFO_START "VCSINFO2_START->"
#define VCS_INFO_END "<---VCSINFO2_END"
struct version_info {
char vcs_info_start [ 16 ];
// set by add-version-info.py
//
uint32_t image_crc ;
uint32_t image_start ;
uint32_t image_size ;
char vcs_id [ 32 ];
char build_user [ 16 ];
char build_host [ 16 ];
char build_date [ 16 ];
char build_time [ 16 ];
// set at compile-time
//
char product_name [ 32 ];
int major ;
int minor ;
int patch ;
char vcs_info_end [ 16 ];
};
extern volatile const struct version_info version_info ;
void print_version_info ( int verbose );version.c #include "version.h"
volatile const struct version_info version_info = {
. vcs_info_start = VCS_INFO_START ,
. product_name = "add_version_info example" ,
. major = 1 ,
. minor = 2 ,
. patch = 3 ,
. vcs_info_end = VCS_INFO_END
};
void print_version_info ( const struct version_info * v )
{
printf (
"%s v%d.%d.%d %s %s %sn"
" Compiled %s %s by %s on %sn"
v -> product_name ,
v -> major , v -> minor , v -> patch ,
v -> vcs_id ,
v -> build_date , v -> build_time ,
v -> build_date , v -> build_time ,
v -> build_user , v -> build_host
);
}
void main ( void )
{
print_version_info ( & version_info );
}Makefile规则 # Link: create ELF output file from object files
#
$( TARGET ) .elf : $( OBJECTS )
@echo
@echo Linking: $@
$( CC ) $( OBJECTS ) $( LDFLAGS ) --output $( basename $@ ) .tmp
@echo
@echo Post-processing: $@
add-version-info.py -v $(basename $@).tmp $@