uboot-envtools: update to 2018.03

Several changes has been made:

+ AES support has been removed by
  upstream commit c6831c7 (2017-11-14)
  [remove patch "200-fw_env_no_aes.patch"]

+ Support for UBI volumes has beed added by
  upstream commit 34255b9 (2017-11-15)
  [remove patch "300-support-env-in-ubivol-chardev.patch"]

+ A command line argument has beed added ("-c") to manually indicate
  the location of the environment configuration file

Also, patch "400-u-boot-2015.10-stdint.patch" is no longer
necessary, and the config option to enable UBI support has
been removed.

Size comparisons:

fw_printenv size:
Target    Before         After
ar71xx    15,189 bytes   18,133 bytes (+2,944 bytes)
ipq40xx   20,873 bytes   20,987 bytes (+114 bytes)
mvebu     20,881 bytes   20,991 bytes (+110 bytes)
ramips    15,128 bytes   18,072 bytes (+2,944 bytes)

OPKG package size:
Target    Before         After
ar71xx    11,309 bytes   12,875 bytes (+1,566 bytes)
ipq40xx   11,772 bytes   13,299 bytes (+1,527 bytes)
mvebu     11,609 bytes   13,114 bytes (+1,505 bytes)
ramips    10,975 bytes   12,503 bytes (+1,528 bytes)

Compile tested: ipq40xx (musl, glibc, gcc5-musl), ar71xx, mvebu, ramips
Run tested: ipq40xx (ASUS RT-AC58U)

Signed-off-by: Luis Araneda <luaraneda@gmail.com>
This commit is contained in:
Luis Araneda 2018-04-06 11:23:34 -03:00 committed by Hauke Mehrtens
parent 7b758f7f4f
commit 68150d3125
6 changed files with 7 additions and 234 deletions

View file

@ -1,9 +0,0 @@
config UBOOT_ENVTOOLS_UBI
bool "Support environment in UBI volume"
depends on PACKAGE_uboot-envtools
default TARGET_oxnas
help
Add support for reading and writing U-Boot environment
stored in UBI volume(s).
Increases binary size by about 8 kB

View file

