Try integrating SD image build into flake

This commit is contained in:
asonix 2023-01-17 12:39:34 -06:00
parent 589594f5df
commit 5cb3d75fb4
7 changed files with 165 additions and 68 deletions

View file

@ -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"
}
}
},

View file

@ -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;
};
};
};
}

View file

@ -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";

View file

@ -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;

42
pkgs/linux/default.nix Normal file
View file

@ -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;
};
});
}

46
pkgs/system/default.nix Normal file
View file

@ -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";
}