diff --git a/modules/outputs/zyxel-nwa-fit.nix b/modules/outputs/zyxel-nwa-fit.nix new file mode 100644 index 0000000..d6f894e --- /dev/null +++ b/modules/outputs/zyxel-nwa-fit.nix @@ -0,0 +1,71 @@ +{ + config +, pkgs +, lib +, ... +}: +let + inherit (lib) mkIf mkEnableOption mkOption types concatStringsSep; + models = "6b e1 6f e1 ff ff ff ff ff ff"; +in { + options.system.outputs = { + zyxel-nwa-fit = mkOption { + type = types.package; + description = '' +zyxel-nwa-fit +************* + +This output provides a FIT image for Zyxel NWA series +containing a kernel image and an UBIFS rootfs. + +It can usually be used as a factory image to install Liminix +on a system with pre-existing firmware and OS. + ''; + }; + }; + + imports = [ + ./ubivolume.nix + ]; + + config = mkIf (config.rootfsType == "ubifs") { + + system.outputs.zyxel-nwa-fit = + let + o = config.system.outputs; + # 8129kb padding. + paddedKernel = pkgs.runCommand "padded-kernel" {} '' + cp --no-preserve=mode ${o.uimage} $out + dd if=/dev/zero of=$out bs=1 count=1 seek=8388607 + ''; + firmwareImage = pkgs.runCommand "firmware-image" {} '' + cat ${paddedKernel} ${o.rootfs} > $out + ''; + dts = pkgs.writeText "image.its" '' + /dts-v1/; + + / { + description = "Zyxel FIT (Flattened Image Tree)"; + compat-models = [${models}]; + #address-cells = <1>; + + images { + firmware { + data = /incbin/("${firmwareImage}"); + type = "firmware"; + compression = "none"; + hash@1 { + algo = "sha1"; + }; + }; + }; + }; + ''; + in + pkgs.runCommand "zyxel-nwa-fit" { + nativeBuildInputs = [ pkgs.pkgsBuildBuild.ubootTools pkgs.pkgsBuildBuild.dtc ]; + } '' + mkimage -f ${dts} $out + ''; + }; +}