From 0986a60f9a2b1faabd6b8117406997601a6408cd Mon Sep 17 00:00:00 2001 From: Jonathan Amiez Date: Sat, 12 Nov 2022 14:58:02 +0100 Subject: [PATCH] uboot: add Librecomputer CC custom build Add a new U-boot flavor for LibreComputer's AML-S905X-CC (Le Potato). Board's SoC is based on Trusted Firmware-A architecture and needs extra closed-source early bootloaders to be combined with U-boot in order to boot properly, similar to Odroid-C2 board. Proprietary blobs and related tooling are fetched from github.com/LibreELEC/amlogic-boot-fip and used in postBuild along with build output. Hardware: https://libre.computer/products/aml-s905x-cc/ U-boot doc: https://u-boot.readthedocs.io/en/latest/board/amlogic/libretech-cc.html --- pkgs/misc/uboot/default.nix | 41 +++++++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 2 files changed, 42 insertions(+) diff --git a/pkgs/misc/uboot/default.nix b/pkgs/misc/uboot/default.nix index 2937e1ca862b..2358a59f5d5a 100644 --- a/pkgs/misc/uboot/default.nix +++ b/pkgs/misc/uboot/default.nix @@ -211,6 +211,47 @@ in { ''; }; + # Flashing instructions: + # dd if=u-boot.gxl.sd.bin of= conv=fsync,notrunc bs=512 skip=1 seek=1 + # dd if=u-boot.gxl.sd.bin of= conv=fsync,notrunc bs=1 count=444 + ubootLibreTechCC = let + firmwareImagePkg = fetchFromGitHub { + owner = "LibreELEC"; + repo = "amlogic-boot-fip"; + rev = "4369a138ca24c5ab932b8cbd1af4504570b709df"; + sha256 = "sha256-mGRUwdh3nW4gBwWIYHJGjzkezHxABwcwk/1gVRis7Tc="; + meta.license = lib.licenses.unfreeRedistributableFirmware; + }; + in + assert stdenv.buildPlatform.system == "x86_64-linux"; # aml_encrypt_gxl is a x86_64 binary + buildUBoot { + defconfig = "libretech-cc_defconfig"; + extraMeta.platforms = ["aarch64-linux"]; + filesToInstall = ["u-boot.bin"]; + postBuild = '' + # Copy binary files & tools from LibreELEC/amlogic-boot-fip, and u-boot build to working dir + mkdir $out tmp + cp ${firmwareImagePkg}/lepotato/{acs.bin,bl2.bin,bl21.bin,bl30.bin,bl301.bin,bl31.img} \ + ${firmwareImagePkg}/lepotato/{acs_tool.py,aml_encrypt_gxl,blx_fix.sh} \ + u-boot.bin tmp/ + cd tmp + python3 acs_tool.py bl2.bin bl2_acs.bin acs.bin 0 + + bash -e blx_fix.sh bl2_acs.bin zero bl2_zero.bin bl21.bin bl21_zero.bin bl2_new.bin bl2 + [ -f zero ] && rm zero + + bash -e blx_fix.sh bl30.bin zero bl30_zero.bin bl301.bin bl301_zero.bin bl30_new.bin bl30 + [ -f zero ] && rm zero + + ./aml_encrypt_gxl --bl2sig --input bl2_new.bin --output bl2.n.bin.sig + ./aml_encrypt_gxl --bl3enc --input bl30_new.bin --output bl30_new.bin.enc + ./aml_encrypt_gxl --bl3enc --input bl31.img --output bl31.img.enc + ./aml_encrypt_gxl --bl3enc --input u-boot.bin --output bl33.bin.enc + ./aml_encrypt_gxl --bootmk --output $out/u-boot.gxl \ + --bl2 bl2.n.bin.sig --bl30 bl30_new.bin.enc --bl31 bl31.img.enc --bl33 bl33.bin.enc + ''; + }; + ubootNanoPCT4 = buildUBoot rec { rkbin = fetchFromGitHub { owner = "armbian"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6555457e87a9..3106ff973828 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -25939,6 +25939,7 @@ with pkgs; ubootCubieboard2 ubootGuruplug ubootJetsonTK1 + ubootLibreTechCC ubootNanoPCT4 ubootNovena ubootOdroidC2