c373152673
Some devices have a U-boot variant that does not accept a third parameter on the "bootm" command, meaning we can't override the dtb in the bootloader so have to smush it back into the kernel image This doesn't work in QEMU but I think the problem is with the U-Boot configuration for QEMU. It does work on at least one hardware device so I'm pushing it anyway Based on https://gti.telent.net/raboof/liminix/src/branch/tftp-old-uboot Co-authored-by: Arnout Engelen <arnout@bzzt.net>
54 lines
1.3 KiB
Nix
54 lines
1.3 KiB
Nix
{
|
|
liminix
|
|
}:
|
|
let check = deviceName : config :
|
|
let derivation = (import liminix {
|
|
device = import "${liminix}/devices/${deviceName}/";
|
|
liminix-config = { pkgs, ... } : {
|
|
imports = [./configuration.nix];
|
|
inherit config;
|
|
};
|
|
});
|
|
img = derivation.outputs.tftpboot;
|
|
uboot = derivation.outputs.u-boot;
|
|
pkgsBuild = derivation.pkgs.pkgsBuildBuild;
|
|
in pkgsBuild.runCommand "check-${deviceName}" {
|
|
nativeBuildInputs = with pkgsBuild; [
|
|
expect
|
|
socat
|
|
run-liminix-vm
|
|
] ;
|
|
} ''
|
|
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 empty2 \
|
|
empty empty2
|
|
|
|
expect ${./script.expect} 2>&1 |tee $out
|
|
'';
|
|
in {
|
|
aarch64 = check "qemu-aarch64" {};
|
|
arm = check "qemu-armv7l" {};
|
|
armZimage = check "qemu-armv7l" {
|
|
boot.tftp.kernelFormat = "zimage";
|
|
};
|
|
mips = check "qemu" {};
|
|
mipsLz = check "qemu" {
|
|
boot.tftp.compressRoot = true;
|
|
};
|
|
# this works on real hardware but I haven't figured out how
|
|
# to make it work on qemu: it says
|
|
# "OF: fdt: No chosen node found, continuing without"
|
|
|
|
# mipsOldUboot = check "qemu" {
|
|
# boot.tftp.appendDTB = true;
|
|
# };
|
|
}
|