commit afd9bbbc80ab103d930f24c566070e33242eee11
parent eaf90df56ca9899a2b989e19c5d008d15447dd4f
Author: Daniel Barlow <dan@telent.net>
Date: Mon, 6 Feb 2023 23:19:53 +0000
building but untested kernels for gl-mt300a, gl-mt300n-v2
Diffstat:
3 files changed, 240 insertions(+), 1 deletion(-)
diff --git 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
@@ -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
@@ -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";
+ };
+}