linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexandre Torgue <alexandre.torgue@st.com>
To: <robh+dt@kernel.org>, Frank Rowand <frowand.list@gmail.com>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Michal Marek <michal.lkml@markovi.net>,
	<david@gibson.dropbear.id.au>, <sjg@chromium.org>
Cc: <devicetree@vger.kernel.org>,
	Alexandre Torgue <alexandre.torgue@st.com>,
	<linux-kernel@vger.kernel.org>, <linux-kbuild@vger.kernel.org>,
	<devicetree-compiler@vger.kernel.org>
Subject: [RFC PATCH 1/3] dtc: Add dtb build information option
Date: Mon, 13 Jan 2020 19:16:23 +0100	[thread overview]
Message-ID: <20200113181625.3130-2-alexandre.torgue@st.com> (raw)
In-Reply-To: <20200113181625.3130-1-alexandre.torgue@st.com>

This commit adds the possibility to add build information for a DTB.
Build information can be: build date, DTS version, "who built the DTB"
(same kind of information that we get in Linux with the Linux banner).

To do this, an extra option "-B" using an information file as argument
has been added. If this option is used, input device tree is appended with
a new string property "Build-info". This property is built with information
found in information file given as argument. This file has to be generated
by user and shouldn't exceed 256 bytes.

Signed-off-by: Alexandre Torgue <alexandre.torgue@st.com>

diff --git a/scripts/dtc/dtc.c b/scripts/dtc/dtc.c
index bdb3f5945699..294828bac20b 100644
--- a/scripts/dtc/dtc.c
+++ b/scripts/dtc/dtc.c
@@ -18,6 +18,7 @@ int padsize;		/* Additional padding to blob */
 int alignsize;		/* Additional padding to blob accroding to the alignsize */
 int phandle_format = PHANDLE_EPAPR;	/* Use linux,phandle or phandle properties */
 int generate_symbols;	/* enable symbols & fixup support */
+int generate_build_info;	/* Add build information: time, source version ... */
 int generate_fixups;		/* suppress generation of fixups on symbol support */
 int auto_label_aliases;		/* auto generate labels -> aliases */
 int annotate;		/* Level of annotation: 1 for input source location
@@ -45,9 +46,42 @@ static void fill_fullpaths(struct node *tree, const char *prefix)
 		fill_fullpaths(child, tree->fullpath);
 }
 
+static void fill_build_info(struct node *tree, const char *fname)
+{
+	struct data d = empty_data;
+	char *tmp;
+	FILE *f;
+	int len;
+
+	tmp = xmalloc(sizeof(char) * 256);
+
+	f = fopen(fname, "r");
+	if (!f) {
+		printf("Can't open file %s\n", fname);
+		return;
+	}
+
+	len = fread(tmp, sizeof(char), 256, f);
+	if (!len) {
+		printf("Can't read file %s\n", fname);
+		fclose(f);
+		free(tmp);
+	}
+	fclose(f);
+
+	tmp[len - 1] = '\0';
+
+	d = data_add_marker(d, TYPE_STRING, tmp);
+	d = data_append_data(d, tmp, len);
+
+	add_property(tree, build_property("Build-info", d, NULL));
+
+	free(tmp);
+}
+
 /* Usage related data. */
 static const char usage_synopsis[] = "dtc [options] <input file>";
