第一章:机顶盒系统概述

做机顶盒稳定性测试这么多年,我最大的感触是——你得先懂它,才能测好它。很多人一上来就怼测试用例,结果出了问题连日志都看不懂。说白了,机顶盒就是个嵌入式系统,但它又有点特殊:它要跑Android TV,要解码视频,还要跟遥控器、WiFi、蓝牙打交道。嗯,我们先从硬件架构说起。

1.1 硬件架构

机顶盒的硬件,我习惯把它分成四个核心模块:主芯片、内存、存储、无线连接。你想想看,这四个模块任何一个出问题,系统都可能崩。

主芯片(SoC)

主芯片是机顶盒的大脑。目前主流方案有海思、晶晨、瑞芯微这几家。我遇到过最头疼的一次,是某款芯片在播放4K HDR视频时,解码器会随机挂掉。查了三天,最后发现是芯片内部的VPU(视频处理单元)电压域设计有缺陷。

  • CPU核心:通常是Cortex-A53/A55/A72,负责跑系统和应用
  • GPU核心:Mali系列为主,负责UI渲染
  • 视频解码器:硬解H.264/H.265/AVS2,这是机顶盒的核心能力
  • 显示控制器:负责HDMI输出,支持4K@60fps

重点提醒:稳定性测试时,一定要关注芯片的温升曲线。我见过不少机顶盒,跑4K视频半小时后,芯片温度飙到85°C以上,然后就开始丢帧、卡顿、甚至重启。

内存(DDR)

内存这块,现在主流是DDR3/DDR4,容量从1GB到4GB不等。我个人习惯在测试时重点关注内存带宽和延迟。为什么?因为机顶盒要同时跑Android系统、解码视频、渲染UI,内存带宽不够就会卡。

  • 容量:1GB只能跑轻量应用,4GB才能流畅跑Android TV 12
  • 频率:DDR3-1600到DDR4-3200,频率越高越好
  • 通道数:双通道比单通道带宽翻倍,对4K解码有帮助

测试技巧:我曾经用memtester跑内存压力测试,发现某款机顶盒在高温环境下内存位翻转率异常高。后来定位到是PCB走线太长,信号完整性出了问题。

存储(eMMC/NAND)

存储决定了系统启动速度和应用安装空间。eMMC 5.1是目前主流,顺序读取能到300MB/s以上。我建议测试时重点关注两个点:

  1. 随机读写性能:影响应用启动速度,用fio工具测
  2. 寿命:eMMC有写寿命限制,频繁OTA升级会加速老化

WiFi/BT模块

无线模块是机顶盒的痛点。我遇到过WiFi断流、蓝牙遥控器延迟、双频切换失败等各种问题。常见的方案有瑞昱、博通、联发科。

  • WiFi:支持2.4G/5G双频,802.11ac是标配,WiFi 6开始普及
  • 蓝牙:蓝牙4.2/5.0,用于遥控器和游戏手柄
  • 共存问题:WiFi和蓝牙共用天线时,容易互相干扰

避坑指南:我曾经遇到一个项目,WiFi吞吐量在蓝牙连接后直接掉了一半。查了半个月,发现是天线隔离度不够,WiFi和蓝牙的射频信号在板子上串扰了。解决方案是加一个共存的滤波器。

1.2 软件架构

软件架构这块,说白了就是三层:Linux内核、Android TV框架、中间件。我习惯从下往上讲,这样逻辑更顺。

Linux内核

机顶盒的Linux内核通常是4.9或4.14版本,做了大量定制。我见过最夸张的,是某厂商在内核里打了300多个补丁,就为了适配自家的硬件。

  • 驱动层:显示驱动(DRM/KMS)、视频解码驱动(V4L2)、音频驱动(ALSA)
  • 内存管理:CMA(连续内存分配器)用于视频解码,ion/heap用于GPU
  • 电源管理:suspend/resume、cpufreq调频、thermal管理

关键点:稳定性测试时,内核日志(dmesg)是第一道防线。我习惯在测试脚本里加一句 dmesg -c 清空日志,然后每5分钟抓一次,看有没有异常打印。

Android TV

Android TV是Google针对电视做的定制版本。跟手机版Android比,它多了TV输入框架、Leanback UI、HDMI CEC等功能。

  • System Server:核心服务,包括AMS、WMS、PMS等
  • SurfaceFlinger:负责UI合成,机顶盒的UI层数少,但要求帧率稳定
  • MediaServer:音视频解码的核心,出问题会导致无声、花屏

中间件

中间件是机顶盒厂商自己加的那层。它负责把Android的接口转成底层硬件的控制命令。我见过最复杂的中间件,有200多个API,涵盖了电视调谐、CI卡解密、字幕渲染等功能。

个人经验:中间件是稳定性问题的重灾区。因为它是厂商自己写的,质量参差不齐。我建议在测试时,重点关注中间件的内存泄漏和线程死锁问题。

1.3 系统启动流程

系统启动流程,我把它分成三个阶段:Bootloader、Kernel、System Server。每个阶段都有坑,我们一个一个说。

Bootloader

Bootloader负责初始化硬件,然后加载内核。机顶盒常用的Bootloader是U-Boot,也有厂商自己写的。

  • 硬件初始化:DDR控制器、时钟、串口
  • 启动参数:传给内核的cmdline,比如console=ttyS0,115200
  • 启动模式:正常启动、恢复模式、fastboot模式

避坑指南:我曾经遇到一个项目,Bootloader阶段偶尔会卡死。查了三天,发现是DDR训练参数在低温环境下不稳定。解决方案是放宽了DDR时序的容差范围。

Kernel

内核启动阶段,会做设备树解析、驱动加载、文件系统挂载。我建议测试时关注启动时间,机顶盒的启动时间通常要求在30秒以内。

  • 设备树:描述硬件资源,比如GPIO、I2C、SPI
  • 驱动加载:按设备树顺序加载,出问题会导致设备无法识别
  • init进程:启动用户空间的第一个进程,负责拉起Android系统

System Server

System Server是Android系统的核心。它启动后,会拉起各种服务,比如ActivityManager、WindowManager、PackageManager等。

  • Zygote:应用进程的孵化器,所有应用都是它的子进程
  • ServiceManager:服务注册中心,所有系统服务都要注册到这里
  • SurfaceFlinger:UI合成服务,启动后桌面才会显示

测试要点:System Server启动过程中,任何一个服务卡住,都会导致系统启动失败。我习惯用 logcat -b events 查看启动事件,重点关注 boot_progress 的时间戳。

嗯,第一章的内容就这些。硬件架构、软件架构、启动流程,这三块是机顶盒稳定性测试的基础。你把这些搞懂了,后面测起来才能有的放矢。下一章我们讲测试环境的搭建,包括怎么接串口、怎么抓日志、怎么搭自动化测试框架。