diff --git a/modules/outputs/tftpboot.nix b/modules/outputs/tftpboot.nix index 39c57b1..eee04a4 100644 --- a/modules/outputs/tftpboot.nix +++ b/modules/outputs/tftpboot.nix @@ -18,6 +18,10 @@ in { type = types.enum [ "zimage" "uimage" ]; default = "uimage"; }; + compressRoot = mkOption { + type = types.bool; + default = false; + }; }; options.system.outputs = { tftpboot = mkOption { @@ -74,9 +78,16 @@ in { dtbSize=$(binsize ${o.dtb} ) ln -s ${o.manifest} manifest - ln -s ${o.rootfs} rootfs ln -s ${image} image + ${if cfg.compressRoot + then '' + lzma -z9cv ${o.rootfs} > rootfs.lz + rootfsLzStart=$(($dtbStart + $dtbSize)) + rootfsLzSize=$(binsize rootfs.lz) + '' + else "ln -s ${o.rootfs} rootfs" + } cat ${o.dtb} > dtb address_cells=$(fdtget dtb / '#address-cells') size_cells=$(fdtget dtb / '#size-cells') @@ -98,7 +109,15 @@ in { setenv serverip ${cfg.serverip} setenv ipaddr ${cfg.ipaddr} setenv bootargs 'liminix ${cmdline} $cmd' - tftpboot $(hex $imageStart) result/image ; tftpboot $(hex $rootfsStart) result/rootfs ; tftpboot $(hex $dtbStart) result/dtb + tftpboot $(hex $imageStart) result/image ; ${ + if cfg.compressRoot + then "tftpboot $(hex $rootfsLzStart) result/rootfs.lz" + else "tftpboot $(hex $rootfsStart) result/rootfs" + }; tftpboot $(hex $dtbStart) result/dtb + ${if cfg.compressRoot + then "lzmadec $(hex $rootfsLzStart) $(hex $rootfsStart)" + else "" + } ${bootCommand} $(hex $imageStart) - $(hex $dtbStart) EOF ''; diff --git a/tests/tftpboot/test.nix b/tests/tftpboot/test.nix index d4682f6..80c2ddd 100644 --- a/tests/tftpboot/test.nix +++ b/tests/tftpboot/test.nix @@ -22,13 +22,15 @@ in pkgsBuild.runCommand "check" { mkdir vm ln -s ${img} result +touch empty empty2 + run-liminix-vm \ --background ./vm \ --u-boot ${uboot}/u-boot.bin \ --arch ${derivation.pkgs.stdenv.hostPlatform.qemuArch} \ --wan "user,tftp=`pwd`" \ - --disk-image result/rootfs \ - result/uimage result/rootfs + --disk-image empty2 \ + empty empty2 expect ${./script.expect} 2>&1 |tee $out ''; @@ -39,4 +41,7 @@ in { boot.tftp.kernelFormat = "zimage"; }; mips = check "qemu" "ubootQemuMips" {}; + mipsLz = check "qemu" "ubootQemuMips" { + boot.tftp.compressRoot = true; + }; }