From afd9bbbc80ab103d930f24c566070e33242eee11 Mon Sep 17 00:00:00 2001 From: Daniel Barlow Date: Mon, 6 Feb 2023 23:19:53 +0000 Subject: [PATCH] building but untested kernels for gl-mt300a, gl-mt300n-v2 --- ci.nix | 2 +- devices/gl-mt300a/default.nix | 114 ++++++++++++++++++++++++++++ devices/gl-mt300n-v2/default.nix | 125 +++++++++++++++++++++++++++++++ 3 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 devices/gl-mt300a/default.nix create mode 100644 devices/gl-mt300n-v2/default.nix diff --git a/ci.nix b/ci.nix index 0b5a194..ab8cac3 100644 --- a/ci.nix +++ b/ci.nix @@ -7,7 +7,7 @@ let inherit (builtins) map; pkgs = (import nixpkgs {}); inherit (pkgs.lib.attrsets) genAttrs; - devices = [ "qemu" "gl-ar750" ]; + devices = [ "qemu" "gl-ar750" "gl-mt300n-v2" "gl-mt300a" ]; vanilla = ./vanilla-configuration.nix; for-device = name: (import liminix { diff --git a/devices/gl-mt300a/default.nix b/devices/gl-mt300a/default.nix new file mode 100644 index 0000000..e169c04 --- /dev/null +++ b/devices/gl-mt300a/default.nix @@ -0,0 +1,114 @@ +# GL.INet GL-MT300A + +{ + system = { + crossSystem = { + config = "mipsel-unknown-linux-musl"; + gcc = { + abi = "32"; + arch = "mips32"; # maybe mips_24kc- + }; + }; + }; + + # We need to be able to import default.nix before we import nixpkgs + # because it has the system config to tell nixpkgs what arch to build for. + # But we also need some way to do things like fetchFromGitHub in the + # per-device config and we can only do that once we have a reference to + # pkgs + + overlay = final: prev: + let + openwrt = final.fetchFromGitHub { + name = "openwrt-source"; + repo = "openwrt"; + owner = "openwrt"; + rev = "a5265497a4f6da158e95d6a450cb2cb6dc085cab"; + hash = "sha256-YYi4gkpLjbOK7bM2MGQjAyEBuXJ9JNXoz/JEmYf8xE8="; + }; + in { + kernel = prev.kernel.override { + src = final.fetchurl { + name = "linux.tar.gz"; + url = "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.71.tar.gz"; + hash = "sha256-yhO2cXIeIgUxkSZf/4aAsF11uxyh+UUZu6D1h92vCD8="; + }; + extraPatchPhase = '' + cp -av ${openwrt}/target/linux/generic/files/* . + chmod -R u+w . + cp -av ${openwrt}/target/linux/ramips/files/* . + chmod -R u+w . + patches() { + for i in $* ; do patch --batch --forward -p1 < $i ;done + } + patches ${openwrt}/target/linux/generic/backport-5.15/*.patch + patches ${openwrt}/target/linux/generic/pending-5.15/*.patch + patches ${openwrt}/target/linux/generic/hack-5.15/*.patch + patches ${openwrt}/target/linux/ramips/patches-5.15/*.patch + ''; + }; + }; + kernel = rec { + dts = { openwrt,... } : "${openwrt}/target/linux/ramips/dts/mt7620a_glinet_gl-mt300a.dts"; + config = { + MIPS_ELF_APPENDED_DTB = "y"; + OF = "y"; + USE_OF = "y"; + + RALINK = "y"; + SOC_MT7620 = "y"; + + SERIAL_8250_CONSOLE = "y"; + SERIAL_8250 = "y"; + SERIAL_CORE_CONSOLE = "y"; + SERIAL_OF_PLATFORM = "y"; + + CONSOLE_LOGLEVEL_DEFAULT = "8"; + CONSOLE_LOGLEVEL_QUIET = "4"; + + # "empty" initramfs source should create an initial + # filesystem that has a /dev/console node and not much + # else. Note that pid 1 is started *before* the root + # filesystem is mounted and it expects /dev/console to + # be present already + BLK_DEV_INITRD = "n"; + + NET = "y"; + NETDEVICES = "y"; + ETHERNET = "y"; + # NET_VENDOR_ATHEROS = "y"; + # AG71XX = "y"; # ethernet (qca,qca9530-eth) + # MFD_SYSCON = "y"; # ethernet (compatible "syscon") + # AR8216_PHY = "y"; # eth1 is behind a switch + + MTD = "y"; + MTD_CMDLINE_PARTS = "y"; + MTD_BLOCK = "y"; # fix undefined ref to register_mtd_blktrans_devs + + CPU_LITTLE_ENDIAN= "y"; + + # this is all copied from nixwrt ath79 config. Clearly not all + # of it is device config, some of it is wifi config or + # installation method config or ... + + "CMDLINE_PARTITION" = "y"; + "EARLY_PRINTK" = "y"; + "FW_LOADER" = "y"; + # we don't have a user helper, so we get multiple 60s pauses + # at boot time unless we disable trying to call it + "FW_LOADER_USER_HELPER" = "n"; + + "MODULE_SIG" = "y"; + + "PARTITION_ADVANCED" = "y"; + "PRINTK_TIME" = "y"; + "SQUASHFS" = "y"; + "SQUASHFS_XZ" = "y"; + }; + }; + outputs.default = "directory"; + boot = { + loadAddress = "0x80000000"; + entryPoint = "0x80000000"; + }; +} diff --git a/devices/gl-mt300n-v2/default.nix b/devices/gl-mt300n-v2/default.nix new file mode 100644 index 0000000..3583b75 --- /dev/null +++ b/devices/gl-mt300n-v2/default.nix @@ -0,0 +1,125 @@ +# GL.INet GL-MT300N v2 + +{ + system = { + crossSystem = { + config = "mipsel-unknown-linux-musl"; + gcc = { + abi = "32"; + arch = "mips32"; # maybe mips_24kc- + }; + }; + }; + + # We need to be able to import default.nix before we import nixpkgs + # because it has the system config to tell nixpkgs what arch to build for. + # But we also need some way to do things like fetchFromGitHub in the + # per-device config and we can only do that once we have a reference to + # pkgs + + overlay = final: prev: + let + openwrt = final.fetchFromGitHub { + name = "openwrt-source"; + repo = "openwrt"; + owner = "openwrt"; + rev = "a5265497a4f6da158e95d6a450cb2cb6dc085cab"; + hash = "sha256-YYi4gkpLjbOK7bM2MGQjAyEBuXJ9JNXoz/JEmYf8xE8="; + }; + in { + kernel = prev.kernel.override { + src = final.fetchurl { + name = "linux.tar.gz"; + url = "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.71.tar.gz"; + hash = "sha256-yhO2cXIeIgUxkSZf/4aAsF11uxyh+UUZu6D1h92vCD8="; + }; + extraPatchPhase = '' + cp -av ${openwrt}/target/linux/generic/files/* . + chmod -R u+w . + cp -av ${openwrt}/target/linux/ramips/files/* . + chmod -R u+w . + patches() { + for i in $* ; do patch --batch --forward -p1 < $i ;done + } + patches ${openwrt}/target/linux/generic/backport-5.15/*.patch + patches ${openwrt}/target/linux/generic/pending-5.15/*.patch + patches ${openwrt}/target/linux/generic/hack-5.15/*.patch + patches ${openwrt}/target/linux/ramips/patches-5.15/*.patch + ''; + }; + }; + kernel = rec { + dts = { openwrt,... } : "${openwrt}/target/linux/ramips/dts/mt7628an_glinet_gl-mt300n-v2.dts"; + config = { + MIPS_ELF_APPENDED_DTB = "y"; + OF = "y"; + USE_OF = "y"; + + RALINK = "y"; + SOC_MT7620 = "y"; + CPU_LITTLE_ENDIAN= "y"; + + SERIAL_8250_CONSOLE = "y"; + SERIAL_8250 = "y"; + SERIAL_CORE_CONSOLE = "y"; + SERIAL_OF_PLATFORM = "y"; + + CONSOLE_LOGLEVEL_DEFAULT = "8"; + CONSOLE_LOGLEVEL_QUIET = "4"; + + # "empty" initramfs source should create an initial + # filesystem that has a /dev/console node and not much + # else. Note that pid 1 is started *before* the root + # filesystem is mounted and it expects /dev/console to + # be present already + BLK_DEV_INITRD = "n"; + + MTD = "y"; + MTD_CMDLINE_PARTS = "y"; + MTD_BLOCK = "y"; # fix undefined ref to register_mtd_blktrans_dev + + REGULATOR = "y"; + REGULATOR_FIXED_VOLTAGE = "y"; + + NET = "y"; + NETDEVICES = "y"; + ETHERNET = "y"; + + PHYLIB = "y"; + AT803X_PHY="y"; + FIXED_PHY="y"; + GENERIC_PHY="y"; + NET_VENDOR_RALINK = "y"; + NET_RALINK_RT3050 = "y"; + NET_RALINK_SOC="y"; + + SWCONFIG = "y"; + + GPIOLIB="y"; + GPIO_MT7621 = "y"; + + # this is all copied from nixwrt ath79 config. Clearly not all + # of it is device config, some of it is wifi config or + # installation method config or ... + + "CMDLINE_PARTITION" = "y"; + "EARLY_PRINTK" = "y"; + "FW_LOADER" = "y"; + # we don't have a user helper, so we get multiple 60s pauses + # at boot time unless we disable trying to call it + "FW_LOADER_USER_HELPER" = "n"; + + "MODULE_SIG" = "y"; + + "PARTITION_ADVANCED" = "y"; + "PRINTK_TIME" = "y"; + "SQUASHFS" = "y"; + "SQUASHFS_XZ" = "y"; + }; + }; + outputs.default = "directory"; + boot = { + loadAddress = "0x80000000"; + entryPoint = "0x80000000"; + }; +}