In the meantime, OpenWrt 22.03 is about to get released... I have largely migrated my own firmware build already, and it works so far. I'm posting here in case anyone is interested in my status quo and/or cooperation to research/iron out the remaining problems. All in all, the jump from 19.07 went quite smoothly, networking/wifi (mt76 though, not firecore) config just worked as-is. At this time, I have two issues: gpio numbering got totally weird as in newer kernels, gpio numbers have become second class citizens, and gpio labels in the device tree are the recommended way to go. Still, /sys/class/gpio exists and works, but the numbers are offset by 416, but also swapped in order such that gpiochip2 ones come first. [Update: I could track down the reason for this in the kernel sources: drivers could (and still can, but it's deprecated!) set a base number for GPIO banks, or let the kernel automatically assign numbers by setting base to -1. The automatic assignment is in gpiochip_find_base(), and explains the weird outcome: for each GPIO bank registered, it sets base such that the bank gets the highest available GPIO numbers, down from ARCH_NR_GPIOS which is 512 by default. So we get 480..511 for the GPIOs that used to be numbered 0..31, 448..479 for 32..63 (and, only theoretically because not exposed, 416..447 for 64..95). The Linux kernel guys are quite eager to kill the "old" GPIO numbers, see these comments - "...drop this and assign a poison instead." . So while one could add a patch to set base at it was in older kernels to get the old numbers back, I doubt that would be a good way forward.] kmod-spi/i2c-gpio-custom no longer exist. The way to go is probably using device tree overlays (like the raspberry folks already do for a long time), but that needs enabling OF_OVERLAY in the kernel and having the dtc device tree compiler available. I'm about to build a fw with this and will start tinkering with dtc and overlays... [Update2: I got dynamic device tree overlays working, once I found it involves more than just setting OF_OVERLAY. One also needs CONFIGFS_FS and a patchset that was rejected in OpenWrt mainline, which in turn allows loading DT overlays via configfs from userland when OF_CONFIGFS is also set. [Update: I had no luck yet with OF_OVERLAY, altough I built the kernel with that option set, I did not get the /sys/kernel/config/device-tree/overlays/ node for actually managing DT overlays yet. Any ideas what I'm doing wrong? Apparently there's more to it than just setting OF_OVERLAY] [Update2: I also made a post in the OpenWrt developer mailing list asking about general status of GPIOs in OpenWrt 22.03, got no feedback yet]