什么是 电鱼智能 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 默认开启硬件看门狗支持。