Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp7544047ybl; Thu, 16 Jan 2020 01:14:25 -0800 (PST) X-Google-Smtp-Source: APXvYqxvdG1G4nWjJDjl+YCqO3Ua2bnzNRFadccA7NRDNqww280E8h4Behiw/FSecjoIfjG41gYz X-Received: by 2002:a05:6830:16d1:: with SMTP id l17mr1158671otr.21.1579166065138; Thu, 16 Jan 2020 01:14:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579166065; cv=none; d=google.com; s=arc-20160816; b=CLwO/XXxv2jowxLw4YitKCv8ASjzKdqp9DNySKY0XdAh8oBrQi4JlRwuXxocruMr54 Q/KXy9k8ogY1rCdKwZ0d8ODvupx8CblQDO+YQBlorpkE4DCt8bjnw7KPIClnJ+l0RuwL jTMKsqwxTA6O1lKFwUZLVhhB510EthqWA+YVx7C3fQe2Oey2MnNFxcv9vS8LAo16MNbm bTZrecUCZy2P8+oo9efdrq8gk20xE2ib221moZnWTUH4nNC8JW/vJKG/1eoMUWbKTR4T RiHFfnbCJbly7D2LeLuuYOnA2SKBJSJqYBPpl6mhwLuZPkFxMFXC7shwAZW6TCsqC645 o+MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=cyiZ4Kz/ci1fBnN4WUkPyhs0V9Nw8RcF8jSf6JcR64Q=; b=bqJQaTCP8QcwEZXhIb++CGMqEqEd0pZBph0BKUT5SvKA7eNbDrF4Q80LJGX1N9P+cS XGrpvPbY9EtOn0M+1ouGEk0EX3u0c0XE3psAof/0DSqVQpFTxu7mFaT+Vw5yuI5uvzyw 90GkjT+JGBRh5o0FVTQsqU7BIa9+gdzg22KPu5qwWFYyQcN96D8nc+bsq//2hDqSMAlK KDH7w9FW4UuJpCFGX9q6x8fvMEQIGgrlT0yYyA6ecTCXXK/a5QuzqNu3XOax0D1Wt1tL X6BFRWzCSG030Xv5MbPBRm6zQUuPWE/u+TBGodBpvsg3fRvpholbiIK0ftTLiC/WJ9+q 2n6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=vWPJdLHv; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f18si12366046otl.29.2020.01.16.01.14.11; Thu, 16 Jan 2020 01:14:25 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=vWPJdLHv; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727047AbgAPI6z (ORCPT + 99 others); Thu, 16 Jan 2020 03:58:55 -0500 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:57240 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725973AbgAPI6y (ORCPT ); Thu, 16 Jan 2020 03:58:54 -0500 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 00G8r1mM018102; Thu, 16 Jan 2020 09:58:31 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=subject : to : cc : references : from : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=STMicroelectronics; bh=cyiZ4Kz/ci1fBnN4WUkPyhs0V9Nw8RcF8jSf6JcR64Q=; b=vWPJdLHvqIHhX9FRoHZI//hWW5CPZwGkPUURO0F3it0SUW7MEBxndtNtahbF8qom7cw7 b7ZZP/7C8fx55FGmd+6SZ97GK2MNosTg3G4Q9L3udsMWT7srLgHj39XcHj/MyO/SQ3Qh jchwmsiYLyBj2RXAQDrNSp9bEBGiLst5r79w0CWsjOPyjvj+fdVZmWHMVEz+xkaeBUf4 5GM/dogkuB7DnQYo84PlbtP3XK9CVl/Y8hbqrspylGZjRi3iLIbsNkU0QFCrgJW1WaRp oCO8/xQGcQ9+vQYmYUOdSzGAvwT+C9hL598nEHiSCjQy28qNFxa8JCH89uwS1JhM5VTo Hw== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 2xf7jpr1c6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 16 Jan 2020 09:58:31 +0100 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 8C91C10003A; Thu, 16 Jan 2020 09:58:24 +0100 (CET) Received: from Webmail-eu.st.com (sfhdag3node2.st.com [10.75.127.8]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 78D662A4D73; Thu, 16 Jan 2020 09:58:24 +0100 (CET) Received: from lmecxl0912.lme.st.com (10.75.127.48) by SFHDAG3NODE2.st.com (10.75.127.8) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Thu, 16 Jan 2020 09:58:23 +0100 Subject: Re: [RFC PATCH 1/3] dtc: Add dtb build information option To: David Gibson CC: , Frank Rowand , Masahiro Yamada , Michal Marek , , , , , , Steve McIntyre References: <20200113181625.3130-1-alexandre.torgue@st.com> <20200113181625.3130-2-alexandre.torgue@st.com> <20200116005741.GB54439@umbus> From: Alexandre Torgue Message-ID: Date: Thu, 16 Jan 2020 09:58:23 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.2 MIME-Version: 1.0 In-Reply-To: <20200116005741.GB54439@umbus> Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.75.127.48] X-ClientProxiedBy: SFHDAG5NODE2.st.com (10.75.127.14) To SFHDAG3NODE2.st.com (10.75.127.8) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-01-16_02:2020-01-16,2020-01-15 signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi David On 1/16/20 1:57 AM, David Gibson wrote: > 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 > > At the very least, this patch of the series will need to be sent to > upstream dtc first. Ok sorry. I thought that sending all the series would give more information. > > I'm also not terribly clear on what you're trying to accomplish here, > and why it's useful. Let's take Kernel boot at example (but could be extend to other DTB "users" like U-Boot). When Linux kernel booting we get a log that gives useful information about kernel image: source version, build date, people who built the kernel image, compiler version. This information is useful for debug and support. The aim is to get same kind of information but for the DTB. > > 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? My first idea was to not modify all existing .dts files. Adding an extra option in dtc is (for me) the softer way to do it. I mean, compile information should come through compiler without modify .dts files outside from dtc. In this way it will be easy to everybody using dtc (inside our outside Linux tree) to add dtb build info (even if they don't how to write a dts file). > > 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". Yes I agree but something like "dtb-info" would be better as this property can be added when dtb is built for Linux but also for U-Boot. > >> 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. Ok. To fix. > >> + >> + 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(). I will try with data_copy_file(). Thanks. > >> + >> + add_property(tree, build_property("Build-info", d, NULL)); >> + >> + free(tmp); >> +} >> + >> /* Usage related data. */ >> static const char usage_synopsis[] = "dtc [options] "; >> -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; >> >