@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=uboot-envtools
PKG_DISTNAME:=u-boot
PKG_VERSION:=2015.10
PKG_VERSION:=2018.03
PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/u-boot-$(PKG_VERSION)
@ -17,7 +17,7 @@ PKG_SOURCE:=$(PKG_DISTNAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=\
http://mirror2.openwrt.org/sources \
ftp://ftp.denx.de/pub/u-boot
PKG_HASH:=bdc68d5f9455ad933b059c735d983f2c8b6b552dafb062e5ff1444f623021955
PKG_HASH:=7e7477534409d5368eb1371ffde6820f0f79780a1a1f676161c48442cb303dfd
PKG_BUILD_DEPENDS:=fstools
@ -42,13 +42,10 @@ define Package/uboot-envtools/description
This package includes tools to read and modify U-Boot bootloader environment.
endef
define Package/uboot-envtools/config
source "$(SOURCE)/Config.in"
endef
define Build/Configure
touch $(PKG_BUILD_DIR)/include/config.mk
touch $(PKG_BUILD_DIR)/include/config.h
mkdir -p $(PKG_BUILD_DIR)/include/config
touch $(PKG_BUILD_DIR)/include/config/auto.conf
mkdir -p $(PKG_BUILD_DIR)/include/generated
touch $(PKG_BUILD_DIR)/include/generated/autoconf.h
endef
@ -59,10 +56,9 @@ define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
CROSS_COMPILE="$(TARGET_CROSS)" \
TARGET_CFLAGS="$(TARGET_CFLAGS)" \
UBI="$(CONFIG_UBOOT_ENVTOOLS_UBI)" \
dot-config=0 \
HOSTLDFLAGS= \
env
no-dot-config-targets=envtools \
envtools
endef
define Package/uboot-envtools/conffiles

View file

@ -2,7 +2,7 @@
+++ b/tools/env/Makefile
@@ -10,6 +10,10 @@
# with "CC" here for the maximum code reuse of scripts/Makefile.host.
HOSTCC = $(CC)
override HOSTCC = $(CC)
+ifneq ($(TARGET_CFLAGS),)
+HOSTCFLAGS = $(TARGET_CFLAGS)

View file

@ -1,38 +0,0 @@
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -246,7 +246,7 @@ int fw_printenv (int argc, char *argv[])
int i, n_flag;
int rc = 0;
- if (argc >= 2 && strcmp(argv[1], "-a") == 0) {
+ if (0 && argc >= 2 && strcmp(argv[1], "-a") == 0) {
if (argc < 3) {
fprintf(stderr,
"## Error: '-a' option requires AES key\n");
@@ -325,7 +325,7 @@ int fw_printenv (int argc, char *argv[])
int fw_env_close(void)
{
int ret;
- if (aes_flag) {
+ if (0 && aes_flag) {
ret = env_aes_cbc_crypt(environment.data, 1);
if (ret) {
fprintf(stderr,
@@ -1223,7 +1223,7 @@ int fw_env_open(void)
crc0 = crc32 (0, (uint8_t *) environment.data, ENV_SIZE);
- if (aes_flag) {
+ if (0 && aes_flag) {
ret = env_aes_cbc_crypt(environment.data, 0);
if (ret)
return ret;
@@ -1280,7 +1280,7 @@ int fw_env_open(void)
crc1 = crc32 (0, (uint8_t *) redundant->data, ENV_SIZE);
- if (aes_flag) {
+ if (0 && aes_flag) {
ret = env_aes_cbc_crypt(redundant->data, 0);
if (ret)
return ret;

View file

@ -1,163 +0,0 @@
From 6e2630a0fc872d0db34157972f6dc3941f6d66dd Mon Sep 17 00:00:00 2001
From: Daniel Golle <daniel@makrotopia.org>
Date: Mon, 19 May 2014 21:38:01 +0200
Subject: [PATCH] tools/env: add support for env in ubi volume chardev
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
---
tools/env/Makefile | 5 ++++
tools/env/fw_env.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 71 insertions(+), 10 deletions(-)
--- a/tools/env/Makefile
+++ b/tools/env/Makefile
@@ -24,6 +24,13 @@ ifeq ($(MTD_VERSION),old)
HOST_EXTRACFLAGS += -DMTD_OLD
endif
+ifeq ($(UBI),y)
+HOST_EXTRACFLAGS += -DUBI
+HOST_LOADLIBES = "-Wl,--gc-sections,-lubi-utils"
+else
+HOST_LOADLIBES = "-Wl,--gc-sections"
+endif
+
always := fw_printenv
hostprogs-y := fw_printenv
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -31,6 +31,9 @@
# include <mtd/mtd-user.h>
#endif
+#ifdef UBI
+# include <libubi.h>
+#endif
#include "fw_env.h"
#include <aes.h>
@@ -811,6 +814,11 @@ static int flash_write_buf (int dev, int
off_t top_of_range; /* end of the last block we may use */
loff_t blockstart; /* running start of the current block -
MEMGETBADBLOCK needs 64 bits */
+#ifdef UBI
+ libubi_t *libubi = NULL;/* pointer to libubi struct */
+#else
+ void *libubi = NULL;
+#endif
int rc;
/*
@@ -916,7 +924,30 @@ static int flash_write_buf (int dev, int
continue;
}
- if (mtd_type != MTD_ABSENT) {
+#ifdef UBI
+ if (mtd_type == MTD_UBIVOLUME) {
+ struct ubi_vol_info volinfo;
+ libubi = libubi_open();
+ if (libubi)
+ rc = ubi_get_vol_info(libubi,
+ DEVNAME(dev_current), &volinfo);
+ if (libubi && !rc) {
+ erasesize = volinfo.leb_size;
+ int leb = blockstart / erasesize;
+ if (volinfo.type != UBI_STATIC_VOLUME)
+ rc = ubi_leb_change_start(libubi, fd,
+ leb, erasesize);
+ else
+ rc = ubi_update_start(libubi, fd,
+ erasesize);
+ }
+ if (libubi && rc) {
+ libubi_close(libubi);
+ libubi = NULL;
+ }
+ }
+#endif
+ if (!libubi && mtd_type != MTD_ABSENT) {
erase.start = blockstart;
ioctl(fd, MEMUNLOCK, &erase);
/* These do not need an explicit erase cycle */
@@ -933,7 +964,8 @@ static int flash_write_buf (int dev, int
fprintf (stderr,
"Seek error on %s: %s\n",
DEVNAME (dev), strerror (errno));
- return -1;
+ processed = -1;
+ goto out;
}
#ifdef DEBUG
@@ -943,10 +975,11 @@ static int flash_write_buf (int dev, int
if (write (fd, data + processed, erasesize) != erasesize) {
fprintf (stderr, "Write error on %s: %s\n",
DEVNAME (dev), strerror (errno));
- return -1;
+ processed = -1;
+ goto out;
}
- if (mtd_type != MTD_ABSENT)
+ if (!libubi && mtd_type != MTD_ABSENT)
ioctl(fd, MEMLOCK, &erase);
processed += erasesize;
@@ -957,6 +990,11 @@ static int flash_write_buf (int dev, int
if (write_total > count)
free (data);
+out:
+#ifdef UBI
+ if (libubi)
+ libubi_close(libubi);
+#endif
return processed;
}
@@ -1068,12 +1106,8 @@ static int flash_read (int fd)
if (S_ISCHR(st.st_mode)) {
rc = ioctl(fd, MEMGETINFO, &mtdinfo);
- if (rc < 0) {
- fprintf(stderr, "Cannot get MTD information for %s\n",
- DEVNAME(dev_current));
- return -1;
- }
- if (mtdinfo.type != MTD_NORFLASH &&
+ if (!rc &&
+ mtdinfo.type != MTD_NORFLASH &&
mtdinfo.type != MTD_NANDFLASH &&
mtdinfo.type != MTD_DATAFLASH &&
mtdinfo.type != MTD_UBIVOLUME) {
@@ -1081,6 +1115,28 @@ static int flash_read (int fd)
mtdinfo.type, DEVNAME(dev_current));
return -1;
}
+#ifdef UBI
+ if (rc) {
+ libubi_t *libubi;
+ struct ubi_vol_info volinfo;
+ libubi = libubi_open();
+ if (!libubi)
+ return -ENOMEM;
+
+ rc = ubi_get_vol_info(libubi, DEVNAME(dev_current),
+ &volinfo);
+ if (rc) {
+ libubi_close(libubi);
+ return -ENODEV;
+ }
+ memset(&mtdinfo, 0, sizeof(mtdinfo));
+ mtdinfo.type = MTD_UBIVOLUME;
+ mtdinfo.size = volinfo.data_bytes;
+ mtdinfo.erasesize = volinfo.leb_size;
+ mtdinfo.writesize = volinfo.leb_size;
+ libubi_close(libubi);
+ }
+#endif
} else {
memset(&mtdinfo, 0, sizeof(mtdinfo));
mtdinfo.type = MTD_ABSENT;

View file

@ -1,13 +0,0 @@
diff -Naur u-boot-2015.10.orig/tools/env/fw_env.c u-boot-2015.10/tools/env/fw_env.c
--- u-boot-2015.10.orig/tools/env/fw_env.c 2016-06-24 12:42:31.152391850 +0200
+++ u-boot-2015.10/tools/env/fw_env.c 2016-06-24 12:42:59.080391754 +0200
@@ -21,7 +21,8 @@
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
-#include <unistd.h>
+#include <unistd.h>
+#include <stdint.h>
#ifdef MTD_OLD
# include <stdint.h>