uboot-tools: fix FIT support and make it optional

Fix several issues regarding the support for Flat Image Trees (FIT).

- Add a patch to really allow turning FIT support on/off, which was not
  possible due to bugs in the code and in the tools Makefile. This patch
  has been sent upstream but not applied there, yet.

- Use independent options to control FIT support on host and target
  packages.

- Subordinate FIT signature support to the activation of FIT support, in
  the target package, not to mkimage installation.

- Add a dependence on the dtc utilities because mkimage needs it when
  FIT is enabled; otherwise mkimage fails like this:

    $ mkimage -f firmware.its firmware.im
    sh: dtc: command not found

- Add BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT to the
  Config.in.legacy file.

Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2016.08.x
Carlos Santos 2016-06-03 16:35:39 -03:00 committed by Thomas Petazzoni
parent d1a2c0ed3c
commit b5d9900842
5 changed files with 177 additions and 34 deletions

View File

@ -145,6 +145,20 @@ endif
###############################################################################
comment "Legacy options removed in 2016.08"
config BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT
bool "FIT support in uboot-tools has been refactored"
select BR2_LEGACY
select BR2_PACKAGE_DTC
select BR2_PACKAGE_DTC_PROGRAMS
select BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT
select BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT
select BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE
help
This option has been removed in favor of a more fine-grained
configuration, which is recommended. Selecting this option
enables FIT and FIT signature support for the target packages.
It will also select the dtc and openssl packages.
config BR2_PTHREADS_OLD
bool "linuxthreads (stable/old)"
select BR2_LEGACY

View File

