[PATCH] bootloader: Add u-boot.

  • Done
  • quality assurance status badge
Details
2 participants
  • Danny Milosavljevic
  • Ludovic Courtès
Owner
unassigned
Submitted by
Danny Milosavljevic
Severity
normal

Debbugs page

Danny Milosavljevic wrote 8 years ago
(address . guix-patches@gnu.org)(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
20170611105838.24708-1-dannym@scratchpost.org
* gnu/bootloader/u-boot.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
* doc/guix.texi: Document it.
---
doc/guix.texi | 8 ++++----
gnu/bootloader/u-boot.scm | 42 ++++++++++++++++++++++++++++++++++++++++++
gnu/local.mk | 1 +
3 files changed, 47 insertions(+), 4 deletions(-)
create mode 100644 gnu/bootloader/u-boot.scm

Toggle diff (79 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 87aaae854..b47701d66 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -15740,10 +15740,10 @@ The type of a bootloader configuration declaration.
@cindex UEFI, bootloader
@cindex BIOS, bootloader
The bootloader to use, as a @code{bootloader} object. For now
-@code{grub-bootloader}, @code{grub-efi-bootloader} and
-@code{extlinux-bootloader} are supported. @code{grub-efi-bootloader},
-allows to boot on modern systems using the @dfn{Unified Extensible
-Firmware Interface} (UEFI).
+@code{grub-bootloader}, @code{grub-efi-bootloader},
+@code{extlinux-bootloader} and @code{u-boot-bootloader} are supported.
+@code{grub-efi-bootloader} allows to boot on modern systems using the
+@dfn{Unified Extensible Firmware Interface} (UEFI).
Available bootloaders are described in @code{(gnu bootloader @dots{})}
modules.
diff --git a/gnu/bootloader/u-boot.scm b/gnu/bootloader/u-boot.scm
new file mode 100644
index 000000000..64cbd5c14
--- /dev/null
+++ b/gnu/bootloader/u-boot.scm
@@ -0,0 +1,42 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2017 David Craven <david@craven.ch>
+;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu bootloader u-boot)
+ #:use-module (gnu bootloader extlinux)
+ #:use-module (gnu bootloader)
+ #:use-module (gnu system)
+ #:use-module (gnu packages bootloaders)
+ #:use-module (guix gexp)
+ #:use-module (guix monads)
+ #:use-module (guix records)
+ #:use-module (guix utils)
+ #:export (u-boot-bootloader))
+
+
+
+;;;
+;;; Bootloader definitions.
+;;;
+
+(define u-boot-bootloader
+ (bootloader
+ (inherit extlinux-bootloader)
+ (name 'u-boot)
+ (package #f)
+ (installer #f)))
diff --git a/gnu/local.mk b/gnu/local.mk
index 70b4a44a1..a890a9c9e 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -39,6 +39,7 @@ GNU_SYSTEM_MODULES = \
%D%/bootloader.scm \
%D%/bootloader/grub.scm \
%D%/bootloader/extlinux.scm \
+ %D%/bootloader/u-boot.scm \
%D%/packages.scm \
%D%/packages/abduco.scm \
%D%/packages/abiword.scm \
Ludovic Courtès wrote 8 years ago
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
87zid8gwag.fsf@gnu.org
Hello,

(+Cc: Mathieu.)

Danny Milosavljevic <dannym@scratchpost.org> skribis:

Toggle quote (4 lines)
> * gnu/bootloader/u-boot.scm: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
> * doc/guix.texi: Document it.

[...]

Toggle quote (11 lines)
> +;;;
> +;;; Bootloader definitions.
> +;;;
> +
> +(define u-boot-bootloader
> + (bootloader
> + (inherit extlinux-bootloader)
> + (name 'u-boot)
> + (package #f)
> + (installer #f)))

I still find it weird to use #f for these two fields.

I would find it more reasonable to have, say, a ‘make-u-boot-bootloader’
that returns a <bootloader> with all the fields appropriately set (not
#f). Otherwise it sounds like we’re going to have to deal with support
requests #about “wrong type to apply: #f”, and I’d like to avoid that.
:-)

Can’t we just say that ‘package’ is always a <package> and that
‘installer’ is always a procedure? Eventually we’ll hopefully arrange
to check that at macro-expansion time and/or via contracts.

WDYT?

Apart from that, pretty happy to see U-Boot finally making it into
GuixSD!

Ludo’.
Danny Milosavljevic wrote 8 years ago
(name . Ludovic Courtès)(address . ludo@gnu.org)
20170616110434.7640597f@scratchpost.org
Hi Ludo,

On Fri, 16 Jun 2017 10:40:39 +0200
ludo@gnu.org (Ludovic Courtès) wrote:

Toggle quote (11 lines)
> > + (package #f)
> > + (installer #f)))
>
> I still find it weird to use #f for these two fields.
>
> I would find it more reasonable to have, say, a ‘make-u-boot-bootloader’
> that returns a <bootloader> with all the fields appropriately set (not
> #f). Otherwise it sounds like we’re going to have to deal with support
> requests #about “wrong type to apply: #f”, and I’d like to avoid that.
> :-)

Yeah, but I think Mathieu added explicit support for leaving those #f.

Toggle quote (2 lines)
> Can’t we just say that ‘package’ is always a <package>

Difficult. U-Boot is more like a BIOS is on PCs. That means in normal operation you'd not flash it. If there was a mistake in the flashed U-Boot often you can't fix it again without electronics knowledge and gear (if at all - serial pads must be available on the board). There's no extra BIOS. U-Boot does it all: RAM initialization, keyboard initialization, display initialization etcetc.

Sometimes flashing is only possible via serial cable (or worse) from an external machine.

Also, there are lots of forks of U-Boot. Since U-Boot is licensed under GPL the package should be available somewhere - but not necessarily in the U-Boot master branch (and often it's in fact not available there).

In short, we should add U-Boot packages gradually, and only after testing each U-Boot package on the hardware.

That means in the beginning we'd have a LOT of (package #f) - but that's still preferrable to bricking.

Toggle quote (3 lines)
>and that
> ‘installer’ is always a procedure?

Yeah, the installation procedure could probably check (if package (invoke "...")).

I've submitted this minimal patch mostly to make clear how U-Boot would extend extlinux. I think it's good to have it in place as a guard against too-much-syslinux-bias :)

That said, it should actually make GuixSD boot on a machine with U-Boot already installed.
Ludovic Courtès wrote 8 years ago
(name . Danny Milosavljevic)(address . dannym@scratchpost.org)
87h8zgglcj.fsf@gnu.org
Hello,

Danny Milosavljevic <dannym@scratchpost.org> skribis:

Toggle quote (33 lines)
> On Fri, 16 Jun 2017 10:40:39 +0200
> ludo@gnu.org (Ludovic Courtès) wrote:
>
>> > + (package #f)
>> > + (installer #f)))
>>
>> I still find it weird to use #f for these two fields.
>>
>> I would find it more reasonable to have, say, a ‘make-u-boot-bootloader’
>> that returns a <bootloader> with all the fields appropriately set (not
>> #f). Otherwise it sounds like we’re going to have to deal with support
>> requests #about “wrong type to apply: #f”, and I’d like to avoid that.
>> :-)
>
> Yeah, but I think Mathieu added explicit support for leaving those #f.
>
>> Can’t we just say that ‘package’ is always a <package>
>
> Difficult. U-Boot is more like a BIOS is on PCs. That means in normal operation you'd not flash it. If there was a mistake in the flashed U-Boot often you can't fix it again without electronics knowledge and gear (if at all - serial pads must be available on the board). There's no extra BIOS. U-Boot does it all: RAM initialization, keyboard initialization, display initialization etcetc.
>
> Sometimes flashing is only possible via serial cable (or worse) from an external machine.
>
> Also, there are lots of forks of U-Boot. Since U-Boot is licensed under GPL the package should be available somewhere - but not necessarily in the U-Boot master branch (and often it's in fact not available there).
>
> In short, we should add U-Boot packages gradually, and only after testing each U-Boot package on the hardware.
>
> That means in the beginning we'd have a LOT of (package #f) - but that's still preferrable to bricking.
>
>>and that
>> ‘installer’ is always a procedure?
>
> Yeah, the installation procedure could probably check (if package (invoke "...")).

Yeah, I think so.

I mean, you could run “guix system reconfigure --no-bootloader” or, if
you want to be sure you don’t flash your device inadvertently, you could
use ‘u-boot-noop-bootloader’ or similar, which is like
‘u-boot-bootloader’ except that it never installs anything beyond its
config file.

Toggle quote (2 lines)
> I've submitted this minimal patch mostly to make clear how U-Boot would extend extlinux. I think it's good to have it in place as a guard against too-much-syslinux-bias :)

Yup, makes sense!

Toggle quote (2 lines)
> That said, it should actually make GuixSD boot on a machine with U-Boot already installed.

That’s pretty cool. Looking forward to GuixSD on ARM!

Ludo’.
Danny Milosavljevic wrote 8 years ago
(no subject)
(address . control@debbugs.gnu.org)
20170715125424.2ee759f4@scratchpost.org
close 27327
?
Your comment

This issue is archived.

To comment on this conversation send an email to 27327@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 27327
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch
You may also tag this issue. See list of standard tags. For example, to set the confirmed and easy tags
mumi command -t +confirmed -t +easy
Or, remove the moreinfo tag and set the help tag
mumi command -t -moreinfo -t +help