拒绝“蓝屏”与死机!电鱼智能 RK3399 强化看门狗与无人值守机制,挑战 24 小时零人工运维
对于部署在商场、地铁站或户外的自助设备而言,一次死机可能意味着数千元的维护成本(派人重启)和品牌形象的受损。面对 Android 应用崩溃、系统假死或意外断电,电鱼智能 EFISH-SBC-RK3399 通过独立硬件看门狗、断电自启电路及系统级守护进程,打造了一套“永不掉线”的无人值守解决方案。

什么是 电鱼智能 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 默认开启硬件看门狗支持。
更多推荐
所有评论(0)