[U-Boot] [PATCH v2 0/3] cmd: add "config" command, rework "license" command

Changes in v2: - Fix a typo in git-log. bin2header -> bin2c
Masahiro Yamada (3): scripts: import bin2c.c from Linux 4.10-rc6 cmd: add a new command "config" to show .config contents cmd: rework "license" command
Kconfig | 2 ++ Makefile | 14 ++++++++------ cmd/.gitignore | 6 ++++++ cmd/Kconfig | 13 +++++++++++++ cmd/Makefile | 37 +++++++++++++++++++++++++++++++++++++ cmd/config.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ cmd/license.c | 31 ++++++++++++++++++------------- include/.gitignore | 1 - scripts/.gitignore | 1 + scripts/Kconfig | 2 ++ scripts/Makefile | 4 ++++ scripts/bin2c.c | 36 ++++++++++++++++++++++++++++++++++++ tools/Makefile | 11 +---------- tools/bin2header.c | 41 ----------------------------------------- 14 files changed, 172 insertions(+), 71 deletions(-) create mode 100644 cmd/.gitignore create mode 100644 cmd/config.c create mode 100644 scripts/Kconfig create mode 100644 scripts/bin2c.c delete mode 100644 tools/bin2header.c

Import scripts/basic/bin2c.c of Linux.
In Linux Kernel, this file was moved to scripts/basic directory by commit 8370edea81e3 ("bin2c: move bin2c in scripts/basic").
In U-boot, we do not need to follow that commit. Just put it in the original directory "scripts".
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
Changes in v2: - Fix a typo in git-log. bin2header -> bin2c
scripts/bin2c.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 scripts/bin2c.c
diff --git a/scripts/bin2c.c b/scripts/bin2c.c new file mode 100644 index 0000000..c3d7eef --- /dev/null +++ b/scripts/bin2c.c @@ -0,0 +1,36 @@ +/* + * Unloved program to convert a binary on stdin to a C include on stdout + * + * Jan 1999 Matt Mackall mpm@selenic.com + * + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + */ + +#include <stdio.h> + +int main(int argc, char *argv[]) +{ + int ch, total = 0; + + if (argc > 1) + printf("const char %s[] %s=\n", + argv[1], argc > 2 ? argv[2] : ""); + + do { + printf("\t""); + while ((ch = getchar()) != EOF) { + total++; + printf("\x%02x", ch); + if (total % 16 == 0) + break; + } + printf(""\n"); + } while (ch != EOF); + + if (argc > 1) + printf("\t;\n\n#include <linux/types.h>\n\nconst size_t %s_size = %d;\n", + argv[1], total); + + return 0; +}

On 29 January 2017 at 18:12, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Import scripts/basic/bin2c.c of Linux.
In Linux Kernel, this file was moved to scripts/basic directory by commit 8370edea81e3 ("bin2c: move bin2c in scripts/basic").
In U-boot, we do not need to follow that commit. Just put it in the original directory "scripts".
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
Changes in v2:
- Fix a typo in git-log. bin2header -> bin2c
scripts/bin2c.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 scripts/bin2c.c
Reviewed-by: Simon Glass sjg@chromium.org

On Mon, Jan 30, 2017 at 10:12 AM, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Import scripts/basic/bin2c.c of Linux.
In Linux Kernel, this file was moved to scripts/basic directory by commit 8370edea81e3 ("bin2c: move bin2c in scripts/basic").
In U-boot, we do not need to follow that commit. Just put it in the
Sorry for jumping out late, but one nits:
U-boot -> U-Boot
original directory "scripts".
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
Changes in v2:
- Fix a typo in git-log. bin2header -> bin2c
scripts/bin2c.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 scripts/bin2c.c
[snip]
Regards, Bin

Hi Bin,
2017-02-07 11:38 GMT+09:00 Bin Meng bmeng.cn@gmail.com:
On Mon, Jan 30, 2017 at 10:12 AM, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Import scripts/basic/bin2c.c of Linux.
In Linux Kernel, this file was moved to scripts/basic directory by commit 8370edea81e3 ("bin2c: move bin2c in scripts/basic").
In U-boot, we do not need to follow that commit. Just put it in the
Sorry for jumping out late, but one nits:
U-boot -> U-Boot
Thanks for pointing this out.
Tom, Could you fix s/U-boot/U-Boot/ when this patch is applied, please?