-static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@AThv";
+static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:a:fb:i:H:sW:E:@AT:B:hv";
 static struct option const usage_long_opts[] = {
 	{"quiet",            no_argument, NULL, 'q'},
 	{"in-format",         a_argument, NULL, 'I'},
@@ -69,6 +103,7 @@ static struct option const usage_long_opts[] = {
 	{"symbols",	     no_argument, NULL, '@'},
 	{"auto-alias",       no_argument, NULL, 'A'},
 	{"annotate",         no_argument, NULL, 'T'},
+	{"build-info",	      a_argument, NULL, 'B'},
 	{"help",             no_argument, NULL, 'h'},
 	{"version",          no_argument, NULL, 'v'},
 	{NULL,               no_argument, NULL, 0x0},
@@ -106,6 +141,7 @@ static const char * const usage_opts_help[] = {
 	"\n\tEnable generation of symbols",
 	"\n\tEnable auto-alias of labels",
 	"\n\tAnnotate output .dts with input source file and line (-T -T for more details)",
+	"\n\tAdd build information (date, version, ...) in the blob",
 	"\n\tPrint this help and exit",
 	"\n\tPrint version and exit",
 	NULL,
@@ -164,6 +200,7 @@ int main(int argc, char *argv[])
 	const char *outform = NULL;
 	const char *outname = "-";
 	const char *depname = NULL;
+	const char *version = NULL;
 	bool force = false, sort = false;
 	const char *arg;
 	int opt;
@@ -256,9 +293,12 @@ int main(int argc, char *argv[])
 		case 'T':
 			annotate++;
 			break;
-
 		case 'h':
 			usage(NULL);
+		case 'B':
+			version = optarg;
+			generate_build_info = 1;
+			break;
 		default:
 			usage("unknown option");
 		}
@@ -296,14 +336,17 @@ int main(int argc, char *argv[])
 	}
 	if (annotate && (!streq(inform, "dts") || !streq(outform, "dts")))
 		die("--annotate requires -I dts -O dts\n");
-	if (streq(inform, "dts"))
+	if (streq(inform, "dts")) {
 		dti = dt_from_source(arg);
-	else if (streq(inform, "fs"))
+		if (generate_build_info)
+			fill_build_info(dti->dt, version);
+	} else if (streq(inform, "fs")) {
 		dti = dt_from_fs(arg);
-	else if(streq(inform, "dtb"))
+	} else if (streq(inform, "dtb")) {
 		dti = dt_from_blob(arg);
-	else
+	} else {
 		die("Unknown input format \"%s\"\n", inform);
+	}
 
 	dti->outname = outname;
 
-- 
2.17.1


  reply	other threads:[~2020-01-13 18:16 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-13 18:16 [RFC PATCH 0/3] Add device tree build information Alexandre Torgue
2020-01-13 18:16 ` Alexandre Torgue [this message]
2020-01-16  0:57   ` [RFC PATCH 1/3] dtc: Add dtb build information option David Gibson
2020-01-16  8:58     ` Alexandre Torgue
2020-01-17  9:09       ` David Gibson
2020-01-17 14:43         ` Rob Herring
2020-01-17 15:11           ` Alexandre Torgue
2020-01-19  6:40             ` David Gibson
2020-01-19  6:39           ` David Gibson
2020-01-21 15:59             ` Rob Herring
2020-01-21 17:18               ` Steve McIntyre
2020-01-23  5:13               ` David Gibson
2020-01-23 14:05                 ` Rob Herring
2020-01-20 18:17           ` Steve McIntyre
2020-01-22 18:00             ` Alexandre Torgue
2020-01-22 19:54               ` Frank Rowand
2020-01-13 18:16 ` [RFC PATCH 2/3] of: fdt: print dtb build information Alexandre Torgue
2020-01-13 18:16 ` [RFC PATCH 3/3] scripts: Use -B dtc option to generate " Alexandre Torgue
2020-01-17 19:20   ` Frank Rowand
2020-01-22 19:54     ` Frank Rowand
2020-01-20 16:16   ` Frank Rowand
2020-01-15 15:56 ` [RFC PATCH 0/3] Add device tree " Steve McIntyre
2020-01-16  2:28 ` Frank Rowand
2020-01-16  8:19   ` Alexandre Torgue
2020-01-17 19:13     ` Frank Rowand
2020-01-20 10:56       ` Alexandre Torgue
2020-01-20 16:14         ` Frank Rowand
2020-01-20 18:28           ` Steve McIntyre
2020-01-21  3:20             ` Frank Rowand
2020-01-21  3:39               ` Frank Rowand
2020-01-21 17:10               ` Steve McIntyre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200113181625.3130-2-alexandre.torgue@st.com \
    --to=alexandre.torgue@st.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=devicetree-compiler@vger.kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=frowand.list@gmail.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=michal.lkml@markovi.net \
    --cc=robh+dt@kernel.org \
    --cc=sjg@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).