tftpboot: support compressed root

Daniel Barlow 2023-12-22 23:20:35 +00:00
parent e7e4b962d2
commit 98a075763e
2 changed files with 25 additions and 4 deletions

View File

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

View File

@ -19,13 +19,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
'';