On Tue, Feb 07, 2017 at 09:23:38PM +0900, Masahiro Yamada wrote:
Hi Bin,
2017-02-07 11:38 GMT+09:00 Bin Meng bmeng.cn@gmail.com:
On Mon, Jan 30, 2017 at 10:12 AM, Masahiro Yamada yamada.masahiro@socionext.com wrote:
Import scripts/basic/bin2c.c of Linux.
In Linux Kernel, this file was moved to scripts/basic directory by commit 8370edea81e3 ("bin2c: move bin2c in scripts/basic").
In U-boot, we do not need to follow that commit. Just put it in the
Sorry for jumping out late, but one nits:
U-boot -> U-Boot
Thanks for pointing this out.
Tom, Could you fix s/U-boot/U-Boot/ when this patch is applied, please?
I'll endeavor to remember :)

On Mon, Jan 30, 2017 at 11:12:06AM +0900, Masahiro Yamada wrote:
Import scripts/basic/bin2c.c of Linux.
In Linux Kernel, this file was moved to scripts/basic directory by commit 8370edea81e3 ("bin2c: move bin2c in scripts/basic").
In U-Boot, we do not need to follow that commit. Just put it in the original directory "scripts".
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!

This feature is inspired by /proc/config.gz of Linux. In Linux, if CONFIG_IKCONFIG is enabled, the ".config" file contents are embedded in the kernel image. If CONFIG_IKCONFIG_PROC is also enabled, the ".config" contents are exposed to /proc/config.gz. Users can do "zcat /proc/config.gz" to check which config options are enabled on the running kernel image.
The idea is almost the same here; if CONFIG_CMD_CONFIG is enabled, the ".config" contents are compressed and saved in the U-Boot image, then printed by the new command "config".
The usage is quite simple. Enable CONFIG_CMD_CONFIG, then run
config
from the command line interface. The ".config" contents will be printed on the console.
This feature increases the U-Boot image size by about 4KB (this is mostly due to the gzip-compressed .config file). By default, it is enabled only for Sandbox because we do not care about the memory footprint on it. Of course, this feature is architecture agnostic, so you can enable it on any board if the image size increase is acceptable for you.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
Changes in v2: None
Kconfig | 2 ++ Makefile | 12 +++++++----- cmd/.gitignore | 3 +++ cmd/Kconfig | 12 ++++++++++++ cmd/Makefile | 22 ++++++++++++++++++++++ cmd/config.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ scripts/.gitignore | 1 + scripts/Kconfig | 2 ++ scripts/Makefile | 4 ++++ 9 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 cmd/.gitignore create mode 100644 cmd/config.c create mode 100644 scripts/Kconfig
diff --git a/Kconfig b/Kconfig index 8f9ea97..0dd21df 100644 --- a/Kconfig +++ b/Kconfig @@ -325,3 +325,5 @@ source "fs/Kconfig" source "lib/Kconfig"
source "test/Kconfig" + +source "scripts/Kconfig" diff --git a/Makefile b/Makefile index 262df7c..fb1ec20 100644 --- a/Makefile +++ b/Makefile @@ -482,6 +482,13 @@ else # Build targets only - this includes vmlinux, arch specific targets, clean # targets and others. In general all targets except *config targets.
+# Additional helpers built in scripts/ +# Carefully list dependencies so we do not try to build scripts twice +# in parallel +PHONY += scripts +scripts: scripts_basic include/config/auto.conf + $(Q)$(MAKE) $(build)=$(@) + ifeq ($(dot-config),1) # Read in config -include include/config/auto.conf @@ -1537,11 +1544,6 @@ tests: $(Q)$(MAKE) $(build)=scripts build_docproc $(Q)$(MAKE) $(build)=doc/DocBook $@
-# Dummies... -PHONY += prepare scripts -prepare: ; -scripts: ; - endif #ifeq ($(config-targets),1) endif #ifeq ($(mixed-targets),1)
diff --git a/cmd/.gitignore b/cmd/.gitignore new file mode 100644 index 0000000..7800586 --- /dev/null +++ b/cmd/.gitignore @@ -0,0 +1,3 @@ +config_data.gz +config_data_gz.h +config_data_size.h diff --git a/cmd/Kconfig b/cmd/Kconfig index 4a0d489..57e8e42 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -126,6 +126,18 @@ config CMD_BDI help Print board info
+config CMD_CONFIG + bool "config" + select BUILD_BIN2C + default SANDBOX + help + Print ".config" contents. + + If this option is enabled, the ".config" file contents are embedded + in the U-Boot image and can be printed on the console by the "config" + command. This provides information of which options are enabled on + the running U-Boot. + config CMD_CONSOLE bool "coninfo" default y diff --git a/cmd/Makefile b/cmd/Makefile index 566fed9..1a04e7e 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -31,6 +31,7 @@ obj-$(CONFIG_CMD_BOOTI) += booti.o obj-$(CONFIG_CMD_CACHE) += cache.o obj-$(CONFIG_CMD_CBFS) += cbfs.o obj-$(CONFIG_CMD_CLK) += clk.o +obj-$(CONFIG_CMD_CONFIG) += config.o obj-$(CONFIG_CMD_CONSOLE) += console.o obj-$(CONFIG_CMD_CPLBINFO) += cplbinfo.o obj-$(CONFIG_CMD_CPU) += cpu.o @@ -165,3 +166,24 @@ obj-$(CONFIG_CMD_BLOB) += blob.o obj-y += nvedit.o
obj-$(CONFIG_ARCH_MVEBU) += mvebu/ + +filechk_data_gz = (echo "static const char data_gz[] ="; cat $< | scripts/bin2c; echo ";") + +filechk_data_size = \ + (echo "static const size_t data_size = "; \ + cat $< | wc -c; echo ";") + +# "config" command +$(obj)/config.o: $(obj)/config_data_gz.h $(obj)/config_data_size.h + +targets += config_data.gz +$(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE + $(call if_changed,gzip) + +targets += config_data_gz.h +$(obj)/config_data_gz.h: $(obj)/config_data.gz FORCE + $(call filechk,data_gz) + +targets += config_data_size.h +$(obj)/config_data_size.h: $(KCONFIG_CONFIG) FORCE + $(call filechk,data_size) diff --git a/cmd/config.c b/cmd/config.c new file mode 100644 index 0000000..0c7f4e0 --- /dev/null +++ b/cmd/config.c @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2017 Masahiro Yamada yamada.masahiro@socionext.com + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <command.h> +#include <malloc.h> + +#include "config_data_gz.h" +#include "config_data_size.h" + +static int do_config(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + char *dst; + unsigned long len = data_size; + int ret = CMD_RET_SUCCESS; + + dst = malloc(data_size + 1); + if (!dst) + return CMD_RET_FAILURE; + + ret = gunzip(dst, data_size, (unsigned char *)data_gz, &len); + if (ret) { + printf("failed to uncompress .config data\n"); + ret = CMD_RET_FAILURE; + goto free; + } + + dst[data_size] = 0; + puts(dst); + +free: + free(dst); + + return ret; +} + +U_BOOT_CMD( + config, 1, 1, do_config, + "print .config", + "" +); diff --git a/scripts/.gitignore b/scripts/.gitignore index 82bc06e..17b903b 100644 --- a/scripts/.gitignore +++ b/scripts/.gitignore @@ -1,4 +1,5 @@ # # Generated files # +bin2c docproc diff --git a/scripts/Kconfig b/scripts/Kconfig new file mode 100644 index 0000000..2a2c18e --- /dev/null +++ b/scripts/Kconfig @@ -0,0 +1,2 @@ +config BUILD_BIN2C + bool diff --git a/scripts/Makefile b/scripts/Makefile index 2f081f7..3e10c16 100644 --- a/scripts/Makefile +++ b/scripts/Makefile @@ -7,6 +7,10 @@ # SPDX-License-Identifier: GPL-2.0 #
+hostprogs-$(CONFIG_BUILD_BIN2C) += bin2c + +always := $(hostprogs-y) + # The following hostprogs-y programs are only build on demand hostprogs-y += docproc

