morty migration: u-boot-fw-utils: update package

https://jira.digi.com/browse/DEL-3451

Also backport patch to fix:

https://jira.digi.com/browse/DEL-3770

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
This commit is contained in:
Javier Viguera 2017-02-16 16:44:51 +01:00
parent 04cc6d470a
commit 989e9585f9
6 changed files with 126 additions and 69 deletions

View File

@ -0,0 +1,47 @@
From: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
Date: Fri, 25 Mar 2016 14:52:19 +0100
Subject: [PATCH] tools: env: bug: config structs must be defined in tools
library
fw_senten/fw_printenv can be compiled as a tools library,
excluding the fw_env_main object.
Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
(cherry picked from commit 43cb65b7a00e4759427a6e4b8a02039e43dab5a5)
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
tools/env/fw_env.c | 4 ++++
tools/env/fw_env_main.c | 4 ----
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index ee17a6901609..2533dc4eec2b 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -34,6 +34,10 @@
#include "fw_env.h"
+struct common_args common_args;
+struct printenv_args printenv_args;
+struct setenv_args setenv_args;
+
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
#define WHITESPACE(c) ((c == '\t') || (c == ' '))
diff --git a/tools/env/fw_env_main.c b/tools/env/fw_env_main.c
index 4bd4216625aa..3065de962272 100644
--- a/tools/env/fw_env_main.c
+++ b/tools/env/fw_env_main.c
@@ -49,10 +49,6 @@ static struct option long_options[] = {
{NULL, 0, NULL, 0}
};
-struct common_args common_args;
-struct printenv_args printenv_args;
-struct setenv_args setenv_args;
-
void usage_printenv(void)
{

View File

@ -0,0 +1,33 @@
From: Anatolij Gustschin <agust@denx.de>
Date: Fri, 29 Apr 2016 22:00:11 +0200
Subject: [PATCH] tools: env: fix config file loading in env library
env library is broken as the config file pointer is only initialized
in main(). When running in the env library parse_config() fails:
Cannot parse config file '(null)': Bad address
Ensure that config file pointer is always initialized.
Signed-off-by: Anatolij Gustschin <agust@denx.de>
Cc: Stefano Babic <sbabic@denx.de>
(cherry picked from commit 925c97c248527391de32c2926f7e1911850fd4b0)
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
---
tools/env/fw_env.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 2533dc4eec2b..b2f62827d918 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -1326,6 +1326,9 @@ static int parse_config ()
struct stat st;
#if defined(CONFIG_FILE)
+ if (!common_args.config_file)
+ common_args.config_file = CONFIG_FILE;
+
/* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */
if (get_config(common_args.config_file)) {
fprintf(stderr, "Cannot parse config file '%s': %m\n",

View File

@ -1,7 +1,7 @@
From: "Diaz de Grenu, Jose" <Jose.DiazdeGrenu@digi.com> From: "Diaz de Grenu, Jose" <Jose.DiazdeGrenu@digi.com>
Date: Tue, 23 Aug 2016 13:05:05 +0200 Date: Tue, 23 Aug 2016 13:05:05 +0200
Subject: [PATCH] tools: env: implement support for environment encryption Subject: [PATCH] tools: env: implement support for environment encryption by
by CAAM CAAM
https://jira.digi.com/browse/DEL-2836 https://jira.digi.com/browse/DEL-2836
@ -15,30 +15,30 @@ Signed-off-by: Diaz de Grenu, Jose <Jose.DiazdeGrenu@digi.com>
create mode 100644 tools/env/caam_keyblob.h create mode 100644 tools/env/caam_keyblob.h
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index 598519dbb2fc..81dd4d445c0e 100644 index 02534bfea761..5a690c1cc623 100644
--- a/configs/sandbox_defconfig --- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig
@@ -44,3 +44,4 @@ CONFIG_UNIT_TEST=y @@ -90,3 +90,4 @@ CONFIG_UNIT_TEST=y
CONFIG_UT_TIME=y CONFIG_UT_TIME=y
CONFIG_UT_DM=y CONFIG_UT_DM=y
CONFIG_UT_ENV=y CONFIG_UT_ENV=y
+CONFIG_MD5=y +CONFIG_MD5=y
diff --git a/tools/env/Makefile b/tools/env/Makefile diff --git a/tools/env/Makefile b/tools/env/Makefile
index 40164f7a35fa..de4766ddf8dd 100644 index 38ad118d032f..fa2a564bb357 100644
--- a/tools/env/Makefile --- a/tools/env/Makefile
+++ b/tools/env/Makefile +++ b/tools/env/Makefile
@@ -25,7 +25,7 @@ hostprogs-y := fw_printenv @@ -25,7 +25,7 @@ hostprogs-y := fw_printenv
fw_printenv-objs := fw_env.o fw_env_main.o \ lib-y += fw_env.o \
crc32.o ctype.o linux_string.o \ crc32.o ctype.o linux_string.o \
- env_attr.o env_flags.o aes.o - env_attr.o env_flags.o aes.o
+ env_attr.o env_flags.o aes.o ../../lib/md5.o + env_attr.o env_flags.o aes.o ../../lib/md5.o
quiet_cmd_crosstools_strip = STRIP $^ fw_printenv-objs := fw_env_main.o $(lib-y)
cmd_crosstools_strip = $(STRIP) $^; touch $@
diff --git a/tools/env/caam_keyblob.h b/tools/env/caam_keyblob.h diff --git a/tools/env/caam_keyblob.h b/tools/env/caam_keyblob.h
new file mode 100644 new file mode 100644
index 000000000000..1e33b3f01a05 index 000000000000..1cdf3946c1ba
--- /dev/null --- /dev/null
+++ b/tools/env/caam_keyblob.h +++ b/tools/env/caam_keyblob.h
@@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
@ -87,12 +87,11 @@ index 000000000000..1e33b3f01a05
+#endif +#endif
+ +
+#endif /* CAAM_KEYBLOB_H */ +#endif /* CAAM_KEYBLOB_H */
\ No newline at end of file
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index daa02a760e37..806c2fb6d550 100644 index b2f62827d918..46c619b211b5 100644
--- a/tools/env/fw_env.c --- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c +++ b/tools/env/fw_env.c
@@ -21,6 +21,7 @@ @@ -22,6 +22,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -100,14 +99,16 @@ index daa02a760e37..806c2fb6d550 100644
#include <unistd.h> #include <unistd.h>
#ifdef MTD_OLD #ifdef MTD_OLD
@@ -31,10 +32,19 @@ @@ -32,12 +33,21 @@
# include <mtd/mtd-user.h> # include <mtd/mtd-user.h>
#endif #endif
+#include "caam_keyblob.h" +#include "caam_keyblob.h"
#include "fw_env.h" #include "fw_env.h"
#include <aes.h> struct common_args common_args;
struct printenv_args printenv_args;
struct setenv_args setenv_args;
+/* +/*
+ * The BLOB includes a random AES-256 key (32 bytes) and a + * The BLOB includes a random AES-256 key (32 bytes) and a
@ -120,8 +121,8 @@ index daa02a760e37..806c2fb6d550 100644
#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) #define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
#define WHITESPACE(c) ((c == '\t') || (c == ' ')) #define WHITESPACE(c) ((c == '\t') || (c == ' '))
@@ -109,6 +119,8 @@ static int aes_flag; @@ -109,6 +119,8 @@ static struct environment environment = {
static uint8_t aes_key[AES_KEY_LENGTH] = { 0 };
static int env_aes_cbc_crypt(char *data, const int enc); static int env_aes_cbc_crypt(char *data, const int enc);
+static int caam_encryption_flag; +static int caam_encryption_flag;
@ -129,7 +130,7 @@ index daa02a760e37..806c2fb6d550 100644
static int HaveRedundEnv = 0; static int HaveRedundEnv = 0;
static unsigned char active_flag = 1; static unsigned char active_flag = 1;
@@ -236,6 +248,103 @@ static int parse_aes_key(char *key) @@ -234,6 +246,103 @@ int parse_aes_key(char *key, uint8_t *bin_key)
return 0; return 0;
} }
@ -233,7 +234,7 @@ index daa02a760e37..806c2fb6d550 100644
/* /*
* Print the current definition of one, or more, or all * Print the current definition of one, or more, or all
* environment variables * environment variables
@@ -334,6 +443,15 @@ int fw_env_close(void) @@ -311,6 +420,15 @@ int fw_env_close(void)
} }
} }
@ -249,7 +250,7 @@ index daa02a760e37..806c2fb6d550 100644
/* /*
* Update CRC * Update CRC
*/ */
@@ -1191,6 +1309,8 @@ int fw_env_open(void) @@ -1154,6 +1272,8 @@ int fw_env_open(void)
struct env_image_single *single; struct env_image_single *single;
struct env_image_redundant *redundant; struct env_image_redundant *redundant;
@ -258,7 +259,7 @@ index daa02a760e37..806c2fb6d550 100644
if (parse_config ()) /* should fill envdevices */ if (parse_config ()) /* should fill envdevices */
return -1; return -1;
@@ -1229,6 +1349,15 @@ int fw_env_open(void) @@ -1192,6 +1312,15 @@ int fw_env_open(void)
return ret; return ret;
} }
@ -274,7 +275,7 @@ index daa02a760e37..806c2fb6d550 100644
crc0_ok = (crc0 == *environment.crc); crc0_ok = (crc0 == *environment.crc);
if (!HaveRedundEnv) { if (!HaveRedundEnv) {
if (!crc0_ok) { if (!crc0_ok) {
@@ -1286,6 +1415,15 @@ int fw_env_open(void) @@ -1249,6 +1378,15 @@ int fw_env_open(void)
return ret; return ret;
} }

View File

@ -1,17 +1,17 @@
From: Javier Viguera <javier.viguera@digi.com> From: Javier Viguera <javier.viguera@digi.com>
Date: Tue, 1 Apr 2014 18:43:07 +0200 Date: Thu, 16 Feb 2017 14:53:44 +0100
Subject: [PATCH] fw_env: add support to unlock emmc boot partition Subject: [PATCH] fw_env: add support to unlock emmc boot partition
Signed-off-by: Javier Viguera <javier.viguera@digi.com> Signed-off-by: Javier Viguera <javier.viguera@digi.com>
--- ---
tools/env/fw_env.c | 33 +++++++++++++++++++++++++++++++++ tools/env/fw_env.c | 31 +++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+) 1 file changed, 31 insertions(+)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 09f06c874b17..e4e242b35bd1 100644 index 46c619b211b5..1c337b4727a9 100644
--- a/tools/env/fw_env.c --- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c +++ b/tools/env/fw_env.c
@@ -1218,6 +1218,27 @@ static int flash_read (int fd) @@ -1177,9 +1177,31 @@ static int flash_read (int fd)
return 0; return 0;
} }
@ -39,23 +39,24 @@ index 09f06c874b17..e4e242b35bd1 100644
static int flash_io (int mode) static int flash_io (int mode)
{ {
int fd_current, fd_target, rc, dev_target; int fd_current, fd_target, rc, dev_target;
@@ -1250,8 +1271,20 @@ static int flash_io (int mode) + char *mmcblk = NULL;
/* dev_current: fd_current, erase_current */
fd_current = open (DEVNAME (dev_current), mode);
@@ -1209,8 +1231,17 @@ static int flash_io (int mode)
fd_target = fd_current; fd_target = fd_current;
} }
+ /* + /* Disable mmcboot protection if using EMMC (set read-write) */
+ * Disable mmcboot protection (set read-write) + mmcblk = strstr(DEVNAME(dev_target), "mmcblk");
+ * + if (mmcblk)
+ * In a CCIMX6 dev_current and dev_target is the same device so it's ok to + sysfs_mmcboot_set_protection(mmcblk, 0);
+ * just use dev_current here.
+ *
+ */
+ sysfs_mmcboot_set_protection(DEVNAME(dev_current) + 5 /* /dev/ */ , 0);
+ +
rc = flash_write (fd_current, fd_target, dev_target); rc = flash_write (fd_current, fd_target, dev_target);
+ /* Re-enable mmcboot protection (set read-only) */ + /* Re-enable mmcboot protection (set read-only) */
+ sysfs_mmcboot_set_protection(DEVNAME(dev_current) + 5 /* /dev/ */ , 1); + if (mmcblk)
+ sysfs_mmcboot_set_protection(mmcblk, 1);
+ +
if (HaveRedundEnv) { if (HaveRedundEnv) {
if (close (fd_target)) { if (close (fd_target)) {

View File

@ -1,27 +0,0 @@
From: Stefano Babic <sbabic@denx.de>
Date: Mon, 22 Jun 2015 14:58:24 +0200
Subject: [PATCH] Allow fw env tools to be available as library
Signed-off-by: Stefano Babic <sbabic@denx.de>
---
tools/env/Makefile | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tools/env/Makefile b/tools/env/Makefile
index de4766ddf8dd..fa2a564bb357 100644
--- a/tools/env/Makefile
+++ b/tools/env/Makefile
@@ -23,10 +23,12 @@ endif
always := fw_printenv
hostprogs-y := fw_printenv
-fw_printenv-objs := fw_env.o fw_env_main.o \
+lib-y += fw_env.o \
crc32.o ctype.o linux_string.o \
env_attr.o env_flags.o aes.o ../../lib/md5.o
+fw_printenv-objs := fw_env_main.o $(lib-y)
+
quiet_cmd_crosstools_strip = STRIP $^
cmd_crosstools_strip = $(STRIP) $^; touch $@

View File

@ -1,13 +1,15 @@
# Copyright (C) 2015 Digi International # Copyright (C) 2015-2017 Digi International
FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
SRC_URI += " \ SRC_URI += " \
file://fw_env.config \ file://fw_env.config \
file://0001-tools-env-implement-support-for-environment-encrypti.patch \ file://0001-tools-env-bug-config-structs-must-be-defined-in-tool.patch \
file://0002-tools-env-fix-config-file-loading-in-env-library.patch \
file://0003-tools-env-implement-support-for-environment-encrypti.patch \
file://0004-Implement-U-Boot-environment-access-functions.patch \
file://0005-fw_env-add-support-to-unlock-emmc-boot-partition.patch \
" "
SRC_URI_append = " file://0004-Implement-U-Boot-environment-access-functions.patch"
SRC_URI_append_ccimx6 = " file://0002-fw_env-add-support-to-unlock-emmc-boot-partition.patch"
# We do not have a platform defconfig in this version of u-boot, so just use the generic # We do not have a platform defconfig in this version of u-boot, so just use the generic
# sandbox defconfig, which is enough to build the Linux user-space tool (fw_printenv) # sandbox defconfig, which is enough to build the Linux user-space tool (fw_printenv)
@ -20,7 +22,7 @@ do_install_append() {
install -m 0644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/ install -m 0644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/
} }
pkg_postinst_${PN}_ccimx6() { pkg_postinst_${PN}() {
# run the postinst script on first boot # run the postinst script on first boot
if [ x"$D" != "x" ]; then if [ x"$D" != "x" ]; then
exit 1 exit 1