add version info
1.0.0
غالبًا ما يواجه المبرمجون المضمنون المهمة لإدراج فحوصات في الثنائيات بعد الارتباط. يمكن لمحمل التمهيد التحقق من Checksum قبل السماح بتحديث البرنامج الثابت أو تشغيل البرنامج.
add_version_info هو برنامج نصي صغير من Python يمكنه إدراج معلومات التحكم في الإصدار والتحقق من صور ELF أو البرامج الثابتة.
ستقوم الأداة بالبحث عن اثنين من علامات البايت 16 في صورة البرامج الثابتة وملء بنية مع معرف GIT أو Subversion الحالي ، والتحقق من معلومات الوقت. يتم تزوير الفحص ، بحيث يؤدي تشغيل فحص 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 $@