Hi Masahiro,
On 29 January 2017 at 18:12, Masahiro Yamada yamada.masahiro@socionext.com wrote:
This feature is inspired by /proc/config.gz of Linux. In Linux, if CONFIG_IKCONFIG is enabled, the ".config" file contents are embedded in the kernel image. If CONFIG_IKCONFIG_PROC is also enabled, the ".config" contents are exposed to /proc/config.gz. Users can do "zcat /proc/config.gz" to check which config options are enabled on the running kernel image.
The idea is almost the same here; if CONFIG_CMD_CONFIG is enabled, the ".config" contents are compressed and saved in the U-Boot image, then printed by the new command "config".
The usage is quite simple. Enable CONFIG_CMD_CONFIG, then run
config
from the command line interface. The ".config" contents will be printed on the console.
This feature increases the U-Boot image size by about 4KB (this is mostly due to the gzip-compressed .config file). By default, it is enabled only for Sandbox because we do not care about the memory footprint on it. Of course, this feature is architecture agnostic, so you can enable it on any board if the image size increase is acceptable for you.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
Changes in v2: None
Kconfig | 2 ++ Makefile | 12 +++++++----- cmd/.gitignore | 3 +++ cmd/Kconfig | 12 ++++++++++++ cmd/Makefile | 22 ++++++++++++++++++++++ cmd/config.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ scripts/.gitignore | 1 + scripts/Kconfig | 2 ++ scripts/Makefile | 4 ++++ 9 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 cmd/.gitignore create mode 100644 cmd/config.c create mode 100644 scripts/Kconfig
Reviewed-by: Simon Glass sjg@chromium.org
But I wonder why we shouldn't use a mechanism like cmd_dt_S_dtb in Makefile.lib to embed the file?
Regards, Simon

