Troubleshooting
The problems people actually run into, and what to do. When nothing here fits, collect the logs and open an issue.
A device that does not start Linux goes back to Android by itself after the failed starts you chose (5 by default), unless Linux is locked. Waiting and replugging fixes more than you would think.
While installing
The installer does not find the device
Check that the computer sees it and that root works:
adb devices
adb shell su -c idThe device should be listed as device (not unauthorized: accept the USB debugging prompt on the device), and the second command should print uid=0(root). The installer needs a rooted, unlocked device: see before you start.
The check finds no free space
That is the 32 GB variant, where userdata fills the disk. Use an SD card (F50), or let the installer shrink userdata, which erases Android's data: see the 32 GB variant. If the numbers look like neither the 64 GB nor the 32 GB device, open an issue with what --check printed.
"WARNING: the unpartitioned space is not empty"
Some of the samples the installer read in the free area contain data, so something may use it on this firmware. Installing overwrites it, and the installer asks you to type overwrite. If you are not sure what wrote there, stop and ask in an issue with the check's output.
The installer prints nothing for minutes and the device gets hot
A read past the end of the internal storage never returned on devices whose partition table ends at the end of the disk (the 32 GB variant, and an F50 with no gap behind userdata). Fixed from v2026.10.13 on. Restart the device to end the stuck reads, then use the current installer.
Downloads are slow
GitHub's download servers throttle single connections in some regions. The installer already downloads in 8 parallel chunks; set MU300_FETCH_JOBS to change that, or point MU300_RELEASE_URL at your own mirror of the release files.
After installing
The device does not come back after installing
Wait two minutes. If there is still nothing, unplug and replug it. Every start that does not finish counts, and after 5 in a row (or the number you chose) the device starts Android. Then collect logs:
tools/collect-logs.sh # from your computer, with the device in Android
The computer sees the device but gets no address (macOS)
macOS does not set up a network interface it has never seen while the screen is locked. Each device has its own USB MAC address, so the first time one is plugged in (or after an update that brought these addresses), unlock the Mac and the interface appears. With an F50 and a U30 Air plugged in, they are 192.168.77.1 and 192.168.78.1; two of the same kind need /etc/mu300/lan.conf to tell them apart. The serial console (screen /dev/cu.usbmodem* 115200) works even without the network.
No internet
Check that the SIM has a data plan, then run sudo mobile-data status. A missing plan looks like a connection that keeps dropping. Most operators need no APN; if yours does, see mobile data and APN.
Back in Android without asking, on kernel 6.18
On some boards 6.18 hangs in its first seconds now and then (the README measured about one start in 20 on one board; the latest release notes saw 2 in 50 on one board and none in 100 on another, and none in 100 on 7.2). The device then falls back to Android, unless Linux is locked, in which case it starts Linux again. Start Linux again with su -c mu300-linux or the Magisk module's Action button, or switch to 7.2 or 5.4. Details: FINDINGS 31m.
Back in Android after an update
With older boot images (v2026.09.27 and before), a single crash or reset of Linux makes the device fall back to Android and stay there. Start Linux again with su -c mu300-linux, then update as described in updating. If Linux does not start any more, run the installer again from a computer and choose update: it writes a fresh boot image and keeps your settings and data.
OpenWrt on kernel 5.4: no address, no web interface, nothing joins the hotspot
In releases before v2026.10.13 the firewall's start-up rules had nothing for the LAN, and on 5.4 the reload that should have added them always failed. Fixed from v2026.10.13 on; update. On an affected release, log in over the USB serial console (ttyGS0, a root shell) and run:
nft delete flowtable inet fw4 ft; fw4 reloadSince v2026.10.17 a fw4 reload or restart on 5.4 works on its own.
The hotspot does not start on a 5 GHz channel between 52 and 144
hostapd stops with start_dfs_cac() failed (releases up to v2026.10.18). Those are DFS channels, and the Wi-Fi driver cannot detect radar. Fixed from v2026.10.20 on: such a channel is replaced by 36 (or 149) with a line in the log. On an older release choose 36-48 or 149-165, or auto on Ubuntu.
The control panel went blank after an AT command got stuck
On OpenWrt with the control panel, up to v2026.10.18, one stuck AT command could blank every page for minutes, even the battery tile, also after a restart. Fixed from v2026.10.20 on: the pages keep their last readings and say how old they are, and an AT command on OpenWrt takes 0.13 s instead of a second. On an older release wait it out, or restart rpcd and mu300-atd.
Sending an SMS fails with SMS FAILED: CODE:600, or the panel's log says sms_send - killed
Up to v2026.10.21, on some networks (China Broadnet, issue #176) the modem's IMS stack refused every submission (+SPIMSREASON: 1,512,"SMS FAILED: CODE:600 REASON:Busy Everywhere" in the URC log) while incoming messages arrived; and on OpenWrt with the control panel a send that took longer than 30 s was killed together with the panel's request, leaving sms_send - killed in the operations log and no word on whether the message went out. Fixed from v2026.10.22 on: a send is one AT transaction (the channel is held from the setup to the submission, so no other client gets in between) and the SMSC the modem reports is written back to it unchanged before each one, in mu300-sms and the panel on OpenWrt and in sms on Ubuntu; the panel starts the send in the background and follows it, also after a reload. On an older release write the SMSC back yourself (mu300-at 'AT+CSCA?', then mu300-at 'AT+CSCA="<the value it showed>",<the type>', with sudo on Ubuntu) and send from the shell while the panel is idle (mu300-sms send NUMBER TEXT on OpenWrt, sudo sms send NUMBER TEXT on Ubuntu).
The device restarts on kernel 5.4 when a container stops
Up to v2026.10.20, on kernel 5.4, when two network namespaces were alive at once and one went away (Docker containers, a sandbox, unshare -n), the kernel could panic while cleaning it up (xfrm_sysctl_fini in the trace; issue #103); the device restarts, and after a few of those it falls back to Android. Fixed from v2026.10.21 on; update. On an older release keep to one container at a time, or use 6.18 or 7.2, which never had the bug.
The device crashes when the Wi-Fi driver is unloaded (6.18, 7.2)
Up to v2026.10.20, rmmod sprd_wlan_combo on 6.18 or 7.2 panicked within a second (__run_timers: the driver left a timer running in freed memory; issue #146). Fixed from v2026.10.21 on. On an older release do not unload the module; restart the device instead.
The log is full of sprd-wlan errors every few seconds
Lines such as sc2355_dump_survey, idx 0, bssid not found, multicast? or data len is 251, skb need 576 at error level, every six seconds or so in dmesg and logread (releases up to v2026.10.20). They describe the driver's routine work, not faults (issue #140). From v2026.10.21 on they are debug lines, shown only when you ask for them: echo 'module sprd_wlan_combo +p' > /sys/kernel/debug/dynamic_debug/control. The real errors next to them are still logged.
The log is full of mmc1 register dumps on the F50 (6.18, 7.2)
mmc1: Got command interrupt 0x00000001 even though no command operation was in progress, followed by a 16-line SDHCI REGISTER DUMP, every few seconds to minutes in dmesg -l err on an F50 with nothing in the SD slot, on 6.18 and 7.2 up to v2026.10.21 (issue #181). Mainline's EIC driver mapped only three of the controller's six banks, so the slot's card-detect line could not be found and the slot was polled instead: every second a card that is not there was initialised, and the host's late answer to a command nothing replied to was logged with the dump. Fixed from v2026.10.22 on: the six banks are mapped, the slot has real card detect (an interrupt), and an empty slot is left alone until a card goes in. The dumps are noise, not a fault; on an older release put a card in the slot (with a card there are none) or use 5.4, which never had them. The U30 Air has no slot.
The Wi-Fi client cannot join a network
WPA3-only networks do not work (the Wi-Fi driver has no SAE); set the router to WPA2/WPA3 mixed mode. And the radio is either a hotspot or a client, decided at start-up: wifi-client connect asks for a restart while it is the hotspot.
I forgot the password
You do not need to log in to get back to Android, and a script on your computer can set a new password while keeping your data: see a forgotten password.
Websites think I am in another country
The device has no GPS, so sites guess from the IP address, and mobile operators and VPN servers often look like a different city.
Kernel warnings are not in journalctl -k
On Ubuntu they are in journalctl -t kernel: warnings and errors only, from the start of each boot, with repeating vendor chatter left out (/etc/mu300/kmsg-ignore). Everything else is in dmesg.
Known issues in the current release
- A rare silent hang at start-up on 6.18, seen on one board (see above).
- Under sustained Wi-Fi load the vendor driver logs
edma_pending_q_buffer fullorpush link failwhile it drops packets. The transfer completes. - Suspend with the hotspot up returns at once. Some carriers drop UDP and block OpenVPN.
- E-mail forwarding of SMS needs
msmtp, which the image does not include, so that target stays off. - Updating from v2026.10.14 or older prints "could not arm the Linux slot for a trial". The fallback to Android after failed starts still works.
Each release's notes list its own: releases.
sysupgrade or flash OpenWrt firmware images
They are written for ordinary routers and would overwrite the device's storage. A normal apk upgrade is
fine, except the kernel and kmod-* packages. Update with mu300-update.
Asking for help
- Look through the existing issues.
- Collect logs with
tools/collect-logs.sh, and copy what./install.sh --checkprints. - Remove anything private (your IMEI, phone number, Wi-Fi names and passwords) and open an issue: which device, which system and kernel, which release, what you did and what happened.
Deeper explanations of the hardware live in docs/FINDINGS.md and in the wiki.