diff options
author | Jonas Gorski <jogo@openwrt.org> | 2012-05-27 13:22:19 +0000 |
---|---|---|
committer | Jonas Gorski <jogo@openwrt.org> | 2012-05-27 13:22:19 +0000 |
commit | b31108e0a8b1a747c07ddefbd688436e7d604830 (patch) | |
tree | 5d668e1907b27abe90ca5949be218265a759f6b9 /tools/firmware-utils/src/imagetag_cmdline.c | |
parent | 226b030e4472a095faf9d48dd8b2e07556ab8b24 (diff) | |
download | upstream-b31108e0a8b1a747c07ddefbd688436e7d604830.tar.gz upstream-b31108e0a8b1a747c07ddefbd688436e7d604830.tar.bz2 upstream-b31108e0a8b1a747c07ddefbd688436e7d604830.zip |
tools: imagetag: add parameter for padding images
Allow images to be padded to a certain size. This prevents CFE from
flashing them to the second image offset.
SVN-Revision: 31875
Diffstat (limited to 'tools/firmware-utils/src/imagetag_cmdline.c')
-rw-r--r-- | tools/firmware-utils/src/imagetag_cmdline.c | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/tools/firmware-utils/src/imagetag_cmdline.c b/tools/firmware-utils/src/imagetag_cmdline.c index 91ac90b09d..efb82ac96b 100644 --- a/tools/firmware-utils/src/imagetag_cmdline.c +++ b/tools/firmware-utils/src/imagetag_cmdline.c @@ -58,12 +58,14 @@ const char *gengetopt_args_info_help[] = { " --inactive=flag-value Inactive Flag (2=not-specified). (possible \n values=\"0\", \"1\", \"2\" default=`2')", " --reserved2=STRING String for second reserved section.", " --kernel-file-has-header Indicates that the kernel file includes the \n kernel header with correct load address and \n entry point, so no changes are needed \n (default=off)", + " -p, --pad=size (in MiB) Pad the image to this size if smaller (in MiB)", 0 }; typedef enum {ARG_NO , ARG_FLAG , ARG_STRING + , ARG_INT } cmdline_parser_arg_type; static @@ -113,6 +115,7 @@ void clear_given (struct gengetopt_args_info *args_info) args_info->inactive_given = 0 ; args_info->reserved2_given = 0 ; args_info->kernel_file_has_header_given = 0 ; + args_info->pad_given = 0 ; } static @@ -165,6 +168,7 @@ void clear_args (struct gengetopt_args_info *args_info) args_info->reserved2_arg = NULL; args_info->reserved2_orig = NULL; args_info->kernel_file_has_header_flag = 0; + args_info->pad_orig = NULL; } @@ -199,6 +203,7 @@ void init_args_info(struct gengetopt_args_info *args_info) args_info->inactive_help = gengetopt_args_info_help[23] ; args_info->reserved2_help = gengetopt_args_info_help[24] ; args_info->kernel_file_has_header_help = gengetopt_args_info_help[25] ; + args_info->pad_help = gengetopt_args_info_help[26] ; } @@ -323,6 +328,7 @@ cmdline_parser_release (struct gengetopt_args_info *args_info) free_string_field (&(args_info->inactive_orig)); free_string_field (&(args_info->reserved2_arg)); free_string_field (&(args_info->reserved2_orig)); + free_string_field (&(args_info->pad_orig)); @@ -446,6 +452,8 @@ cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info) write_into_file(outfile, "reserved2", args_info->reserved2_orig, 0); if (args_info->kernel_file_has_header_given) write_into_file(outfile, "kernel-file-has-header", 0, 0 ); + if (args_info->pad_given) + write_into_file(outfile, "pad", args_info->pad_orig, 0); i = EXIT_SUCCESS; @@ -690,6 +698,9 @@ int update_arg(void *field, char **orig_field, case ARG_FLAG: *((int *)field) = !*((int *)field); break; + case ARG_INT: + if (val) *((int *)field) = strtol (val, &stop_char, 0); + break; case ARG_STRING: if (val) { string_field = (char **)field; @@ -702,6 +713,17 @@ int update_arg(void *field, char **orig_field, break; }; + /* check numeric conversion */ + switch(arg_type) { + case ARG_INT: + if (val && !(stop_char && *stop_char == '\0')) { + fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val); + return 1; /* failure */ + } + break; + default: + ; + }; /* store the original value */ switch(arg_type) { @@ -787,10 +809,11 @@ cmdline_parser_internal ( { "inactive", 1, NULL, 0 }, { "reserved2", 1, NULL, 0 }, { "kernel-file-has-header", 0, NULL, 0 }, + { "pad", 1, NULL, 'p' }, { 0, 0, 0, 0 } }; - c = getopt_long (argc, argv, "hVi:f:o:b:c:s:n:v:a:m:k:l:e:y:1:2:r:", long_options, &option_index); + c = getopt_long (argc, argv, "hVi:f:o:b:c:s:n:v:a:m:k:l:e:y:1:2:r:p:", long_options, &option_index); if (c == -1) break; /* Exit from `while (1)' loop. */ @@ -1010,6 +1033,18 @@ cmdline_parser_internal ( goto failure; break; + case 'p': /* Pad the image to this size if smaller (in MiB). */ + + + if (update_arg( (void *)&(args_info->pad_arg), + &(args_info->pad_orig), &(args_info->pad_given), + &(local_args_info.pad_given), optarg, 0, 0, ARG_INT, + check_ambiguity, override, 0, 0, + "pad", 'p', + additional_error)) + goto failure; + + break; case 0: /* Long option with no short option */ /* File with CFE to include in the image.. */ |