Rock 4 c+ hung after couple of hours

All
I had this issue for last couple of days.
The board seems to be hanging after a while.
I first thought it was the network, so I started a script that runs after 5 minutes, and after 14h, the script stops.
There is space on the SD.
The temperature is at 50°C; I can’t manage to turn the fan on.

Antoine

Have You any monitor to leave it connected? Sometimes it helps and dying system shows some kernel panic messages. Check dmesg for errors, maybe something was saved there?

I unfortunately don’t have a screen near it.

which os do you use, and what’s the hardware version

Neither UART interface?

I use the latest Debian rock-4c-plus_debian_bullseye_xfce_b60.img.xz
I’ll remove it from the box to get the version.

Do you have any information on how to monitor from the UART?

I am attaching a dmesg dump of the current boot.
dmesg.zip (13.6 KB)

There are couple of interesting things
rockchip-pcie: probe of f8000000.pcie failed with error -110 => PCIE issue
cdn-dp fec00000.dp: Direct firmware load for rockchip/dptx.bin failed with error -2 => Rockchip DisplayPort (CDN-DP) driver failing
platform regulatory.0: Direct firmware load for regulatory.db failed with error -2 +> WIFI?

I don’t see anything obvious

I can create a script that runs every minutes and display some diags, what would you display?

So I found something interesting.
Everytime, before it hangs, I can find below

User

You

kernel: brcmfmac: brcmf_sdio_bus_sleep: error while changing bus sleep state -110
kernel: brcmfmac: brcmf_sdio_txfail: sdio error, abort command and terminate frame

The wifi dies, and then the timesync dies and all logs are useless.

The WIFI is setup to turn off, and it seems to reset after a while.
sudo iw dev wlan0 get power_save
Power save: on

I can confirm this.

In my experience, the sbc gets “zombified” if run for about a day. The sbc cannot be pinged or accessed via ssh, even though the the network manager icon (with the bars) shows connected. The mouse cursor moves fine, but clicking at the network icon does not do anything. I could open a new terminal tab, and issued a ping command. I could not ping the router, but also could not kill the command by cntr+c like you normally can do. Then, could not open any new terminal tabs. Could not call dmesg. Could not switch to tty1 consol either.

Rock 4c+, debian xfce from radxa github.

So I am now at 20h working properly.
I did 2 things
disabled the network card shut acpi.
build a script that restart the network manager.

Let’s wait an extra 20h.

Sorry for late answer,
for UART you just connect those pins on one device and com port (or today usb emulating com) on another, then You can just connect to that in terminal. This let’s You see same thing as in dmesg, sometimes even more because usually system can dump stack trace there and block devices are not always working properly.
There are some information about UART here on forum and on wiki. Personally I think that the best is something based on CH343 - some others were not working with particular models.

Hopefully You managed to nail down issue and it will be stable now. There are not that many users with this particular board using same system/kernel so it’s not that easy to report and find bugs. Sometimes it’s working stable until You update.

Thanks
It still alives after nearly 2 days.
What I did

  • sudo iw dev wlan0 set power_save off

  • added /etc/rc.local with iw dev wlan0 set power_save off

  • added a script that run as a service that restart network

#!/bin/bash

SSID=“cccc”
PASSWORD=“ccc”
sleep 120
while true; do

temp=$(cat /sys/class/thermal/thermal_zone0/temp)

# Convert millidegrees Celsius to degrees Celsius
temp_celsius=$(echo "scale=2; $temp / 1000" | bc)


# Echo the temperature
echo "$(date) CPU Temperature: ${temp_celsius}°C" >> /var/log/wifi_log.log

temp=$(cat /sys/class/thermal/thermal_zone1/temp)

# Convert millidegrees Celsius to degrees Celsius
temp_celsius=$(echo "scale=2; $temp / 1000" | bc)

echo “$(date) GPU Temperature: ${temp_celsius}°C” >> /var/log/wifi_log.log

echo “$(date) - Wi-Fi $SSID connection check.” >> /var/log/wifi_log.log
sudo iw dev wlan0 link | grep -E “signal” >> /var/log/wifi_log.log
# Check if the interface is connected to the network
if ! ping -c 1 google.com &> /dev/null; then
# Attempt to reconnect
echo “$(date) - Wi-Fi connection lost. Reconnecting…” >> /var/log/wifi_log.log

    # Scan for available networks
    iw dev wlan0 scan

    # Connect to the specified SSID with the provided password
    iw dev wlan0 connect -w "$SSID" key 0:"$PASSWORD"
    sleep 5

    # Check the status using iw
    if iw dev wlan0 link &> /dev/null; then
        echo "$(date) - Wi-Fi $SSID connection restored" >> /var/log/wifi_log.log
        iw dev wlan0 link | grep -E "signal" >> /var/log/wifi_log.log
    else
        echo "$(date) - Wi-Fi $SSID connection failed to restore. Link status is down." >> /var/log/wifi_log.log

        # Log additional information for diagnosis
        iw dev wlan0 link >> /var/log/wifi_log.log
        # Attempt to restart the NetworkManager service
        echo "$(date) - Attempting to restart NetworkManager service..." >> /var/log/wifi_log.log
        sudo systemctl restart NetworkManager >> /var/log/wifi_log.log		
  	sleep 2
  	sudo systemctl status  NetworkManager >> /var/log/wifi_log.log
    fi
else
    # Connection is successful
    echo "$(date) - Wi-Fi $SSID connection  is stable." >> /var/log/wifi_log.log
fi

# Adjust the sleep interval based on your needs
sleep 60

done

1 Like