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

[-- Attachment #1: Type: text/plain, Size: 5660 bytes --]

On Mon, Jan 13, 2020 at 07:16:23PM +0100, Alexandre Torgue wrote:
> 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>

At the very least, this patch of the series will need to be sent to
upstream dtc first.

I'm also not terribly clear on what you're trying to accomplish here,
and why it's useful.

Since you're doing this specifically for use with dtbs built in the
kernel build, could you just use a:
	Build-info = /incbin/ "build-info.txt";
in each of the in-kernel .dts files?

Altough you probably shouldn't use "Build-info" since it doesn't match
device tree property naming conventions.  My suggestion would be
"linux,build-info".

> 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);

You have no useful error reporting if the file is larger than the limit.

> +
> +	tmp[len - 1] = '\0';
> +
> +	d = data_add_marker(d, TYPE_STRING, tmp);
> +	d = data_append_data(d, tmp, len);

You can essentially do this better with data_copy_file().

> +
> +	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;
>  

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2020-01-16  0:57 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 ` [RFC PATCH 1/3] dtc: Add dtb build information option Alexandre Torgue
2020-01-16  0:57   ` David Gibson [this message]
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=20200116005741.GB54439@umbus \
    --to=david@gibson.dropbear.id.au \
    --cc=alexandre.torgue@st.com \
    --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).