firmware-utils: bcm4908img: use "info" command displaying file info
authorRafał Miłecki <rafal@milecki.pl>
Fri, 2 Apr 2021 12:12:58 +0000 (14:12 +0200)
committerRafał Miłecki <rafal@milecki.pl>
Mon, 5 Apr 2021 08:03:59 +0000 (10:03 +0200)
BCM4908 image format contains some info that may be useful for info /
debugging purposes.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
tools/firmware-utils/src/bcm4908img.c

index 16e0afe9de1343a214ade3defdc0e66f7fed6c22..56a790423b7e6ad5c8c8108f4272b487b0a89e66 100644 (file)
@@ -262,32 +262,39 @@ static int bcm4908img_parse(FILE *fp, struct bcm4908img_info *info) {
 }
 
 /**************************************************
- * Check
+ * Info
  **************************************************/
 
-static int bcm4908img_check(int argc, char **argv) {
+static int bcm4908img_info(int argc, char **argv) {
        struct bcm4908img_info info;
        const char *pathname = NULL;
        FILE *fp;
+       int c;
        int err = 0;
 
-       if (argc >= 3)
-               pathname = argv[2];
+       while ((c = getopt(argc, argv, "i:")) != -1) {
+               switch (c) {
+               case 'i':
+                       pathname = optarg;
+                       break;
+               }
+       }
 
        fp = bcm4908img_open(pathname, "r");
        if (!fp) {
-               fprintf(stderr, "Failed to open %s\n", pathname);
+               fprintf(stderr, "Failed to open BCM4908 image\n");
                err = -EACCES;
                goto out;
        }
 
        err = bcm4908img_parse(fp, &info);
        if (err) {
-               fprintf(stderr, "Failed to parse %s\n", pathname);
+               fprintf(stderr, "Failed to parse BCM4908 image\n");
                goto err_close;
        }
 
-       printf("Found a valid BCM4908 image (crc: 0x%08x)\n", info.crc32);
+       printf("Vendor header length:\t%zu\n", info.vendor_header_size);
+       printf("Checksum:\t0x%08x\n", info.crc32);
 
 err_close:
        bcm4908img_close(fp);
@@ -438,8 +445,9 @@ out:
 static void usage() {
        printf("Usage:\n");
        printf("\n");
-       printf("Checking a BCM4908 image:\n");
-       printf("\tbcm4908img check <file>\t\t\tcheck if images is valid\n");
+       printf("Info about a BCM4908 image:\n");
+       printf("\tbcm4908img info <options>\n");
+       printf("\t-i <file>\t\t\t\tinput BCM490 image\n");
        printf("\n");
        printf("Creating a new BCM4908 image:\n");
        printf("\tbcm4908img create <file> [options]\n");
@@ -450,8 +458,9 @@ static void usage() {
 
 int main(int argc, char **argv) {
        if (argc > 1) {
-               if (!strcmp(argv[1], "check"))
-                       return bcm4908img_check(argc, argv);
+               optind++;
+               if (!strcmp(argv[1], "info"))
+                       return bcm4908img_info(argc, argv);
                else if (!strcmp(argv[1], "create"))
                        return bcm4908img_create(argc, argv);
        }