Hi Simon,
2017-02-07 0:33 GMT+09:00 Simon Glass sjg@chromium.org:
Hi Masahiro,
On 29 January 2017 at 18:12, Masahiro Yamada yamada.masahiro@socionext.com wrote:
This feature is inspired by /proc/config.gz of Linux. In Linux, if CONFIG_IKCONFIG is enabled, the ".config" file contents are embedded in the kernel image. If CONFIG_IKCONFIG_PROC is also enabled, the ".config" contents are exposed to /proc/config.gz. Users can do "zcat /proc/config.gz" to check which config options are enabled on the running kernel image.
The idea is almost the same here; if CONFIG_CMD_CONFIG is enabled, the ".config" contents are compressed and saved in the U-Boot image, then printed by the new command "config".
The usage is quite simple. Enable CONFIG_CMD_CONFIG, then run
config
from the command line interface. The ".config" contents will be printed on the console.
This feature increases the U-Boot image size by about 4KB (this is mostly due to the gzip-compressed .config file). By default, it is enabled only for Sandbox because we do not care about the memory footprint on it. Of course, this feature is architecture agnostic, so you can enable it on any board if the image size increase is acceptable for you.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
Changes in v2: None
Kconfig | 2 ++ Makefile | 12 +++++++----- cmd/.gitignore | 3 +++ cmd/Kconfig | 12 ++++++++++++ cmd/Makefile | 22 ++++++++++++++++++++++ cmd/config.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ scripts/.gitignore | 1 + scripts/Kconfig | 2 ++ scripts/Makefile | 4 ++++ 9 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 cmd/.gitignore create mode 100644 cmd/config.c create mode 100644 scripts/Kconfig
Reviewed-by: Simon Glass sjg@chromium.org
But I wonder why we shouldn't use a mechanism like cmd_dt_S_dtb in Makefile.lib to embed the file?
I thought of this when I saw the implementation of kernel/configs.c of Linux.
My first guess was, they wanted to implement it in an arch-independent way.
The cmd_dt_S_dtb mechanism also seems (mostly) arch-independent, but I am not 100% sure.
For example, underscore must the added/stripped for conversion between C and assembly for Blackfin architecture.
One more reason is, I think, kernel/configs.c was added in older days than the Device Tree.

