summaryrefslogtreecommitdiff
path: root/common/tools/mksimage/mksimage.c
diff options
context:
space:
mode:
authorJérémy Dufour2012-11-08 14:26:01 +0100
committerJérémy Dufour2012-11-21 17:09:55 +0100
commitc5bda9a4ba9876340751449d9448623499413634 (patch)
tree27edfec5d31ac8099763783c1f9b907c06e93feb /common/tools/mksimage/mksimage.c
parent793602350fb63e999dd46c75370345f6515f02b9 (diff)
common/tools/mksimage: generate 200 and 300 image descriptor, refs #3452
mksimage is now able to generate image descriptor for 200 or 300 boards.
Diffstat (limited to 'common/tools/mksimage/mksimage.c')
-rw-r--r--common/tools/mksimage/mksimage.c81
1 files changed, 70 insertions, 11 deletions
diff --git a/common/tools/mksimage/mksimage.c b/common/tools/mksimage/mksimage.c
index 1ba533120d..ab921ac8c8 100644
--- a/common/tools/mksimage/mksimage.c
+++ b/common/tools/mksimage/mksimage.c
@@ -33,7 +33,7 @@
#include "spid_img_desc.h"
-spidcom_image_desc_t image = {
+spidcom_image_desc_300_t img_300 = {
.magic = SPIDCOM_IMG_DESC_MAGIC,
.index = 0xffffffff, /* mandatory to be changed into the flash */
.is_valid = 1,
@@ -44,10 +44,23 @@ spidcom_image_desc_t image = {
.arch = SPIDCOM_IMG_DESC_SPC300,
};
+spidcom_image_desc_200_t img_200 = {
+ .magic = SPIDCOM_IMG_DESC_MAGIC,
+ .index = 0xffffffff, /* mandatory to be changed into the flash */
+ .is_valid = 1,
+ .is_1st_boot = 1,
+ .is_not_success = 1,
+ .type = 0,
+ .arch = SPIDCOM_IMG_DESC_SPC200C,
+};
+
static void print_usage(const char *cmd)
{
- printf("Usage: %s [options]\n", cmd);
- printf("Generate a Spidcom header of a Linux image\n\n");
+ printf("Usage: %s -i (200|300) [options]\n", cmd);
+ printf("Generate a Spidcom header for a Linux image\n\n");
+ printf(" -i, --image=200|300\t set the image version (mandatory)\n"
+ "\t 200 is used for a SPC200 or a MSE500-200\n"
+ "\t 300 is used for a SPC300 or a MSE500-300\n");
printf(" -s, --size=S\t\t set size of the image to S bytes\n");
printf(" -v, --ver=V\t\t set version of the image to V\n");
printf(" -d, --desc=D\t\t set the description of the image to D\n");
@@ -57,11 +70,31 @@ static void print_usage(const char *cmd)
printf(" -h, --help\t\t print this message and exit\n");
}
+static spidcom_image_desc_image_type_t string_to_image_type (
+ const char *img_str)
+{
+ const char *imgs_str[SPIDCOM_IMG_DESC_IMAGE_TYPE_NB] = { "200", "300" };
+ int i;
+
+ for(i = 0; i < SPIDCOM_IMG_DESC_IMAGE_TYPE_NB; i++)
+ {
+ if(strcmp(img_str, imgs_str[i]) == 0)
+ {
+ return (spidcom_image_desc_image_type_t) i;
+ }
+ }
+ return SPIDCOM_IMG_DESC_IMAGE_TYPE_UNKNOWN;
+}
+
int main(int argc, char **argv)
{
int c, i = 0;
int j = 0;
char tmpstr[3];
+ spidcom_image_desc_image_type_t image_type
+ = SPIDCOM_IMG_DESC_IMAGE_TYPE_UNKNOWN;
+ void *img_generic = NULL;
+ int size_generic = -1;
uint32_t size = 0;
char version[64] = "v0.0";
@@ -77,10 +110,11 @@ int main(int argc, char **argv)
{ "md5", required_argument, NULL, 'm' },
{ "plc-ram", required_argument, NULL, 'r' },
{ "help", no_argument, NULL, 'h' },
+ { "image", required_argument, NULL, 'i' },
{ 0, 0, 0, 0 }
};
- while((c = getopt_long(argc, argv, "s:v:d:m:r:h", opt, &i)) != -1)
+ while((c = getopt_long(argc, argv, "s:v:d:m:r:i:h", opt, &i)) != -1)
{
switch(c)
{
@@ -107,6 +141,9 @@ int main(int argc, char **argv)
case 'h' :
print_usage(argv[0]);
return 0;
+ case 'i' :
+ image_type = string_to_image_type(optarg);
+ break;
case '?' :
/* getopt_long has already printed out an error, just exit. */
return -1;
@@ -116,13 +153,35 @@ int main(int argc, char **argv)
}
/* Fill image desc. */
- image.size = size;
- strncpy(image.version, version, sizeof(image.version));
- strncpy(image.description, description, sizeof(image.description));
- strncpy((char *)image.md5_sum, (const char *)md5_sum,
- sizeof(image.md5_sum));
- image.plc_ram = plc_ram;
+ switch (image_type)
+ {
+ case SPIDCOM_IMG_DESC_IMAGE_TYPE_200:
+ img_200.size = size;
+ strncpy(img_200.version, version, sizeof(img_200.version));
+ strncpy(img_200.description, description,
+ sizeof(img_200.description));
+ strncpy((char *)img_200.md5_sum, (const char *)md5_sum,
+ sizeof(img_200.md5_sum));
+ img_generic = &img_200;
+ size_generic = sizeof(spidcom_image_desc_200_t);
+ break;
+ case SPIDCOM_IMG_DESC_IMAGE_TYPE_300:
+ img_300.size = size;
+ strncpy(img_300.version, version, sizeof(img_300.version));
+ strncpy(img_300.description, description,
+ sizeof(img_300.description));
+ strncpy((char *)img_300.md5_sum, (const char *)md5_sum,
+ sizeof(img_300.md5_sum));
+ img_300.plc_ram = plc_ram;
+ img_generic = &img_300;
+ size_generic = sizeof(spidcom_image_desc_300_t);
+ break;
+ default:
+ fprintf(stderr, "You must specify an image type. See help (--help) "
+ "for more information.\n");
+ return 2;
+ }
- write(fileno(stdout), &image, sizeof(spidcom_image_desc_t));
+ write(fileno(stdout), img_generic, size_generic);
return 0;
}