Failed to load Hat overlay and dterror not a valid FDT -err -9

I’m kind of a noob to the rpi/hat stuff, but am very experienced in IT in general. However, I could really use some help with an error I received trying to get the Sixfab 4g hat working. I went through instructions in the forum here and was able to get it setup without errors all the way to this command: atcom AT#ECM=1,0 and I got the OK. I followed that up with atcom AT#REBOOT and didn’t really see anything happen, so I just rebooted the rpi and got this:

failed to load Hat overlay

as well as

dterror not a valid FDT -err -9

Anyone seen this before? I was not able to find any results for an error similar to this in the forum.

For some additional clarity, I am running the Telit LE910C4-NF with T-Mobile. If you need any commands run just let me know and I’ll be happy to post.

An update to this, I can see the device registered in my T-Mobile account with the IMEI and modem model, so it seems like it’s communicating to them and their website shows it is 4G compatible. :thinking: Aside from those errors, I also have no wwan interface showing up in ifconfig, but it does show up in ipaddr. I did enter command ip addr show wwan0 earlier so I’m not sure if it’s showing up because it detects it or because that commands is asking it to show it regardless of whether it exists.

I just ran sudo ip link set wwan0 up and that seems to have activated it. It’s now showing in ifconfig but when I disconnect my ethernet, there is no internet connection.

wwan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::ec4e:9bff:fe9b:d558 prefixlen 64 scopeid 0x20
ether ee:4e:9b:9b:d5:58 txqueuelen 1000 (Ethernet)
RX packets 6 bytes 312 (312.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 81 bytes 12033 (11.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

I was running into this too and have been battling trying to get the hat up and running into a bunch of issues like the overlay errors plus not being able to detect /dev/ttyUSB* devices, whatever reason and just finally got everything up and running and put together a doc of the different steps and hurles i encountered…

Raspberry Pi 5 + Sixfab Telit LE910C4-NF LTE Failover Runbook

This runbook captures the exact working path used to get Sixfab LTE working on a fresh Raspberry Pi 5 install, including:

  • ECM modem setup

  • Wi-Fi primary + LTE fallback routing

  • Boot persistence via systemd

  • DNS fixes for LTE-only operation

Scope

Hardware used:

  • Raspberry Pi 5

  • Sixfab Base HAT

  • Telit LE910C4-NF modem

  • Sixfab SIM (APN: super)

OS behavior observed:

  • Network stack managed by NetworkManager (not dhcpcd)

  • LTE interface may appear as wwan0 or usb0 depending on mode/state

1) One-Time Package Setup

Run while normal internet is available:


sudo apt update

sudo apt install -y usbutils minicom isc-dhcp-client net-tools curl ca-certificates

Remove common serial/modem interferers:


sudo apt purge -y modemmanager brltty

2) Confirm Modem Detection


lsusb

lsusb -t

ip -br a

Expected:

  • Telit device present (1bc7:*)

  • LTE data interface appears (wwan0 or usb0)

If no AT ports exist initially, load/bind serial drivers:


sudo modprobe usbserial

sudo modprobe usb_wwan

sudo modprobe option

echo 1bc7 1251 | sudo tee /sys/bus/usb-serial/drivers/option1/new_id

ls /dev/ttyUSB* 2>/dev/null

3) Find Working AT Port

Usually /dev/ttyUSB2, but verify:


for p in /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3; do

echo "=== $p ==="

sudo timeout 3 sh -c "printf 'AT\r' > $p; dd if=$p bs=1 count=64 status=none" 2>/dev/null | tr -d '\r'

echo

done

Use the port that responds with OK.

4) Configure Modem (ECM)

Open minicom:


sudo minicom -D /dev/ttyUSB2 -b 115200

Run one command at a time:


AT

AT+CPIN?

AT+CREG?

AT+CGDCONT?

AT+CGDCONT=1,"IPV4V6","super"

AT#ECM=1,0

AT#ECM?

Notes:

  • If the modem re-enumerates and minicom disconnects, reconnect and continue.

  • AT#ECM? should report active data context (0,1).

5) Bring Up LTE Interface from Linux

Replace wwan0 with usb0 if needed.


sudo ip link set wwan0 up

sudo dhclient -v wwan0

ip addr show wwan0

Connectivity checks:


ping -I wwan0 -c 5 8.8.8.8

sudo ping -I wwan0 -c 5 sixfab.com

6) Route Priority (Wi-Fi First, LTE Fallback)

Set Wi-Fi preferred in NetworkManager:


sudo nmcli connection modify "<UR_WIFI_NETWORK>" ipv4.never-default no ipv6.never-default no

sudo nmcli connection modify "<UR_WIFI_NETWORK>" ipv4.route-metric 100 ipv6.route-metric 100

If <UR_LTE_HAT_NETWORK> is present but no cable is attached, disable its autoconnect:


sudo nmcli connection modify "<UR_LTE_HAT_NETWORK>" connection.autoconnect no

Add LTE backup route (runtime):


sudo ip route replace default via 192.168.225.1 dev wwan0 metric 600

