diff options
Diffstat (limited to 'ubi-utils')
| -rw-r--r-- | ubi-utils/src/ubiformat.c | 22 | 
1 files changed, 20 insertions, 2 deletions
diff --git a/ubi-utils/src/ubiformat.c b/ubi-utils/src/ubiformat.c index fe7040e..345593c 100644 --- a/ubi-utils/src/ubiformat.c +++ b/ubi-utils/src/ubiformat.c @@ -59,6 +59,7 @@ struct args {  	int subpage_size;  	int vid_hdr_offs;  	int ubi_ver; +	uint32_t image_seq;  	off_t image_sz;  	long long ec;  	const char *image; @@ -68,7 +69,8 @@ struct args {  static struct args args =  { -	.ubi_ver = 1, +	.ubi_ver   = 1, +	.image_seq = -1,  };  static const char *doc = PROGRAM_NAME " version " PROGRAM_VERSION @@ -91,6 +93,8 @@ static const char *optionsstr =  "                             eraseblocks\n"  "-x, --ubi-ver=<num>          UBI version number to put to EC headers\n"  "                             (default is 1)\n" +"-Q, --image-seq=<num>        32-bit UBI image sequence number to use\n" +"                             (by default a random number is picked)\n"  "-y, --yes                    assume the answer is \"yes\" for all question\n"  "                             this program would otherwise ask\n"  "-q, --quiet                  suppress progress percentage information\n" @@ -130,6 +134,7 @@ static int parse_opt(int argc, char * const argv[])  	while (1) {  		int key;  		char *endp; +		unsigned long long image_seq;  		key = getopt_long(argc, argv, "nh?Vyqve:x:s:O:f:S:", long_options, NULL);  		if (key == -1) @@ -187,6 +192,14 @@ static int parse_opt(int argc, char * const argv[])  				return errmsg("bad UBI version: \"%s\"", optarg);  			break; +		case 'Q': +			image_seq = strtoul(optarg, &endp, 0); +			if (*endp != '\0'  || endp == optarg || image_seq > 0xFFFFFFFF) +				return errmsg("bad UBI image sequence number: \"%s\"", optarg); +			args.image_seq = image_seq; +			break; + +  		case 'v':  			args.verbose = 1;  			break; @@ -222,6 +235,11 @@ static int parse_opt(int argc, char * const argv[])  	if (args.image && args.novtbl)  		return errmsg("-n cannot be used together with -f"); +	if (!args.image_seq == -1) { +		srand(getpid()); +		args.image_seq = random(); +	} +  	args.node = argv[optind];  	return 0;  } @@ -872,7 +890,7 @@ int main(int argc, char * const argv[])  		normsg("use erase counter %lld for all eraseblocks", args.ec);  	ubigen_info_init(&ui, mtd.eb_size, mtd.min_io_size, mtd.subpage_size, -			 args.vid_hdr_offs, args.ubi_ver, 0); +			 args.vid_hdr_offs, args.ubi_ver, args.image_seq);  	if (si->vid_hdr_offs != -1 && ui.vid_hdr_offs != si->vid_hdr_offs) {  		/*  | 
