tftpboot: support compressed root
This commit is contained in:
parent
c5e9fcecc7
commit
64a3f50248
2 changed files with 28 additions and 4 deletions
|
@ -18,6 +18,10 @@ in {
|
||||||
type = types.enum [ "zimage" "uimage" ];
|
type = types.enum [ "zimage" "uimage" ];
|
||||||
default = "uimage";
|
default = "uimage";
|
||||||
};
|
};
|
||||||
|
compressRoot = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
options.system.outputs = {
|
options.system.outputs = {
|
||||||
tftpboot = mkOption {
|
tftpboot = mkOption {
|
||||||
|
@ -74,9 +78,16 @@ in {
|
||||||
dtbSize=$(binsize ${o.dtb} )
|
dtbSize=$(binsize ${o.dtb} )
|
||||||
|
|
||||||
ln -s ${o.manifest} manifest
|
ln -s ${o.manifest} manifest
|
||||||
ln -s ${o.rootfs} rootfs
|
|
||||||
ln -s ${image} image
|
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
|
cat ${o.dtb} > dtb
|
||||||
address_cells=$(fdtget dtb / '#address-cells')
|
address_cells=$(fdtget dtb / '#address-cells')
|
||||||
size_cells=$(fdtget dtb / '#size-cells')
|
size_cells=$(fdtget dtb / '#size-cells')
|
||||||
|
@ -98,7 +109,15 @@ in {
|
||||||
setenv serverip ${cfg.serverip}
|
setenv serverip ${cfg.serverip}
|
||||||
setenv ipaddr ${cfg.ipaddr}
|
setenv ipaddr ${cfg.ipaddr}
|
||||||
setenv bootargs 'liminix ${cmdline} $cmd'
|
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)
|
${bootCommand} $(hex $imageStart) - $(hex $dtbStart)
|
||||||
EOF
|
EOF
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -22,13 +22,15 @@ in pkgsBuild.runCommand "check" {
|
||||||
mkdir vm
|
mkdir vm
|
||||||
ln -s ${img} result
|
ln -s ${img} result
|
||||||
|
|
||||||
|
touch empty empty2
|
||||||
|
|
||||||
run-liminix-vm \
|
run-liminix-vm \
|
||||||
--background ./vm \
|
--background ./vm \
|
||||||
--u-boot ${uboot}/u-boot.bin \
|
--u-boot ${uboot}/u-boot.bin \
|
||||||
--arch ${derivation.pkgs.stdenv.hostPlatform.qemuArch} \
|
--arch ${derivation.pkgs.stdenv.hostPlatform.qemuArch} \
|
||||||
--wan "user,tftp=`pwd`" \
|
--wan "user,tftp=`pwd`" \
|
||||||
--disk-image result/rootfs \
|
--disk-image empty2 \
|
||||||
result/uimage result/rootfs
|
empty empty2
|
||||||
|
|
||||||
expect ${./script.expect} 2>&1 |tee $out
|
expect ${./script.expect} 2>&1 |tee $out
|
||||||
'';
|
'';
|
||||||
|
@ -39,4 +41,7 @@ in {
|
||||||
boot.tftp.kernelFormat = "zimage";
|
boot.tftp.kernelFormat = "zimage";
|
||||||
};
|
};
|
||||||
mips = check "qemu" "ubootQemuMips" {};
|
mips = check "qemu" "ubootQemuMips" {};
|
||||||
|
mipsLz = check "qemu" "ubootQemuMips" {
|
||||||
|
boot.tftp.compressRoot = true;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue