repk / gxlimg

Boot Image creation tool for amlogic s905x (GXL)
BSD 2-Clause "Simplified" License
58 stars 28 forks source link

Build failure to create final boot image #20

Open phodina opened 1 year ago

phodina commented 1 year ago

Hi @repk , thanks for the tools to package u-boot in libre way on recent Linux.

However, following the instructions in the readme I get the following error when attempting to make the final boot image:

command "gxlimg" "-t" "fip" "--bl2" "fip/bl2.bin.enc" "--bl30" "fip/bl30.bin.enc" "--bl31" "fip/bl31.img.enc" "--bl33" "u-boot.bin.enc" "gxl-boot.bin" failed with status 234

I'm attempting to make package definition for the u-boot on Amlogic SoC s905x for GNU Guix. Here's the definition:

 (define (make-u-boot-amlogic-package board)
  (let ((base (make-u-boot-package
               board "aarch64-linux-gnu" #:append-description %u-boot-amlogic-description-64-bit))
         (commit "e0638f1d09b9e9caead4e3909e7dc8aaa41febe1")
         (revision "1"))
    (package
      (inherit base)
      (version "202301")
      (source (origin
                (method url-fetch)
                (uri (string-append
                "https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/archive/"
                commit "/u-boot-amlogic-" commit ".tar.gz"))
                (patches (search-patches
                     "u-boot-disable-OpenSSL.patch"))
                (sha256
                 (base32
                  "1idgh8qn073p50pi2fan65nzxj7j3r0pq797zbdbrb7gs555b6zy"))
                ))
    (inputs
     (modify-inputs (package-inputs base)
       (append gxlimg linux-libre-headers)))
      (arguments
       (substitute-keyword-arguments (package-arguments base)
         ((#:phases phases)
          #~(modify-phases #$phases
             (add-after 'unpack 'copy-defconfig
              (lambda* (#:key inputs #:allow-other-keys)
                 (let ((bl2-dl #$(origin
              (method url-fetch)
              (uri
                 "https://github.com/BayLibre/u-boot/raw/libretech-cc/fip/gxl/bl2.bin")
              (sha256
               (base32
                "19pv7v904s66addhxwk9mzybdv26dpkygxc7075xvaqiq2pl9h3b"))))
                 (bl30-dl #$(origin
              (method url-fetch)
              (uri
                 "https://github.com/BayLibre/u-boot/raw/libretech-cc/fip/gxl/bl30.bin")
              (sha256
               (base32
                "0839nrfcbkj64nyn3ji7f1j9xa2p1apd3vn7qvpxyfj884ihspiv"))))
                 (bl31-dl #$(origin
              (method url-fetch)
              (uri
                 "https://github.com/BayLibre/u-boot/raw/libretech-cc/fip/gxl/bl31.img")
              (sha256
               (base32
                "0gkdcpn9rvglcpb1h76pb13d718g1vi8qviqzwj8c7fv0n6xs149")))))
               (substitute* "Makefile"
               ((".bin.pwd") (search-input-file inputs "bin/pwd"))
               ((".bin.bash") (search-input-file inputs "bin/bash")))
               (install-file bl2-dl "fip")
               (install-file bl30-dl "fip")
               (install-file bl31-dl "fip")
               (rename-file (string-append "fip/" (basename bl2-dl))
               "fip/bl2.bin")
               (rename-file (string-append "fip/" (basename bl30-dl))
               "fip/bl30.bin")
               (rename-file (string-append "fip/" (basename bl31-dl))
               "fip/bl31.img")
               )))
             (add-before 'install 'package
               (lambda* (#:key native-inputs inputs #:allow-other-keys)
                 (let ((fip (string-append (getcwd) "/fip"))
                       (gxlimg (search-input-file inputs "/bin/gxlimg")))
                 ;; Sign BL2
                 (invoke "gxlimg" "-t" "bl2" "-s" "fip/bl2.bin" "fip/bl2.bin.enc")

  ;; Encrypt BL3*
  (invoke "gxlimg" "-t" "bl3x" "-c" "fip/bl30.bin" "fip/bl30.bin.enc")
   (invoke "gxlimg" "-t" "bl3x" "-c" "fip/bl31.img" "fip/bl31.img.enc")
   ;; Encrypt u-boot
   (invoke "gxlimg" "-t" "bl3x" "-c" "u-boot.bin" "u-boot.bin.enc")
   ;; Create the final boot image
   (invoke "gxlimg" "-t" "fip" "--bl2" "fip/bl2.bin.enc" "--bl30"
   "fip/bl30.bin.enc"
     "--bl31" "fip/bl31.img.enc" "--bl33" "u-boot.bin.enc" "gxl-boot.bin")
     (delete-file-recursively "fip")
     ;; Create USB boot files
     (invoke "dd" "if=gxl-boot.bin" "of=u-boot.bin.usb.bl2" "bs=49152" "count=1")
     (invoke "dd" "if=gxl-boot.bin" "of=u-boot.bin.usb.tpl" "skip=49152" "bs=1")
;; Install files
   (install-file "u-boot.bin.usb.bl2" (string-append #$output "/libexec"))
   (install-file "u-boot.bin.usb.tpl" (string-append #$output "/libexec"))
   (install-file "gxl-boot.bin" (string-append #$output "/libexec"))
   ))))))))))

The important parts are https://source.denx.de/u-boot/custodians/u-boot-amlogic as u-boot source with commit e0638f1d09b9e9caead4e3909e7dc8aaa41febe1. This builds okay without any additional steps.

But I wanted to have already the bootloader in the format the HW expects it so I added additional stage to download the binaries from https://github.com/BayLibre/u-boot/raw/libretech-cc/fip/gxl/* (bl2.bin, bl30.bin and bl31.img).

Then I follow the instructions and run the commands you listed.

Any idea what's wrong?