Bootloop on GL.iNet GL-E750 'Mudi' custom builds, all branches (& partial solution?)

There's already this thread on the topic. Last message in this thread is from October 2021, so I thought it'd maybe make sense to start a new thread.

I'm not an expert on building OpenWrt, but I've been compiling my own custom builds for a number of devices for a while now. The only device giving me a real headache is the E750. I'm using a "small device"-specific build config, non-ct kernel module & fw, adding the MCU module in order to interface with the display. I'm happy to share the config if it's relevant, or if anyone is interested.

These builds basically are working fine, no matter which OpenWrt branch I'm building from. There's a huge problem, however: even with a "fresh" system, as soon as there's certain changes in the device config, like adding a new interface, the device will boot loop. The device will go through a "normal" boot process, but at the point where eth0 (using the GL.iNet adapter) should come up, there's only a few seconds of connectivity, followed by multiple "cable disconnected" messages, and what looks like a reboot (not 100 % positive it's a reboot though, display isn't showing any "live" info at that point). The only way to get out of this loop is to reset the device config, or re-flash via U-boot (can be quite tricky because of the specific timings required for pressing buttons, entering commands, etc.). After that, again, the device will boot loop after making certain changes to the device config.

After much trial & error and tearing out of hair, I've found a way to make the device boot pretty reliably with custom builds, by using this code in '/etc/rc.d/S19zzz-01':

logger -t INFO "running custom rc.d script s19zzz-01"
logger -t INFO "disabling radio0/radio1 in order to prevent boot loop/hang"
uci set wireless.radio0.disabled="1" && uci set wireless.radio1.disabled="1" && uci -q commit wireless
logger -t INFO "stopping & disabling adblock service"
/etc/init.d/adblock stop && /etc/init.d/adblock disable
logger -t INFO "stopping & disabling ksmbd service"
/etc/init.d/ksmbd stop && /etc/init.d/ksmbd disable
logger -t INFO "stopping & disabling minidlna service"
/etc/init.d/minidlna stop && /etc/init.d/minidlna disable
logger -t INFO "stopping & disabling mwan3 service"
/etc/init.d/mwan3 stop && /etc/init.d/mwan3 disable

I've also added a 120 second pause in rc.local, after which I'm starting up the WiFi and WWAN interfaces, and all relevant services. With these "puzzle pieces" in place, the device starts up fine most of the time.

I'm wondering if there's anybody out there using custom builds on this (pretty nifty, when it works) device. Do you guys have any more info on this problem? Could this be a OpenWrt bug which is fixable in source? Is there maybe a more elegant solution to the boot loop problem?

1 Like