forked from DGNum/liminix
72 lines
1.7 KiB
Nix
72 lines
1.7 KiB
Nix
|
{
|
||
|
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
|
||
|
'';
|
||
|
};
|
||
|
}
|