~ruther/guix-local

ceb3952764e49400d4419fea64a9201a32dad3de — Mathieu Othacehe 8 years ago 5a72ddf
system: Add BeagleBone Black installer.

* gnu/bootloader/u-boot.scm (u-boot-beaglebone-black-bootloader): New exported
  bootloader.
* gnu/system/install.scm (beaglebone-black-installation-os): New exported variable.
2 files changed, 51 insertions(+), 3 deletions(-)

M gnu/bootloader/u-boot.scm
M gnu/system/install.scm
M gnu/bootloader/u-boot.scm => gnu/bootloader/u-boot.scm +24 -1
@@ 21,18 21,35 @@
  #:use-module (gnu bootloader extlinux)
  #:use-module (gnu bootloader)
  #:use-module (gnu system)
  #:use-module (gnu build bootloader)
  #: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))
  #:export (u-boot-bootloader
            u-boot-beaglebone-black-bootloader))

(define install-u-boot
  #~(lambda (bootloader device mount-point)
      (if bootloader
        (error "Failed to install U-Boot"))))

(define install-beaglebone-black-u-boot
  ;; http://wiki.beyondlogic.org/index.php?title=BeagleBoneBlack_Upgrading_uBoot
  ;; This first stage bootloader called MLO (U-Boot SPL) is expected at
  ;; 0x20000 by BBB ROM code. The second stage bootloader will be loaded by
  ;; the MLO and is expected at 0x60000.  Write both first stage ("MLO") and
  ;; second stage ("u-boot.img") images, read in BOOTLOADER directory, to the
  ;; specified DEVICE.
  #~(lambda (bootloader device mount-point)
      (let ((mlo (string-append bootloader "/libexec/MLO"))
            (u-boot (string-append bootloader "/libexec/u-boot.img")))
        (write-file-on-device mlo (* 256 512)
                              device (* 256 512))
        (write-file-on-device u-boot (* 1024 512)
                              device (* 768 512)))))



;;;


@@ 45,3 62,9 @@
   (name 'u-boot)
   (package #f)
   (installer install-u-boot)))

(define u-boot-beaglebone-black-bootloader
  (bootloader
   (inherit u-boot-bootloader)
   (package u-boot-beagle-bone-black)
   (installer install-beaglebone-black-u-boot)))

M gnu/system/install.scm => gnu/system/install.scm +27 -2
@@ 22,6 22,7 @@

(define-module (gnu system install)
  #:use-module (gnu)
  #:use-module (gnu bootloader u-boot)
  #:use-module (guix gexp)
  #:use-module (guix store)
  #:use-module (guix monads)


@@ 42,7 43,8 @@
  #:use-module (gnu packages nvi)
  #:use-module (ice-9 match)
  #:use-module (srfi srfi-26)
  #:export (installation-os))
  #:export (installation-os
            beaglebone-black-installation-os))

;;; Commentary:
;;;


@@ 372,7 374,30 @@ You have been warned.  Thanks for being so brave.\x1b[0m
                     nvi                          ;:wq!
                     %base-packages))))

;; Return it here so 'guix system' can consume it directly.
(define beaglebone-black-installation-os
  (operating-system
    (inherit installation-os)
    (bootloader (bootloader-configuration
                 (bootloader u-boot-beaglebone-black-bootloader)
                 (target "/dev/sda")))
    (kernel linux-libre)
    (initrd (lambda (fs . rest)
              (apply base-initrd fs
                     ;; This module is required to mount the sd card.
                     #:extra-modules (list "omap_hsmmc")
                     rest)))
    (services (append
               ;; mingetty does not work on serial lines.
               ;; Use agetty with board-specific serial parameters.
               (list (agetty-service
                      (agetty-configuration
                       (extra-options '("-L"))
                       (baud-rate "115200")
                       (term "vt100")
                       (tty "ttyO0"))))
               (operating-system-user-services installation-os)))))

;; Return the default os here so 'guix system' can consume it directly.
installation-os

;;; install.scm ends here