On Mon, Jan 30, 2017 at 11:12:07AM +0900, Masahiro Yamada wrote:
This feature is inspired by /proc/config.gz of Linux. In Linux, if CONFIG_IKCONFIG is enabled, the ".config" file contents are embedded in the kernel image. If CONFIG_IKCONFIG_PROC is also enabled, the ".config" contents are exposed to /proc/config.gz. Users can do "zcat /proc/config.gz" to check which config options are enabled on the running kernel image.
The idea is almost the same here; if CONFIG_CMD_CONFIG is enabled, the ".config" contents are compressed and saved in the U-Boot image, then printed by the new command "config".
The usage is quite simple. Enable CONFIG_CMD_CONFIG, then run
config
from the command line interface. The ".config" contents will be printed on the console.
This feature increases the U-Boot image size by about 4KB (this is mostly due to the gzip-compressed .config file). By default, it is enabled only for Sandbox because we do not care about the memory footprint on it. Of course, this feature is architecture agnostic, so you can enable it on any board if the image size increase is acceptable for you.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!

The previous commit ("add a new command to show .config contents") improves the basic infrastructure of "embed a compressed file into the U-Boot image, and print it by a command". The same pattern for the "license" command.
This commit reworks the command to improve the following:
[1] Improve log style
Kbuild style log
GZIP cmd/license_data.gz CHK cmd/license_data_gz.h UPD cmd/license_data_gz.h CHK cmd/license_data_size.h UPD cmd/license_data_size.h
instead of the bare Make log:
cat ./Licenses/gpl-2.0.txt | gzip -9 -c | \ tools/bin2header license_gzip > ./include/license.h
[2] Collect related code into the "cmd" directory
Prior to this commit, the license.h was created by tools/Makefile, placed under the "include" directory, included from cmd/license.c, and deleted by the top-level Makefile. It is not a good idea to scatter related code.
[3] Drop the fixed-malloc size LICENSE_MAX
Just allocate the minimum required size of buffer because we know the size of the original gpl-2.0.txt.
[4] Fix more issues
Terminate the buffer with zero to prevent puts() from over-running. Add "static" to do_license.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com ---
Changes in v2: None
Makefile | 2 +- cmd/.gitignore | 3 +++ cmd/Kconfig | 1 + cmd/Makefile | 15 +++++++++++++++ cmd/license.c | 31 ++++++++++++++++++------------- include/.gitignore | 1 - tools/Makefile | 11 +---------- tools/bin2header.c | 41 ----------------------------------------- 8 files changed, 39 insertions(+), 66 deletions(-) delete mode 100644 tools/bin2header.c
diff --git a/Makefile b/Makefile index fb1ec20..00ff9b5 100644 --- a/Makefile +++ b/Makefile @@ -1423,7 +1423,7 @@ CLEAN_DIRS += $(MODVERDIR) \ $(foreach d, spl tpl, $(patsubst %,$d/%, \ $(filter-out include, $(shell ls -1 $d 2>/dev/null))))
-CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h include/license.h \ +CLEAN_FILES += include/bmp_logo.h include/bmp_logo_data.h \ boot* u-boot* MLO* SPL System.map
# Directories & files removed with 'make mrproper' diff --git a/cmd/.gitignore b/cmd/.gitignore index 7800586..bab889f 100644 --- a/cmd/.gitignore +++ b/cmd/.gitignore @@ -1,3 +1,6 @@ config_data.gz config_data_gz.h config_data_size.h +license_data.gz +license_data_gz.h +license_data_size.h diff --git a/cmd/Kconfig b/cmd/Kconfig index 57e8e42..25ac895 100644 --- a/cmd/Kconfig +++ b/cmd/Kconfig @@ -154,6 +154,7 @@ config CMD_CPU
config CMD_LICENSE bool "license" + select BUILD_BIN2C help Print GPL license text
diff --git a/cmd/Makefile b/cmd/Makefile index 1a04e7e..f13bb8c 100644 --- a/cmd/Makefile +++ b/cmd/Makefile @@ -187,3 +187,18 @@ $(obj)/config_data_gz.h: $(obj)/config_data.gz FORCE targets += config_data_size.h $(obj)/config_data_size.h: $(KCONFIG_CONFIG) FORCE $(call filechk,data_size) + +# "license" command +$(obj)/license.o: $(obj)/license_data_gz.h $(obj)/license_data_size.h + +targets += license_data.gz +$(obj)/license_data.gz: $(srctree)/Licenses/gpl-2.0.txt FORCE + $(call if_changed,gzip) + +targets += license_data_gz.h +$(obj)/license_data_gz.h: $(obj)/license_data.gz FORCE + $(call filechk,data_gz) + +targets += license_data_size.h +$(obj)/license_data_size.h: $(srctree)/Licenses/gpl-2.0.txt FORCE + $(call filechk,data_size) diff --git a/cmd/license.c b/cmd/license.c index 5ee57f8..29fc8aa 100644 --- a/cmd/license.c +++ b/cmd/license.c @@ -6,31 +6,36 @@ */
#include <common.h> - -/* Licenses/gpl-2.0.txt is currently 18092 bytes in size */ -#define LICENSE_MAX 20480 - #include <command.h> #include <malloc.h> -#include <license.h>
-int do_license(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +#include "license_data_gz.h" +#include "license_data_size.h" + +static int do_license(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { - char *dst = malloc(LICENSE_MAX); - unsigned long len = LICENSE_MAX; + char *dst; + unsigned long len = data_size; + int ret = CMD_RET_SUCCESS;
+ dst = malloc(data_size + 1); if (!dst) - return -1; + return CMD_RET_FAILURE;
- if (gunzip(dst, LICENSE_MAX, license_gzip, &len) != 0) { + ret = gunzip(dst, data_size, (unsigned char *)data_gz, &len); + if (ret) { printf("Error uncompressing license text\n"); - free(dst); - return -1; + ret = CMD_RET_FAILURE; + goto free; } + + dst[data_size] = 0; puts(dst); + +free: free(dst);
- return 0; + return ret; }
U_BOOT_CMD( diff --git a/include/.gitignore b/include/.gitignore index 75be527..8e41a95 100644 --- a/include/.gitignore +++ b/include/.gitignore @@ -2,4 +2,3 @@ /bmp_logo.h /bmp_logo_data.h /config.h -/license.h diff --git a/tools/Makefile b/tools/Makefile index cefcedf..38ca4cb 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -32,7 +32,6 @@ CONFIG_BUILD_ENVCRC ?= $(ENVCRC-y)
hostprogs-$(CONFIG_SPL_GENERATE_ATMEL_PMECC_HEADER) += atmel_pmecc_params
-hostprogs-$(CONFIG_CMD_LICENSE) += bin2header hostprogs-$(CONFIG_LCD_LOGO) += bmp_logo hostprogs-$(CONFIG_VIDEO_LOGO) += bmp_logo HOSTCFLAGS_bmp_logo.o := -pedantic @@ -229,10 +228,6 @@ endif
endif # !LOGO_BMP
-# Generated gziped GPL-2.0 license text -LICENSE_H = $(objtree)/include/license.h -LICENSE-$(CONFIG_CMD_LICENSE) += $(LICENSE_H) - # # Use native tools and options # Define __KERNEL_STRICT_NAMES to prevent typedef overlaps @@ -247,7 +242,7 @@ HOST_EXTRACFLAGS += -include $(srctree)/include/libfdt_env.h \ -D__KERNEL_STRICT_NAMES \ -D_GNU_SOURCE
-__build: $(LOGO-y) $(LICENSE-y) +__build: $(LOGO-y)
$(LOGO_H): $(obj)/bmp_logo $(LOGO_BMP) $(obj)/bmp_logo --gen-info $(LOGO_BMP) > $@ @@ -255,10 +250,6 @@ $(LOGO_H): $(obj)/bmp_logo $(LOGO_BMP) $(LOGO_DATA_H): $(obj)/bmp_logo $(LOGO_BMP) $(obj)/bmp_logo --gen-data $(LOGO_BMP) > $@
-$(LICENSE_H): $(obj)/bin2header $(srctree)/Licenses/gpl-2.0.txt - cat $(srctree)/Licenses/gpl-2.0.txt | gzip -9 -c | \ - $(obj)/bin2header license_gzip > $(LICENSE_H) - # Let clean descend into subdirs subdir- += env
diff --git a/tools/bin2header.c b/tools/bin2header.c deleted file mode 100644 index 6c2c23f..0000000 --- a/tools/bin2header.c +++ /dev/null @@ -1,41 +0,0 @@ -/* bin2header.c - program to convert binary file into a C structure - * definition to be included in a header file. - * - * (C) Copyright 2008 by Harald Welte laforge@openmoko.org - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> - -int main(int argc, char **argv) -{ - if (argc < 2) { - fprintf(stderr, "%s needs one argument: the structure name\n", - argv[0]); - exit(1); - } - - printf("/* bin2header output - automatically generated */\n"); - printf("unsigned char %s[] = {\n", argv[1]); - - while (1) { - int i, nread; - unsigned char buf[10]; - nread = read(0, buf, sizeof(buf)); - if (nread <= 0) - break; - - printf("\t"); - for (i = 0; i < nread - 1; i++) - printf("0x%02x, ", buf[i]); - - printf("0x%02x,\n", buf[nread-1]); - } - - printf("};\n"); - - exit(0); -}

On 29 January 2017 at 18:12, Masahiro Yamada yamada.masahiro@socionext.com wrote:
The previous commit ("add a new command to show .config contents") improves the basic infrastructure of "embed a compressed file into the U-Boot image, and print it by a command". The same pattern for the "license" command.
This commit reworks the command to improve the following:
[1] Improve log style
Kbuild style log
GZIP cmd/license_data.gz CHK cmd/license_data_gz.h UPD cmd/license_data_gz.h CHK cmd/license_data_size.h UPD cmd/license_data_size.h
instead of the bare Make log:
cat ./Licenses/gpl-2.0.txt | gzip -9 -c | \ tools/bin2header license_gzip > ./include/license.h
[2] Collect related code into the "cmd" directory
Prior to this commit, the license.h was created by tools/Makefile, placed under the "include" directory, included from cmd/license.c, and deleted by the top-level Makefile. It is not a good idea to scatter related code.
[3] Drop the fixed-malloc size LICENSE_MAX
Just allocate the minimum required size of buffer because we know the size of the original gpl-2.0.txt.
[4] Fix more issues
Terminate the buffer with zero to prevent puts() from over-running. Add "static" to do_license.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com
Changes in v2: None
Makefile | 2 +- cmd/.gitignore | 3 +++ cmd/Kconfig | 1 + cmd/Makefile | 15 +++++++++++++++ cmd/license.c | 31 ++++++++++++++++++------------- include/.gitignore | 1 - tools/Makefile | 11 +---------- tools/bin2header.c | 41 ----------------------------------------- 8 files changed, 39 insertions(+), 66 deletions(-) delete mode 100644 tools/bin2header.c
Reviewed-by: Simon Glass sjg@chromium.org
It also drops bin2header.c

On Mon, Jan 30, 2017 at 11:12:08AM +0900, Masahiro Yamada wrote:
The previous commit ("add a new command to show .config contents") improves the basic infrastructure of "embed a compressed file into the U-Boot image, and print it by a command". The same pattern for the "license" command.
This commit reworks the command to improve the following:
[1] Improve log style
Kbuild style log
GZIP cmd/license_data.gz CHK cmd/license_data_gz.h UPD cmd/license_data_gz.h CHK cmd/license_data_size.h UPD cmd/license_data_size.h
instead of the bare Make log:
cat ./Licenses/gpl-2.0.txt | gzip -9 -c | \ tools/bin2header license_gzip > ./include/license.h
[2] Collect related code into the "cmd" directory
Prior to this commit, the license.h was created by tools/Makefile, placed under the "include" directory, included from cmd/license.c, and deleted by the top-level Makefile. It is not a good idea to scatter related code.
[3] Drop the fixed-malloc size LICENSE_MAX
Just allocate the minimum required size of buffer because we know the size of the original gpl-2.0.txt.
[4] Fix more issues
Terminate the buffer with zero to prevent puts() from over-running. Add "static" to do_license.
Signed-off-by: Masahiro Yamada yamada.masahiro@socionext.com Reviewed-by: Simon Glass sjg@chromium.org
Applied to u-boot/master, thanks!
participants (4)
-
Bin Meng
-
Masahiro Yamada
-
Simon Glass
-
Tom Rini