2
0
Files
liminix/devices/qemu/default.nix
T

82 lines
2.3 KiB
Nix
Raw Normal View History

# This "device" generates images that can be used with the QEMU
# emulator. The default output is a directory containing separate
# kernel (uncompressed vmlinux) and initrd (squashfs) images
{
2022-09-20 16:09:44 +01:00
system = {
crossSystem = {
config = "mips-unknown-linux-musl";
gcc = {
abi = "32";
2025-02-10 21:55:08 +00:00
arch = "mips32"; # maybe mips_24kc-
2022-09-20 16:09:44 +01:00
};
};
};
2022-10-15 18:55:33 +01:00
2023-09-28 12:17:30 +01:00
description = ''
2025-11-11 21:49:45 +00:00
== QEMU MIPS
2023-09-28 12:17:30 +01:00
2025-11-11 21:49:45 +00:00
This target produces an image for QEMU, the "generic and open source
machine emulator and virtualizer".
2023-09-28 12:17:30 +01:00
2025-11-11 21:49:45 +00:00
MIPS QEMU emulates a "Malta" board, which was an ATX form factor
evaluation board made by MIPS Technologies, but mostly in Liminix we use
paravirtualized devices (Virtio) instead of emulating hardware.
2023-09-28 12:17:30 +01:00
2025-11-11 21:49:45 +00:00
Building an image for QEMU results in a `+result/+` directory containing
`+run.sh+` `+vmlinux+`, and `+rootfs+` files. To invoke the emulator,
run `+run.sh+`.
2023-09-28 12:17:30 +01:00
2025-11-11 21:49:45 +00:00
The configuration includes two emulated "hardware" ethernet devices and
the kernel `+mac80211_hwsim+` module to provide an emulated wlan device.
To read more about how to connect to this network, refer to
`+qemu-networking+` in the Development manual.
2023-09-28 12:17:30 +01:00
'';
2025-02-10 21:55:08 +00:00
module =
{
config,
lib,
lim,
...
}:
{
imports = [
../../modules/arch/mipseb.nix
../families/qemu.nix
];
kernel = {
config = {
MIPS_MALTA = "y";
CPU_MIPS32_R2 = "y";
2023-02-10 17:54:33 +00:00
2025-02-10 21:55:08 +00:00
POWER_RESET = "y";
POWER_RESET_SYSCON = "y";
2023-12-26 21:58:18 +00:00
2025-02-10 21:55:08 +00:00
SERIAL_8250 = "y";
SERIAL_8250_CONSOLE = "y";
2023-12-21 19:17:14 +00:00
};
};
2025-02-10 21:55:08 +00:00
hardware =
# from arch/mips/mti-malta/Platform:load-$(CONFIG_MIPS_MALTA) += 0xffffffff80100000
let
addr = lim.parseInt "0x80100000";
in
{
loadAddress = addr;
entryPoint = addr;
# Unlike the arm qemu targets, we need a static dts when
# running u-boot-using tests, qemu dumpdtb command doesn't
# work for this board. I am not at all sure this dts is
# *correct* but it does at least boot
dts = lib.mkForce {
src = "${config.system.outputs.kernel.modulesupport}/arch/mips/boot/dts/mti/malta.dts";
includePaths = [
"${config.system.outputs.kernel.modulesupport}/arch/mips/boot/dts/"
];
};
};
};
2022-09-20 16:09:44 +01:00
}