什么是 电鱼智能 EFISH-SBC-RK3399?

电鱼智能 EFISH-SBC-RK3399 是一款高性能、高可靠性的工业级主板,搭载 Rockchip RK3399 六核处理器。

与消费级平板方案不同,它在设计之初就将**“稳定性”**置于首位。除了采用工业级元器件外,它开放了底层的 Watchdog (看门狗) 接口,并优化了 PMIC (电源管理) 逻辑,使其具备了只有工控机才有的“自我诊断与自我恢复”能力。

为什么 无人值守设备必须要有“看门狗”?(痛点分析)

在长达数年的运行周期中,软件和环境的不确定性是无法避免的:

1. 软件的“脑梗”:ANR 与 Crash

痛点:广告机 APP 因为内存泄漏越跑越慢,最终卡死在某个画面;或者 Android 系统底层服务因异常崩溃,导致触摸无反应。此时设备通电但无法工作。 RK3399 解决方案看门狗复位。看门狗是一个独立的定时器。系统必须每隔几秒向它发送“心跳”信号(喂狗)。一旦系统死机停止喂狗,看门狗会直接拉低复位引脚,强制 CPU 重启,过程仅需几秒。

2. 电源的“闪断”:断电后无法开机

痛点:商场晚上拉闸断电,第二天早上送电。普通安卓板需要人工按 Power 键才能开机,导致设备一直黑屏。 RK3399 解决方案上电自启 (Auto Power On)。电鱼主板通过硬件电路设计,检测到电压输入即自动触发开机时序,无需人工干预。

3. 通信的“失联”:4G 掉线

痛点:偏远地区 4G 信号波动,模组进入“假死”状态,无法联网更新广告。 RK3399 解决方案链路监测。系统守护进程定时 Ping 公网 IP,一旦连续失败,自动复位 4G 模组供电或重启系统,确保网络“自愈”。

系统架构:三级防护体系 (Protection Architecture)

我们构建了从硬件到软件的立体防护网。

第一级:硬件看门狗 (The Last Resort)

  • 机制:RK3399 SoC 内部或外部独立的 Watchdog Timer (WDT)。

  • 作用:解决内核级死机 (Kernel Panic)。当 Linux 内核完全卡死,无法调度任何任务时,硬件看门狗触发冷重启。

第二级:系统守护进程 (System Daemon)

  • 机制:Android/Linux 后台 Service。

  • 作用:解决应用级崩溃 (App Crash)

    • 守护进程每 5 秒检查一次核心 APP 进程是否存在。

    • 如果 APP 闪退,守护进程立即拉起 APP。

    • 如果 APP 界面卡死(ANR),通过 am force-stop 强杀并重启。

第三级:电源管理 (Power Management)

  • 机制:RTC 定时开关机 + 断电自启。

  • 作用:解决能源与老化问题。设置每天凌晨 3:00 自动重启一次,释放内存碎片,保持系统“年轻”。

关键技术实现 (Implementation)

1. 启用硬件看门狗 (Linux/Android C代码)

在应用层操作 /dev/watchdog 节点进行“喂狗”。

C

#include <fcntl.h>
#include <linux/watchdog.h>
#include <sys/ioctl.h>
#include <unistd.h>

int main(void) {
    int fd = open("/dev/watchdog", O_RDWR);
    if (fd == -1) {
        // 打开失败,通常说明驱动未加载或权限不足
        return -1;
    }

    int timeout = 60; // 设置超时时间 60秒
    ioctl(fd, WDIOC_SETTIMEOUT, &timeout);

    while (1) {
        // 核心业务逻辑检查...
        if (check_app_health() == 0) {
            // 业务正常,喂狗 (Keep Alive)
            ioctl(fd, WDIOC_KEEPALIVE, 0);
        } else {
            // 业务异常,停止喂狗,等待系统复位
        }
        sleep(10);
    }
    close(fd);
    return 0;
}

2. Android APP 守护与自启 (Java/Shell)

利用 Android 广播机制实现开机自启,并利用 Shell 脚本进行保活。

Java

/* AndroidManifest.xml 注册开机广播 */
<receiver android:name=".BootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>

Bash

#!/system/bin/sh
# 简单的保活脚本 (Watchdog.sh)
while true; do
    # 检查进程是否存在
    ps | grep "com.dianyu.adplayer" > /dev/null
    if [ $? -ne 0 ]; then
        # 进程不在,启动应用
        am start -n com.dianyu.adplayer/.MainActivity
        echo "App crashed, restarted." >> /data/watchdog.log
    fi
    sleep 10
done

性能表现与可靠性测试

电鱼智能实验室对 RK3399 进行了严苛的压力测试:

  • Reboot 压力测试:连续冷启动/热重启 5000 次,系统文件系统无损坏,自启功能 100% 成功。

  • 高负载死机模拟:通过 fork 炸弹人为耗尽资源模拟死机,看门狗均在 60秒内 成功复位系统。

  • 断电模拟:在读写 Flash 过程中突然断电,利用 Journaling File System (ext4/f2fs) 确保数据一致性,再次上电后系统正常引导。

常见问题 (FAQ)

Q1: 看门狗会导致系统无限重启吗? A: 如果是硬件故障或严重且无法修复的软件 Bug(如启动文件损坏),看门狗确实会导致循环重启。为此,电鱼固件引入了 “重启计数器”。如果检测到短时间内连续重启超过 5 次,系统会进入 Recovery 模式安全模式,停止喂狗,等待人工检修。

Q2: 如何设置定时开关机? A: 电鱼定制的 Android 系统在“设置”菜单中集成了 “定时开关机” 选项。该功能依赖 RK3399 内置的 RTC (实时时钟) 芯片。注意,主板上的纽扣电池必须有电,否则断电后 RTC 时间会重置,导致定时失效。

Q3: 硬件看门狗和软件看门狗有什么区别? A:

  • 软件看门狗:通常是一个后台 Service,只能处理 App 崩溃。如果整个 Android 系统卡死(内核 Panic),软件看门狗也会挂掉,无法起作用。

  • 硬件看门狗:独立于 CPU 运行的计时器。只要 CPU 不喂狗,它就断电复位。它是最后一道防线。EFISH-SBC-RK3399 默认开启硬件看门狗支持。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