unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Vagrant Cascadian <vagrant@debian.org>
To: Danny Milosavljevic <dannym@scratchpost.org>
Cc: 35217@debbugs.gnu.org
Subject: [bug#35217] gnu: u-boot: Update to 2019.04.
Date: Mon, 15 Apr 2019 21:46:57 -0700	[thread overview]
Message-ID: <87lg0a1rr2.fsf@ponder> (raw)
In-Reply-To: <20190415230214.31877ad1@scratchpost.org>


[-- Attachment #1.1: Type: text/plain, Size: 2862 bytes --]

On 2019-04-15, Danny Milosavljevic wrote:
> On Wed, 10 Apr 2019 15:22:18 -0700
> Vagrant Cascadian <vagrant@debian.org> wrote:
>
>> > On 2019-04-10, Vagrant Cascadian wrote:
>> > * gnu/packages/bootloaders (u-boot): Update to 2019.04.  
>> ...
>> >   (u-boot-am335x-evm): New variable.
>> >   (u-boot-am335x-boneblack): Deprecate variable.  
>> 
>> The am335x-boneblack configuration was dropped from upstream.
>> 
>> The am335x-evm image is considerably larger than the am335x-boneblack
>> images, which leads to issues when installing at a device offset, as it
>> will overwrite the first partition unless the first partition starts
>> significantly later than most tools (parted, cfdisk) default of sector
>> 2048 (beagleboard.org images start the first partition at sector 8192).
>> 
>> The embedded-os-installation code should probably check to make sure
>> they aren't trampling the first partition if installing to the raw
>> device offset.
>
> That would make the parted bindings a hard dependency, probably even
> build-side.  But I think that would still be better than the alternative:
> destroying user filesystems.

Could do some math; e.g. the offset is 768, first sector is 2048. So if
2048-768-(size-of-in-sectors u-boot.img) >> 0, it should be ok. Better
checking that done currently, at least.

But more sophisticated, of course, would be checking the actual layout
of the partition table... some targets (pine64+/pinebook) have offsets
that conflict with GPT partition tables, for example.


>> Alternately, it's possible to copy the u-boot.img onto the first FAT
>> partition of the microSD/eMMC, which will be loaded instead of the
>> offset. But that takes some rethinking of how to install the bootloader
>> (which would be good to not diverge from upstream for other platforms,
>> such as u-boot-novena).
>
> Yeah, I think sooner or later it's going to come to this.  Might as well
> bite the bullet now.

Hmmm...


>> In light of all that, I'm not sure what a proper way forward is...
>
> Yeah, sounds like a bad situation with no nice solution that allows
> updating of existing installations.  In that case, keeping existing
> installations on the old version would be preferrable to breaking
> them.

Short of that, here's an updated u-boot 2019.04 patch that:

- Generates a u-boot-am335x-boneblack package with a slightly modified
  am335x_evm configuration removing extra device-trees; that *should* be
  small enough to fit with the common partition tables (but so far
  untested). It theoretically has about 80k of wiggle-room for
  u-boot.img to grow before it becomes a problem again.

- Better commented patch fixing mkimage to pass test-imagetools test
  suite. Patch was accepted in at least one of the maintainer trees
  upstream.

live well,
  vagrant


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-gnu-u-boot-Update-to-2019.04.patch --]
[-- Type: text/x-diff, Size: 7486 bytes --]

From 2d9f80129801475002f6368074356a5eff9f24b4 Mon Sep 17 00:00:00 2001
From: Vagrant Cascadian <vagrant@debian.org>
Date: Mon, 18 Feb 2019 04:01:23 +0000
Subject: [PATCH] gnu: u-boot: Update to 2019.04.

* gnu/packages/bootloaders (u-boot): Update to 2019.04.
  [source]: Add patch.
  (u-boot-novena): Update dynamic patch to handle variable rename.
  (u-boot-am335x-evm): New variable.
  (u-boot-am335x-boneblack): Build with modified am335x-evm config.
  (u-boot-novena): Fix typo in description.
* gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch: New file.
* gnu/local.mk (dist_patch_DATA): Update accordingly.
---
 gnu/local.mk                                  |  1 +
 gnu/packages/bootloaders.scm                  | 39 +++++++++++--
 ...boot-fix-mkimage-header-verification.patch | 57 +++++++++++++++++++
 3 files changed, 91 insertions(+), 6 deletions(-)
 create mode 100644 gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index df96b98f07..660e96c856 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1308,6 +1308,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/totem-meson-easy-codec.patch		\
   %D%/packages/patches/tuxpaint-stamps-path.patch		\
   %D%/packages/patches/twinkle-include-qregexpvalidator.patch	\
+  %D%/packages/patches/u-boot-fix-mkimage-header-verification.patch	\
   %D%/packages/patches/unzip-CVE-2014-8139.patch		\
   %D%/packages/patches/unzip-CVE-2014-8140.patch		\
   %D%/packages/patches/unzip-CVE-2014-8141.patch		\
diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm
index d6ef7d52b5..a2ac151978 100644
--- a/gnu/packages/bootloaders.scm
+++ b/gnu/packages/bootloaders.scm
@@ -378,7 +378,7 @@ tree binary files.  These are board description files used by Linux and BSD.")
 (define u-boot
   (package
     (name "u-boot")
-    (version "2019.01")
+    (version "2019.04")
     (source (origin
               (method url-fetch)
               (uri (string-append
@@ -386,7 +386,10 @@ tree binary files.  These are board description files used by Linux and BSD.")
                     "u-boot-" version ".tar.bz2"))
               (sha256
                (base32
-                "08hwsmh5xsb1gcxsv8gvx00bai938dm5y3889n8jif3a8rd7xgah"))))
+                "1vwv4bgbl7fjcm073zrphn17hnz5h5h778f88ivdsgbb2lnpgdvn"))
+              (patches
+               (search-patches 
+                "u-boot-fix-mkimage-header-verification.patch"))))
     (native-inputs
      `(("bc" ,bc)
        ("bison" ,bison)
@@ -577,8 +580,32 @@ board-independent tools.")))
 (define-public u-boot-malta
   (make-u-boot-package "malta" "mips64el-linux-gnuabi64"))
 
-(define-public u-boot-beagle-bone-black
-  (make-u-boot-package "am335x_boneblack" "arm-linux-gnueabihf"))
+(define-public u-boot-am335x-boneblack
+  (let ((base (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf")))
+    (package
+      (inherit base)
+      (name "u-boot-am335x-boneblack")
+      (description "U-Boot is a bootloader used mostly for ARM boards. It
+also initializes the boards (RAM etc).
+
+This U-Boot is built for the BeagleBone Black, which was removed upstream,
+adjusted from the am335x_evm build with several device trees removed so that
+it fits within common partitioning schemes.")
+      (arguments
+       (substitute-keyword-arguments (package-arguments base)
+         ((#:phases phases)
+          `(modify-phases ,phases
+             (add-after 'unpack 'patch-defconfig
+               ;; Patch out other devicetrees to build image small enough to
+               ;; fit within typical partitioning schemes where the first
+               ;; partition begins at sector 2048.
+               (lambda _
+                 (substitute* "configs/am335x_evm_defconfig"
+                   (("CONFIG_OF_LIST=.*$") "CONFIG_OF_LIST=\"am335x-evm am335x-boneblack\"\n"))
+                 #t)))))))))
+
+(define-public u-boot-am335x-evm
+  (make-u-boot-package "am335x_evm" "arm-linux-gnueabihf"))
 
 (define-public (make-u-boot-sunxi64-package board triplet)
   (let ((base (make-u-boot-package board triplet)))
@@ -637,7 +664,7 @@ board-independent tools.")))
 also initializes the boards (RAM etc).
 
 This U-Boot is built for Novena.  Be advised that this version, contrary
-to Novena upstream, does not load u-boot.img from the first patition.")
+to Novena upstream, does not load u-boot.img from the first partition.")
       (arguments
        (substitute-keyword-arguments (package-arguments base)
          ((#:phases phases)
@@ -647,7 +674,7 @@ to Novena upstream, does not load u-boot.img from the first patition.")
                ;; allowing it to be installed at a device offset.
                (lambda _
                  (substitute* "configs/novena_defconfig"
-                   (("CONFIG_SPL_FAT_SUPPORT=y") "# CONFIG_SPL_FAT_SUPPORT is not set"))
+                   (("CONFIG_SPL_FS_FAT=y") "# CONFIG_SPL_FS_FAT is not set"))
                  #t)))))))))
 
 (define-public u-boot-cubieboard
diff --git a/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch b/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch
new file mode 100644
index 0000000000..063677db4a
--- /dev/null
+++ b/gnu/packages/patches/u-boot-fix-mkimage-header-verification.patch
@@ -0,0 +1,57 @@
+From 48b52117235928cfd7ef1ec5c3f2cff5d7b03862 Mon Sep 17 00:00:00 2001
+From: Jordan Hand <jordanhand22@gmail.com>
+Date: Wed, 10 Apr 2019 09:46:32 -0700
+Subject: [PATCH,v2] fdt: Fix mkimage list to try every header type
+Origin: https://patchwork.ozlabs.org/patch/1083495/
+
+Image type is not supplied to `mkimage -l`. For this reason, we cannot
+use imagetool_verify_print_header_by_type. Instead, this patch uses
+imagetool_verify_print_header to look through all header types to find
+one where image validation succeeds.
+
+This patch fixes failures in test/image/test-imagetools.sh
+
+Signed-off-by: Jordan Hand <jorhand@microsoft.com>
+Tested-by: Alex Kiernan <alex.kiernan@gmail.com>
+Tested-by: Vagrant Cascadian <vagrant@debian.org>
+---
+ tools/mkimage.c | 23 +++++++++++++++--------
+ 1 file changed, 15 insertions(+), 8 deletions(-)
+
+diff --git a/tools/mkimage.c b/tools/mkimage.c
+index 2899adff81..76c3406d37 100644
+--- a/tools/mkimage.c
++++ b/tools/mkimage.c
+@@ -403,14 +403,21 @@ int main(int argc, char **argv)
+ 			exit (EXIT_FAILURE);
+ 		}
+ 
+-		/*
+-		 * scan through mkimage registry for all supported image types
+-		 * and verify the input image file header for match
+-		 * Print the image information for matched image type
+-		 * Returns the error code if not matched
+-		 */
+-		retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
+-				tparams, &params);
++		if (params.fflag) {
++			/*
++			 * Verifies the header format based on the expected header for
++			 * image type in tparams
++			 */
++			retval = imagetool_verify_print_header_by_type(ptr, &sbuf,
++					tparams, &params);
++		} else {
++			/**
++			 * When listing the image, we are not given the image type. Simply check all
++			 * image types to find one that matches our header
++			 */
++			retval = imagetool_verify_print_header(ptr, &sbuf,
++					tparams, &params);
++		}
+ 
+ 		(void) munmap((void *)ptr, sbuf.st_size);
+ 		(void) close (ifd);
+-- 
+2.20.1
+
-- 
2.20.1


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

  reply	other threads:[~2019-04-16  4:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-10  7:39 [bug#35217] gnu: u-boot: Update to 2019.04 Vagrant Cascadian
     [not found] ` <87zhox33vu.fsf@ponder>
2019-04-10 22:22   ` Vagrant Cascadian
2019-04-15 21:02     ` Danny Milosavljevic
2019-04-16  4:46       ` Vagrant Cascadian [this message]
2019-04-29 10:35         ` bug#35217: " Danny Milosavljevic

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87lg0a1rr2.fsf@ponder \
    --to=vagrant@debian.org \
    --cc=35217@debbugs.gnu.org \
    --cc=dannym@scratchpost.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).