aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Timothy Sample <samplet@ngyro.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 depthcharge)
  #:use-module (gnu bootloader extlinux)
  #:use-module (gnu bootloader)
  #:use-module (gnu packages bootloaders)
  #:use-module (guix gexp)
  #:use-module (guix utils)
  #:use-module (ice-9 match)
  #:export (depthcharge-bootloader))

(define (signed-kernel kernel kernel-arguments initrd)
  (define builder
    (with-imported-modules '((guix build utils))
      #~(begin
          (use-modules (guix build utils)
                       (ice-9 binary-ports)
                       (rnrs bytevectors))
          (set-path-environment-variable "PATH" '("bin") (list #$dtc))

          ;; TODO: These files have to be writable, so we copy them.
          ;; This can probably be fixed by using a ".its" file, just
          ;; be careful not to break initrd loading.
          (copy-file #$kernel "zImage")
          (chmod "zImage" #o755)
          (copy-file (string-append (dirname #$kernel) "/lib/dtbs/"
                                    "rk3288-veyron-speedy.dtb")
                     "rk3288-veyron-speedy.dtb")
          (chmod "rk3288-veyron-speedy.dtb" #o644)
          (copy-file #$initrd "initrd")
          (chmod "initrd" #o644)

          (invoke (string-append #$u-boot-tools "/bin/mkimage")
                  "-D" "-I dts -O dtb -p 2048"
		  "-f" "auto"
                  "-A" "arm"
                  "-O" "linux"
                  "-T" "kernel"
                  "-C" "None"
                  "-d" "zImage"
                  "-a" "0"
                  "-b" "rk3288-veyron-speedy.dtb"
                  "-i" "initrd"
	          "image.itb")
          (call-with-output-file "bootloader.bin"
            (lambda (port)
              (put-bytevector port (make-bytevector 512 0))))
          (with-output-to-file "kernel-arguments"
	    (lambda ()
	      (display (string-join (list #$@kernel-arguments)))))
          (invoke (string-append #$vboot-utils "/bin/vbutil_kernel")
                  "--pack" #$output
                  "--version" "1"
                  "--vmlinuz" "image.itb"
		  "--arch" "arm"
		  "--keyblock" (string-append #$vboot-utils
                                              "/share/vboot-utils/devkeys/"
                                              "kernel.keyblock")
		  "--signprivate" (string-append #$vboot-utils
                                                 "/share/vboot-utils/devkeys/"
                                                 "kernel_data_key.vbprivk")
                  "--config" "kernel-arguments"
                  "--bootloader" "bootloader.bin"))))
  (computed-file "vmlinux.kpart" builder))

(define* (depthcharge-configuration-file config entries
                                         #:key
                                         (system (%current-system))
                                         (old-entries '())
                                         #:allow-other-keys)
  (match entries
    ((entry)
     (let ((kernel (menu-entry-linux entry))
           (kernel-arguments (menu-entry-linux-arguments entry))
           (initrd (menu-entry-initrd entry)))
       ;; XXX: Make this a symlink.
       (signed-kernel kernel kernel-arguments initrd)))
    (_ (error "Too many bootloader menu entries!"))))

(define install-depthcharge
  #~(lambda (bootloader device mount-point)
      (let ((kpart (string-append mount-point
                                  "/boot/depthcharge/vmlinux.kpart")))
        (write-file-on-device kpart (stat:size (stat kpart)) device 0))))

(define depthcharge-bootloader
  (bootloader
   (name 'depthcharge)
   (package #f)
   (installer install-depthcharge)
   (configuration-file "/boot/depthcharge/vmlinux.kpart")
   (configuration-file-generator depthcharge-configuration-file)))
org> Maxim Cournoyer 2023-09-06.dir-locals: Streamline Geiser configuration....Geiser now has support locating the project root and adding it to the load path without external help; leverage it. * .dir-locals.el [nil]: Remove obsolete Geiser configuration. Set the geiser-repl-per-project-p variable to t. * doc/contributing.texi (The Perfect Setup): No longer mention explicitly setting the geiser-guile-load-path; instead mention the effect of the .dir-locals.el file. Reported-by: Wolf <wolf@wolfsden.cz> Maxim Cournoyer 2023-06-04records: Add MATCH-RECORD-LAMBDA....* guix/records.scm (match-record-lambda): New syntax. * tests/records.scm ("match-record-lambda"): New test. Signed-off-by: Josselin Poiret <dev@jpoiret.xyz> (unmatched-parenthesis ew syntax 2023-06-04dir-locals: Fix MATCH-RECORD indentation....* .dir-locals.el: Treat the fourth form onwards as the body, rather than the third onwards. Signed-off-by: Josselin Poiret <dev@jpoiret.xyz> (unmatched-parenthesis d 2023-03-17Revert gexp->derivation and computed-file indentation rules....This reverts b1c25e2ce364741d1c257d3bb3ab773032807a80 and partially reverts 82daab42811a2e3c7684ebdf12af75ff0fa67b99, which means the computed-file and gexp->derivation procedures are now indented as normal procedures. Rationale: see the discussion at https://lists.gnu.org/archive/html/guix-devel/2023-03/msg00008.html. In a nutshell: the convention is to use special rules for special forms (macros), not for procedures. * .dir-locals.el (scheme-mode): Remove the special indentation rules for the computed-file and gexp->derivation procedures. Maxim Cournoyer 2023-03-05.dir-locals.el: Allow Guix root-dir overrides when working via Tramp....* .dir-localsl.el: Add only the local part of the root directory to the guile search path. This lets you use Tramp to hack on a remote Guix checkout. Signed-off-by: Leo Famulari <leo@famulari.name> Brian Cully 2023-02-19.dir-locals: Add let-keywords indentation rules....* .dir-locals.el (scheme-mode): Add let-keywords indentation rules. Maxim Cournoyer 2023-02-02.dir-locals.el: Adjust indentation rule for test-assertm....* .dir-locals.el: Adjust the scheme-indent-function property for test-assertm, so that the two first arguments (the test name and the store variable) are indented as procedure arguments. Maxim Cournoyer 2023-02-02.dir-locals.el: Add indentation rule for computed-file....* .dir-locals.el: Configure scheme-indent-function property for computed-file, so that its first argument (the file name) is indented as a procedure argument. Maxim Cournoyer 2022-09-07.dir-locals.el: Update yas snippets directory....* .dir-locals.el (eval): Update yas snippets directory. Andrew Tropin 2022-09-05.dir-locals.el: Add .go to completion-ignored-extensions....* .dir-locals.el (eval): Add .go to completion-ignored-extensions. Andrew Tropin 2022-09-05.dir-locals.el: Add guix yasnippets....* .dir-locals.el (eval): Add guix yasnippets. Andrew Tropin 2022-07-10monads: Add 'mparameterize'....* etc/system-tests.scm (mparameterize): Move to... * guix/monads.scm (mparameterize): ... here. * tests/monads.scm ("mparameterize"): New test. * .dir-locals.el (c-mode): Add it. Ludovic Courtès 2022-07-10.dir-locals.el: Restore Emacs 27 lisp-fill-paragraph behavior....* .dir-locals.el (scheme-mode): Set fill-paragraph-function to a lisp-fill-paragraph version that matches that of Emacs 27. Maxim Cournoyer 2022-06-28.dir-locals.el: Properly indent 'wrap-script'....* .dir-locals.el (scheme-mode): Indent 'wrap-script' the same way as 'wrap-program'. Maxim Cournoyer 2022-06-07.dir-locals: Adjust to bug-reference-mode in Emacs 28....* .dir-locals.el: Adjust 'bug-reference-bug-regexp' and 'bug-reference-url-format' to Emacs 28. Ludovic Courtès