uboot/tools/fit_info.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * (C) Copyright 2014
   4 * DENX Software Engineering
   5 * Heiko Schocher <hs@denx.de>
   6 *
   7 * fit_info: print the offset and the len of a property from
   8 *           node in a fit file.
   9 *
  10 * Based on:
  11 * (C) Copyright 2008 Semihalf
  12 *
  13 * (C) Copyright 2000-2004
  14 * DENX Software Engineering
  15 * Wolfgang Denk, wd@denx.de
  16 *
  17 * Updated-by: Prafulla Wadaskar <prafulla@marvell.com>
  18 *              FIT image specific code abstracted from mkimage.c
  19 *              some functions added to address abstraction
  20 *
  21 * All rights reserved.
  22 */
  23
  24#include "mkimage.h"
  25#include "fit_common.h"
  26#include <image.h>
  27#include <u-boot/crc.h>
  28
  29void usage(char *cmdname)
  30{
  31        fprintf(stderr, "Usage: %s -f fit file -n node -p property\n"
  32                         "          -f ==> set fit file which is used'\n"
  33                         "          -n ==> set node name'\n"
  34                         "          -p ==> set property name'\n",
  35                cmdname);
  36        exit(EXIT_FAILURE);
  37}
  38
  39int main(int argc, char **argv)
  40{
  41        int ffd = -1;
  42        struct stat fsbuf;
  43        void *fit_blob;
  44        int len;
  45        int  nodeoffset;        /* node offset from libfdt */
  46        const void *nodep;      /* property node pointer */
  47        char *fdtfile = NULL;
  48        char *nodename = NULL;
  49        char *propertyname = NULL;
  50        char cmdname[256];
  51        int c;
  52
  53        strncpy(cmdname, *argv, sizeof(cmdname) - 1);
  54        cmdname[sizeof(cmdname) - 1] = '\0';
  55        while ((c = getopt(argc, argv, "f:n:p:")) != -1)
  56                switch (c) {
  57                case 'f':
  58                        fdtfile = optarg;
  59                        break;
  60                case 'n':
  61                        nodename = optarg;
  62                        break;
  63                case 'p':
  64                        propertyname = optarg;
  65                        break;
  66                default:
  67                        usage(cmdname);
  68                        break;
  69                }
  70
  71        if (!fdtfile) {
  72                fprintf(stderr, "%s: Missing fdt file\n", *argv);
  73                usage(*argv);
  74        }
  75        if (!nodename) {
  76                fprintf(stderr, "%s: Missing node name\n", *argv);
  77                usage(*argv);
  78        }
  79        if (!propertyname) {
  80                fprintf(stderr, "%s: Missing property name\n", *argv);
  81                usage(*argv);
  82        }
  83        ffd = mmap_fdt(cmdname, fdtfile, 0, &fit_blob, &fsbuf, false, false);
  84
  85        if (ffd < 0) {
  86                printf("Could not open %s\n", fdtfile);
  87                exit(EXIT_FAILURE);
  88        }
  89
  90        nodeoffset = fdt_path_offset(fit_blob, nodename);
  91        if (nodeoffset < 0) {
  92                printf("%s not found.", nodename);
  93                exit(EXIT_FAILURE);
  94        }
  95        nodep = fdt_getprop(fit_blob, nodeoffset, propertyname, &len);
  96        if (len == 0) {
  97                printf("len == 0 %s\n", propertyname);
  98                exit(EXIT_FAILURE);
  99        }
 100
 101        printf("NAME: %s\n", fit_get_name(fit_blob, nodeoffset, NULL));
 102        printf("LEN: %d\n", len);
 103        printf("OFF: %d\n", (int)(nodep - fit_blob));
 104        (void) munmap((void *)fit_blob, fsbuf.st_size);
 105
 106        close(ffd);
 107        exit(EXIT_SUCCESS);
 108}
 109