From 5cb3d75fb4db35a814118f1143f1d4e76cc845f2 Mon Sep 17 00:00:00 2001 From: asonix Date: Tue, 17 Jan 2023 12:39:34 -0600 Subject: [PATCH] Try integrating SD image build into flake --- flake.lock | 43 +-------- flake.nix | 89 ++++++++++++++----- images/rockchip.nix | 5 +- pkgs/aarch64-image/default.nix | 8 +- pkgs/linux/default.nix | 42 +++++++++ pkgs/system/default.nix | 46 ++++++++++ .../default.nix} | 0 7 files changed, 165 insertions(+), 68 deletions(-) create mode 100644 pkgs/linux/default.nix create mode 100644 pkgs/system/default.nix rename pkgs/{uboot-quartz64.nix => uboot-quartz64/default.nix} (100%) diff --git a/flake.lock b/flake.lock index 982f330..98e5ef9 100644 --- a/flake.lock +++ b/flake.lock @@ -1,46 +1,12 @@ { "nodes": { - "aarch64-linux-testing": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1673931702, - "narHash": "sha256-vayVq8NRnw1XO9jAFkry0SCg9xAvbGctvfHaLcOAkoc=", - "ref": "refs/heads/main", - "rev": "e43d8326bcf8ba7810289080aba3491dfc06786c", - "revCount": 9, - "type": "git", - "url": "https://git.asonix.dog/asonix/aarch64-linux-testing.git" - }, - "original": { - "type": "git", - "url": "https://git.asonix.dog/asonix/aarch64-linux-testing.git" - } - }, "nixpkgs": { "locked": { - "lastModified": 1673563280, - "narHash": "sha256-27+ZVRylsm7HwI3rUt6TFh3lrgzrvToJscL44fFd25Q=", + "lastModified": 1673980697, + "narHash": "sha256-txClbiw+nhpS/LHDDYrN2VEeOQmuhhP74mTU8WWWBPQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "e0c17a48c475a03775833892373777892a6b8ff6", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "master", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1673975480, - "narHash": "sha256-7MzFr9FqSw0ImmfpuPy9fCNm+7kLdDN6Ko53Ojo7fNA=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "856cf901c0ae31f99f0d43ecffabc196efd0c459", + "rev": "e8731b877886461a854ea1310d5dde3ddd358b80", "type": "github" }, "original": { @@ -52,8 +18,7 @@ }, "root": { "inputs": { - "aarch64-linux-testing": "aarch64-linux-testing", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs" } } }, diff --git a/flake.nix b/flake.nix index 98f592e..93400ab 100644 --- a/flake.nix +++ b/flake.nix @@ -1,48 +1,89 @@ { description = "Build NixOS images for various ARM single computer boards"; + # pin this to unstable inputs = { nixpkgs.url = "github:nixos/nixpkgs/master"; - aarch64-linux-testing.url = "git+https://git.asonix.dog/asonix/aarch64-linux-testing.git"; }; - outputs = { self, nixpkgs, aarch64-linux-testing }: { + outputs = { self, nixpkgs }: { packages.x86_64-linux = let pkgs = import nixpkgs { system = "x86_64-linux"; }; + aarch64Pkgs = import pkgs.path { system = "aarch64-linux"; }; + authorized-keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICTz/raHvMluy7wPhO1P64ZgyVu7ZQrRgKL0CT8UcOdQ asonix@firestar" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBlkVa6HyTPIoJoieFc9seM5Y31iaRsgHH3xH2tlxCSV asonix@graystripe" + ]; + + kernels = aarch64Pkgs.callPackage ./pkgs/linux { }; + + system = aarch64Pkgs.callPackage ./pkgs/system { + inherit nixpkgs; + inherit authorized-keys; + kernel = kernels.testing-rockchip; + }; + buildImage = pkgs.callPackage ./pkgs/build-image { }; - aarch64Image = fdt: pkgs.callPackage ./pkgs/aarch64-image { - aarch64-image = - let - base-path = aarch64-linux-testing.images.installer fdt; - image-name = (aarch64-linux-testing.nixosConfigurations.installer fdt).config.sdImage.imageName; - in - "${base-path}/sd-image/${image-name}.zst"; - }; - rockchip = fdt: uboot: pkgs.callPackage ./images/rockchip.nix { - inherit fdt; + + rockchip = { system, uboot }: pkgs.callPackage ./images/rockchip.nix { inherit uboot; - inherit aarch64Image buildImage; + inherit buildImage; + + image = pkgs.callPackage ./pkgs/aarch64-image { + inherit system; + }; }; - quartzUBoots = aarch64Pkgs.callPackage ./pkgs/uboot-quartz64.nix { }; + + quartzUBoots = aarch64Pkgs.callPackage ./pkgs/uboot-quartz64 { }; in { - quartz64a = rockchip "rockchip/rk3566-quartz64-a.dtb" quartzUBoots.ubootQuartz64a; - quartz64b = rockchip "rockchip/rk3566-quartz64-b.dtb" quartzUBoots.ubootQuartz64b; - soquartz-model-a = rockchip "rockchip/rk3566-soquartz-model-a.dtb" quartzUBoots.ubootSoQuartz; - soquartz-cm4 = rockchip "rockchip/rk3566-soquartz-cm4.dtb" quartzUBoots.ubootSoQuartz; - soquartz-blade = rockchip "rockchip/rk3566-soquartz-blade.dtb" quartzUBoots.ubootSoQuartz; - rock64 = rockchip "rockchip/rk3328-rock64.dtb" aarch64Pkgs.ubootRock64; - rockPro64 = rockchip "rockchip/rk3399-rockpro64.dtb" aarch64Pkgs.ubootRockPro64; - rockPro64v2 = rockchip "rockchip/rk3399-rockpro64-v2.dtb" aarch64Pkgs.ubootRockPro64; - roc-pc-rk3399 = rockchip "rockchip/rk3399-roc-pc.dtb" aarch64Pkgs.ubootROCPCRK3399; - pinebookPro = rockchip "rockchipo/rk3399-pinebook-pro.dtb" aarch64Pkgs.ubootPinebookPro; + quartz64a = rockchip { + system = system.quartz64a; + uboot = quartzUBoots.ubootQuartz64a; + }; + quartz64b = rockchip { + system = system.quartz64b; + uboot = quartzUBoots.ubootQuartz64b; + }; + soquartz-model-a = rockchip { + system = system.soquartz-model-a; + uboot = quartzUBoots.ubootSoQuartz; + }; + soquartz-cm4 = rockchip { + system = system.soquartz-cm4; + uboot = quartzUBoots.ubootSoQuartz; + }; + soquartz-blade = rockchip { + system = system.soquartz-blade; + uboot = quartzUBoots.ubootSoQuartz; + }; + rock64 = rockchip { + system = system.rock64; + uboot = aarch64Pkgs.ubootRock64; + }; + rockPro64 = rockchip { + system = system.rockPro64; + uboot = aarch64Pkgs.ubootRockPro64; + }; + rockPro64v2 = rockchip { + system = system.rockPro64v2; + uboot = aarch64Pkgs.ubootRockPro64; + }; + roc-pc-rk3399 = rockchip { + system = system.rock-pc-rk3399; + uboot = aarch64Pkgs.ubootROCPCRK3399; + }; + pinebookPro = rockchip { + system = system.pinebookPro; + uboot = aarch64Pkgs.ubootPinebookPro; + }; }; }; } diff --git a/images/rockchip.nix b/images/rockchip.nix index 20eba18..d21c1e9 100644 --- a/images/rockchip.nix +++ b/images/rockchip.nix @@ -1,8 +1,7 @@ { lib , buildImage , uboot -, aarch64Image -, fdt +, image , extraConfig ? { } }: @@ -27,7 +26,7 @@ buildImage { start = ubootOffset; }; nixos = { - source = aarch64Image fdt; + source = image; start = rootOffset; attrs = "LegacyBIOSBootable"; type = "b921b045-1df0-41c3-af44-4c6f280d3fae"; diff --git a/pkgs/aarch64-image/default.nix b/pkgs/aarch64-image/default.nix index d9f1f0c..cfce0f8 100644 --- a/pkgs/aarch64-image/default.nix +++ b/pkgs/aarch64-image/default.nix @@ -1,8 +1,12 @@ -{ stdenv, fetchurl, zstd, aarch64-image }: +{ stdenv, fetchurl, zstd, system }: +let + base-path = system.config.system.build.sdImage; + image-name = system.config.sdImage.imageName; +in stdenv.mkDerivation { name = "aarch64-image"; - src = aarch64-image; + src = "${base-path}/sd-image/${image-name}.zst"; preferLocalBuild = true; dontUnpack = true; dontBuild = true; diff --git a/pkgs/linux/default.nix b/pkgs/linux/default.nix new file mode 100644 index 0000000..1d33d9f --- /dev/null +++ b/pkgs/linux/default.nix @@ -0,0 +1,42 @@ +{ pkgs, lib }: + +with pkgs.linuxKernel; { + testing = kernels.linux_testing; + + testing-rockchip = packagesFor (kernels.linux_testing.override { + structuredExtraConfig = with lib.kernel; { + SND_SOC_RK817 = yes; + STMMAC_ETH = yes; + MOTORCOMM_PHY = yes; + MMC_DW = yes; + MMC_DW_ROCKCHIP = yes; + MMC_SDHCI_OF_DWCMSHC = yes; + PCIE_ROCKCHIP_DW_HOST = yes; + PHY_ROCKCHIP_NANENG_COMBO_PHY = yes; + ROCKCHIP_DW_HDMI = yes; + PHY_ROCKCHIP_INNO_DSIDPHY = yes; + ROCKCHIP_VOP2 = yes; + ARCH_ROCKCHIP = yes; + ROCKCHIP_PHY = yes; + PHY_ROCKCHIP_INNO_USB2 = yes; + RTC_DRV_RK808 = yes; + COMMON_CLK_RK808 = yes; + MFD_RK808 = yes; + CHARGER_RK817 = yes; + REGULATOR_RK808 = yes; + ROCKCHIP_PM_DOMAINS = yes; + GPIO_ROCKCHIP = yes; + PINCTRL_ROCKCHIP = yes; + PWM_ROCKCHIP = yes; + ROCKCHIP_IOMMU = yes; + ROCKCHIP_MBOX = yes; + ROCKCHIP_SARADC = yes; + ROCKCHIP_THERMAL = yes; + SPI_ROCKCHIP = yes; + VIDEO_HANTRO_ROCKCHIP = yes; + ROCKCHIP_IODOMAIN = yes; + COMMON_CLK_ROCKCHIP = yes; + PHY_ROCKCHIP_INNO_CSIDPHY = yes; + }; + }); +} diff --git a/pkgs/system/default.nix b/pkgs/system/default.nix new file mode 100644 index 0000000..2cee43b --- /dev/null +++ b/pkgs/system/default.nix @@ -0,0 +1,46 @@ +{ nixpkgs, pkgs, lib, kernel, authorized-keys }: + +let + buildSystem = fdt: lib.nixosSystem { + system = "aarch64-linux"; + + modules = [ + "${nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix" + { + nixpkgs.overlays = [ + (final: super: { + zfs = super.zfs.overrideAttrs (_: { + meta.platforms = [ ]; + }); + }) + ]; + + users.users.root.initialHashedPassword = ""; + users.users.root.openssh.authorizedKeys.keys = authorized-keys; + + services.openssh.enable = true; + + networking.hostName = "nixos-aarch64"; + + boot.kernelPackages = kernel; + boot.kernelParams = [ "console=ttyS2,1500000n8" ]; + + hardware.deviceTree.name = ftd; # "rockchip/rk3566-soquartz-blade.dtb"; + + system.stateVersion = "23.05"; + } + ]; + }; +in +{ + quartz64a = buildSystem "rockchip/rk3566-quartz64-a.dtb"; + quartz64b = buildSystem "rockchip/rk3566-quartz64-b.dtb"; + soquartz-model-a = buildSystem "rockchip/rk3566-soquartz-model-a.dtb"; + soquartz-cm4 = buildSystem "rockchip/rk3566-soquartz-cm4.dtb"; + soquartz-blade = buildSystem "rockchip/rk3566-soquartz-blade.dtb"; + rock64 = buildSystem "rockchip/rk3328-rock64.dtb"; + rockPro64 = buildSystem "rockchip/rk3399-rockpro64.dtb"; + rockPro64v2 = buildSystem "rockchip/rk3399-rockpro64-v2.dtb"; + roc-pc-rk3399 = buildSystem "rockchip/rk3399-roc-pc.dtb"; + pinebookPro = buildSystem "rockchipo/rk3399-pinebook-pro.dtb"; +} diff --git a/pkgs/uboot-quartz64.nix b/pkgs/uboot-quartz64/default.nix similarity index 100% rename from pkgs/uboot-quartz64.nix rename to pkgs/uboot-quartz64/default.nix