From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59462) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fH9BN-00086F-5Y for guix-patches@gnu.org; Fri, 11 May 2018 10:38:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fH9BK-0005Kz-1M for guix-patches@gnu.org; Fri, 11 May 2018 10:38:05 -0400 Received: from debbugs.gnu.org ([208.118.235.43]:50660) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fH9BJ-0005Kt-Ug for guix-patches@gnu.org; Fri, 11 May 2018 10:38:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1fH9BJ-0006wX-OJ for guix-patches@gnu.org; Fri, 11 May 2018 10:38:01 -0400 Subject: [bug#31416] [PATCH 1/4] system: Add os-with-u-boot. Resent-Message-ID: From: Danny Milosavljevic Date: Fri, 11 May 2018 16:36:49 +0200 Message-Id: <20180511143652.26935-1-dannym@scratchpost.org> In-Reply-To: <20180511143515.23435-1-dannym@scratchpost.org> References: <20180511143515.23435-1-dannym@scratchpost.org> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 31416@debbugs.gnu.org * gnu/system/install.scm (os-with-u-boot): New procedure. * gnu/packages/bootloaders.scm (make-u-boot-package): Export. * doc/guix.texi (Building the Installation Image for ARM boards): New subsection. --- doc/guix.texi | 21 +++++++++++++++++++++ gnu/packages/bootloaders.scm | 2 +- gnu/system/install.scm | 16 +++++++++++++++- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 637c9c3f4..b2b173ded 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -8733,6 +8733,27 @@ Have a look at @file{gnu/system/install.scm} in the source tree, and see also @ref{Invoking guix system} for more information about the installation image. +@subsection Building the Installation Image for ARM boards + +Many ARM boards require a board-specific bootloader in order to boot. + +If you build an entire disk image and the is not still available otherwise +(on another available drive etc), it's advisable to build an image that +includes the bootloader, specifically: + +@example +guix system disk-image --system=armhf-linux -e '((@ (gnu system install) os-with-u-boot) (@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")' +@end example + +Or if you don't cross compile: + +@example +guix system disk-image -e '((@ (gnu system install) os-with-u-boot) (@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")' +@end example + +"A20-OLinuXino-Lime2" is the name of the board. If you specify an invalid +board, you get a list. + @node System Configuration @section System Configuration diff --git a/gnu/packages/bootloaders.scm b/gnu/packages/bootloaders.scm index c0a0101c5..526e53384 100644 --- a/gnu/packages/bootloaders.scm +++ b/gnu/packages/bootloaders.scm @@ -359,7 +359,7 @@ tree binary files. These are board description files used by Linux and BSD.") also initializes the boards (RAM etc).") (license license:gpl2+))) -(define (make-u-boot-package board triplet) +(define-public (make-u-boot-package board triplet) "Returns a u-boot package for BOARD cross-compiled for TRIPLET." (let ((same-arch? (if (string-prefix? (%current-system) (gnu-triplet->nix-system triplet)) diff --git a/gnu/system/install.scm b/gnu/system/install.scm index a2917e485..b563e8b5b 100644 --- a/gnu/system/install.scm +++ b/gnu/system/install.scm @@ -52,7 +52,8 @@ mx6cuboxi-installation-os nintendo-nes-classic-edition-installation-os novena-installation-os - wandboard-installation-os)) + wandboard-installation-os + os-with-u-boot)) ;;; Commentary: ;;; @@ -386,6 +387,19 @@ You have been warned. Thanks for being so brave.\x1b[0m nvi ;:wq! %base-packages)))) +(define* (os-with-u-boot os board #:key (bootloader-target "/dev/mmcblk0") + (triplet "arm-linux-gnueabihf")) + "Given OS, amend it with the u-boot bootloader for BOARD, +installed to BOOTLOADER-TARGET (a drive), compiled for TRIPLET. + +If you want a serial console, make sure to specify one in your +operating-system's kernel-arguments (\"console=ttyS0\" or similar)." + (operating-system (inherit os) + (bootloader (bootloader-configuration + (bootloader (bootloader (inherit u-boot-bootloader) + (package (make-u-boot-package board triplet)))) + (target bootloader-target))))) + (define* (embedded-installation-os bootloader bootloader-target tty #:key (extra-modules '())) "Return an installation os for embedded systems.