Verify:


ip route

Expected behavior:

  • Wi-Fi route (metric 100) preferred when available

  • LTE route (metric 600) used when Wi-Fi disappears

7) DNS Fix for LTE-Only Mode

If ping 8.8.8.8 works but ping google.com fails with name resolution errors:


printf "nameserver 1.1.1.1\nnameserver 8.8.8.8\n" | sudo tee /etc/resolv.conf >/dev/null

8) Boot Persistence via systemd

Create startup script:


sudo tee /usr/local/sbin/lte-failover-up.sh >/dev/null <<'EOS'

#!/usr/bin/env bash

set -euo pipefail

ip link set wwan0 up 2>/dev/null || true

dhclient -v wwan0 || true

ip route replace default via 192.168.225.1 dev wwan0 metric 600 || true

printf "nameserver 1.1.1.1\nnameserver 8.8.8.8\n" > /etc/resolv.conf || true

EOS

sudo chmod +x /usr/local/sbin/lte-failover-up.sh

Create service:


sudo tee /etc/systemd/system/lte-failover-up.service >/dev/null <<'EOS'

[Unit]

Description=Bring up LTE fallback

After=network-online.target

Wants=network-online.target

[Service]

Type=oneshot

ExecStart=/usr/local/sbin/lte-failover-up.sh

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

EOS

Enable and run:


sudo systemctl daemon-reload

sudo systemctl enable lte-failover-up.service

sudo systemctl start lte-failover-up.service

sudo systemctl status lte-failover-up.service --no-pager

9) Validation Checklist (Post-Reboot)


ip -br a

ip route

cat /etc/resolv.conf

systemctl status lte-failover-up.service --no-pager

ping -c 3 8.8.8.8

ping -c 3 google.com

Failover test:

  1. Turn Wi-Fi off.

  2. Confirm route falls back to LTE (default via 192.168.225.1 dev wwan0 ...).

  3. Verify internet still works.

  4. Turn Wi-Fi back on.

10) Common Gotchas

  • dhcpcd.service not found: system is using NetworkManager.

  • RTNETLINK answers: Operation not permitted: command needs sudo.

  • Unit lte-failover-up.service not found: service file not created yet.

  • Temporary failure in name resolution: DNS issue, not necessarily LTE transport issue.

  • Interface name changes (usb0 vs wwan0): always confirm with ip -br a.

Quick Recovery Commands


ip -br a

ip route

sudo ip link set wwan0 up

sudo dhclient -v wwan0

sudo ip route replace default via 192.168.225.1 dev wwan0 metric 600

printf "nameserver 1.1.1.1\nnameserver 8.8.8.8\n" | sudo tee /etc/resolv.conf >/dev/null

ping -c 3 8.8.8.8

ping -c 3 google.com

Hopefully this is helpful/useful for some other people and saves them a bunch of headaches :sweat_smile::sweat_smile::sweat_smile:

1 Like

Hi @jrdnshw I really appreciate you sharing that with me. I went through most of that, with the exception of the failover section since I want 4G to be primary. All the steps went smoothly without any errors. However, something interesting is happening. I did this all with ethernet connected since I needed to download those packages at the beginning. Now, when I disconnect the ethernet to test the wwan0 interface, I can no longer ping or reach the internet in a browser, etc. If I connect the ethernet cable in again, it still doesn’t work. If I restart the pi, the ethernet works again.

Any help would be appreciated!

1 Like

The internet has stopped working completely now lol

So I spent all night listening to metal and running through this process again (the pertinent parts) and it’s working now. I think the only thing I did different this time around is that I used a different AT port. I got an OK from ttyUSB2 and ttyUSB3. I used ttyUSB2 the first time and used ttyUSB3 this time. Not sure if that’s what did it, but it’s working as of now (with ethernet disconnected). I check my external IP on a website to confirm the data is going through T-Mobile.
Big thank you for your help. I’m printing this page to PDF. lol

Hey so seems something is resetting after reboot. I had to go through this process after reboot to get it work again. Is there a way to script this into a service to run at boot?

Just posting this for reference. I was able to resolve the AT#ECM issue. Use instructions provided by @jrdnshw to create a script with the following contents:

Run in bash: sudo nano /usr/local/bin/atecm10_4gmodem.script

Contents:
#/usr/local/bin/atecm10_4gmodem.script
send “AT#ECM=1,0”
#optional: wait a moment for the modem to process
sleep 3

#exit minicom completely
! killall -9 minicom

Then create a service with the instructions from @jrdnshw above with the following content:

Run in bash: sudo nano /etc/systemd/system/atecm10_4gmodem.service

Contents:
[Unit]
Description=Run Minicom AT-ECM10 Command at Boot
After=network.target

[Service]
Type=oneshot

#use -S to point to the script

ExecStart=/usr/bin/bash -c 'cd /usr/local/bin && /usr/bin/minicom -D /dev/ttyUSB3 -b 115200 -S atecm10_4gmodem.script
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Follow this up with:

sudo systemctl enable atecm10_4gmodem.service

Reboot