@ -0,0 +1,93 @@
From ddcd6cd622889a2d74d0a16efae8e3b2d098f717 Mon Sep 17 00:00:00 2001
From: Carlos Santos <casantos@datacom.ind.br>
Date: Sun, 8 May 2016 11:11:39 -0300
Subject: [PATCH] Make FIT support really optional
Due to some mistakes in the source code, it was not possible to really
turn FIT support off. This commit fixes the problem by means of the
following changes:
- Enclose "bootm_host_load_image" and "bootm_host_load_images" between
checks for CONFIG_FIT_SIGNATURE, in common/bootm.c.
- Enclose the declaration of "bootm_host_load_images" between checks for
CONFIG_FIT_SIGNATURE, in common/bootm.h.
- Condition the compilation and linking of fit_common.o fit_image.o
image-host.o common/image-fit.o to CONFIG_FIT=y, in tools/Makefile.
Signed-off-by: Carlos Santos <casantos@datacom.ind.br>
---
common/bootm.c | 2 ++
include/bootm.h | 2 ++
tools/Makefile | 6 ++----
3 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/common/bootm.c b/common/bootm.c
index c965326..ab477ba 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -891,6 +891,7 @@ void memmove_wd(void *to, void *from, size_t len, ulong chunksz)
memmove(to, from, len);
}
+#if defined(CONFIG_FIT_SIGNATURE)
static int bootm_host_load_image(const void *fit, int req_image_type)
{
const char *fit_uname_config = NULL;
@@ -955,5 +956,6 @@ int bootm_host_load_images(const void *fit, int cfg_noffset)
/* Return the first error we found */
return err;
}
+#endif
#endif /* ndef USE_HOSTCC */
diff --git a/include/bootm.h b/include/bootm.h
index 4981377..94d62a1 100644
--- a/include/bootm.h
+++ b/include/bootm.h
@@ -41,7 +41,9 @@ void lynxkdi_boot(image_header_t *hdr);
boot_os_fn *bootm_os_get_boot_func(int os);
+#if defined(CONFIG_FIT_SIGNATURE)
int bootm_host_load_images(const void *fit, int cfg_noffset);
+#endif
int boot_selected_os(int argc, char * const argv[], int state,
bootm_headers_t *images, boot_os_fn *boot_fn);
diff --git a/tools/Makefile b/tools/Makefile
index da50e1b..0a3d279 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -54,6 +54,7 @@ mkenvimage-objs := mkenvimage.o os_support.o lib/crc32.o
hostprogs-y += dumpimage mkimage
hostprogs-$(CONFIG_FIT_SIGNATURE) += fit_info fit_check_sign
+FIT_OBJS-$(CONFIG_FIT) := fit_common.o fit_image.o image-host.o common/image-fit.o
FIT_SIG_OBJS-$(CONFIG_FIT_SIGNATURE) := common/image-sig.o
# Flattened device tree objects
LIBFDT_OBJS := $(addprefix lib/libfdt/, \
@@ -68,18 +69,15 @@ ROCKCHIP_OBS = lib/rc4.o rkcommon.o rkimage.o rksd.o rkspi.o
# common objs for dumpimage and mkimage
dumpimage-mkimage-objs := aisimage.o \
atmelimage.o \
+ $(FIT_OBJS-y) \
$(FIT_SIG_OBJS-y) \
common/bootm.o \
lib/crc32.o \
default_image.o \
lib/fdtdec_common.o \
lib/fdtdec.o \
- fit_common.o \
- fit_image.o \
gpimage.o \
gpimage-common.o \
- common/image-fit.o \
- image-host.o \
common/image.o \
imagetool.o \
imximage.o \
--
2.7.4

View File

@ -7,17 +7,22 @@ config BR2_PACKAGE_UBOOT_TOOLS
if BR2_PACKAGE_UBOOT_TOOLS
config BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE
bool "mkimage"
config BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT
bool "Flattened Image Tree (FIT) support"
select BR2_PACKAGE_DTC
select BR2_PACKAGE_DTC_PROGRAMS
help
Install the mkimage tool on the target system
Enables support for Flattened Image Tree (FIT).
The mkimage tool from Das U-Boot bootloader, which allows
generation of U-Boot images in various formats.
This option allows to boot the new uImage structrure,
Flattened Image Tree. FIT is formally a FDT, which can include
images of various types (kernel, FDT blob, ramdisk, etc.)
in a single blob. To boot this new uImage structure,
pass the address of the blob to the "bootm" command.
if BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE
if BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT
config BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT
config BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT
bool "FIT signature verification support"
select BR2_PACKAGE_OPENSSL
help
@ -40,6 +45,14 @@ config BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT
endif
config BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE
bool "mkimage"
help
Install the mkimage tool on the target system
The mkimage tool from Das U-Boot bootloader, which allows
generation of U-Boot images in various formats.
config BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE
bool "mkenvimage"
help

View File

@ -7,6 +7,20 @@ config BR2_PACKAGE_HOST_UBOOT_TOOLS
if BR2_PACKAGE_HOST_UBOOT_TOOLS
config BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT
bool "Flattened Image Tree (FIT) support"
select BR2_PACKAGE_HOST_DTC
help
Enables support for Flattened Image Tree (FIT).
This option allows to boot the new uImage structrure,
Flattened Image Tree. FIT is formally a FDT, which can include
images of various types (kernel, FDT blob, ramdisk, etc.)
in a single blob. To boot this new uImage structure,
pass the address of the blob to the "bootm" command.
if BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT
config BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT
bool "FIT signature verification support"
help
@ -24,3 +38,5 @@ config BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT
be verified in this way.
endif
endif

View File

@ -16,20 +16,25 @@ define UBOOT_TOOLS_CONFIGURE_CMDS
touch $(@D)/include/config/auto.conf
endef
UBOOT_TOOLS_MAKE_OPTS = CROSS_COMPILE="$(TARGET_CROSS)" \
CFLAGS="$(TARGET_CFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS)" \
STRIP=$(TARGET_STRIP)
ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_FIT_SUPPORT),y)
UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT=y
UBOOT_TOOLS_DEPENDENCIES += dtc
endif
ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT),y)
UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT_SIGNATURE=y
UBOOT_TOOLS_DEPENDENCIES += openssl host-pkgconf
endif
define UBOOT_TOOLS_BUILD_CMDS
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \
CROSS_COMPILE="$(TARGET_CROSS)" \
CFLAGS="$(TARGET_CFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS)" \
STRIP=$(TARGET_STRIP) \
CROSS_BUILD_TOOLS=y \
CONFIG_FIT_SIGNATURE=$(BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT) \
tools-only
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) \
CROSS_COMPILE="$(TARGET_CROSS)" \
CFLAGS="$(TARGET_CFLAGS)" \
LDFLAGS="$(TARGET_LDFLAGS)" \
STRIP=$(TARGET_STRIP) \
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(UBOOT_TOOLS_MAKE_OPTS) \
CROSS_BUILD_TOOLS=y tools-only
$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) $(UBOOT_TOOLS_MAKE_OPTS) \
env no-dot-config-targets=env
endef
@ -37,10 +42,7 @@ ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE),y)
define UBOOT_TOOLS_INSTALL_MKIMAGE
$(INSTALL) -m 0755 -D $(@D)/tools/mkimage $(TARGET_DIR)/usr/bin/mkimage
endef
ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT),y)
UBOOT_TOOLS_DEPENDENCIES += openssl host-pkgconf
endif # BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT
endif # BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE
endif
ifeq ($(BR2_PACKAGE_UBOOT_TOOLS_MKENVIMAGE),y)
define UBOOT_TOOLS_INSTALL_MKENVIMAGE
@ -76,22 +78,27 @@ define UBOOT_TOOLS_INSTALL_TARGET_CMDS
$(UBOOT_TOOLS_INSTALL_DUMPIMAGE)
endef
ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT),y)
HOST_UBOOT_TOOLS_DEPENDENCIES += host-openssl
endif
define HOST_UBOOT_TOOLS_CONFIGURE_CMDS
mkdir -p $(@D)/include/config
touch $(@D)/include/config/auto.conf
endef
HOST_UBOOT_TOOLS_MAKE_OPTS = HOSTCC="$(HOSTCC)" \
HOSTCFLAGS="$(HOST_CFLAGS)" \
HOSTLDFLAGS="$(HOST_LDFLAGS)"
ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT),y)
HOST_UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT=y
HOST_UBOOT_TOOLS_DEPENDENCIES += host-dtc
endif
ifeq ($(BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT),y)
HOST_UBOOT_TOOLS_MAKE_OPTS += CONFIG_FIT_SIGNATURE=y
HOST_UBOOT_TOOLS_DEPENDENCIES += host-openssl
endif
define HOST_UBOOT_TOOLS_BUILD_CMDS
$(MAKE1) -C $(@D) \
CONFIG_FIT_SIGNATURE=$(BR2_PACKAGE_UBOOT_TOOLS_MKIMAGE_FIT_SIGNATURE_SUPPORT) \
HOSTCC="$(HOSTCC)" \
HOSTCFLAGS="$(HOST_CFLAGS)" \
HOSTLDFLAGS="$(HOST_LDFLAGS)" \
tools-only
$(MAKE1) -C $(@D) $(HOST_UBOOT_TOOLS_MAKE_OPTS) tools-only
endef
define HOST_UBOOT_TOOLS_INSTALL_CMDS