第二章 测试环境搭建:硬件测试台架、软件工具链、ADB与串口调试

做座舱系统稳定性测试,环境搭建是第一步,也是最容易踩坑的一步。我见过不少团队,测试方案写得天花乱坠,结果一上电就各种翻车——说白了,就是台架没搭好,工具链没配通。今天咱们就聊聊这块,我把这些年摸爬滚打的经验都掏出来。

2.1 硬件测试台架

硬件台架,说白了就是给MTK8678芯片搭个「家」。这个家要稳,要能模拟真车环境。我个人习惯把台架分成三个层级:

  • 核心板层:MTK8678核心板,带DDR和存储
  • 接口板层:引出所有外设接口,包括CAN、以太网、USB、HDMI等
  • 负载模拟层:模拟屏幕、摄像头、麦克风等外设

嗯,这里要注意一个细节——供电。座舱系统对电源纹波很敏感,我遇到过好几次测试过程中系统莫名重启,查了半天发现是电源适配器质量不行。建议用可编程电源,设置12V/5A输出,纹波控制在50mV以内。

台架搭建清单(我常用的配置):

  • MTK8678开发板(带散热模组)
  • 12V/5A可编程直流电源
  • USB转CAN模块(PCAN或Kvaser)
  • HDMI采集卡(用于录制屏幕)
  • 串口转USB线(FT232芯片,稳定)
  • 千兆交换机(用于以太网通信)

你想想看,如果台架供电不稳,测出来的稳定性数据能信吗?所以这块千万别省。

2.2 软件工具链

软件工具链,就是咱们测试人员的「武器库」。MTK8678的软件栈比较重,我一般会装这几样:

工具名称 用途 版本建议
ADB Android调试桥,控制设备 ≥ 1.0.41
Fastboot 刷机、分区操作 最新版
串口终端(Putty/MobaXterm) 内核日志、低层调试 任意
Python 3.8+ 自动化脚本编写 ≥ 3.8
Scrcpy 屏幕投屏、录制 ≥ 1.24

这里我特别想提一下Scrcpy。以前做稳定性测试,我得一直盯着屏幕看,眼睛都快瞎了。后来发现Scrcpy可以投屏到电脑上,还能自动录制,配合Python脚本做图像识别,简直不要太爽。

我的小技巧:把ADB和Scrcpy的路径加到系统环境变量里。这样在命令行里直接敲命令,不用每次cd到工具目录。省下的时间够你喝杯咖啡了。

2.3 ADB调试

ADB是Android调试的「瑞士军刀」。对于MTK8678座舱系统,我常用的ADB命令就这几条:

# 查看设备连接状态
adb devices

# 进入shell
adb shell

# 抓取logcat日志(稳定性测试必备)
adb logcat -v time > crash_log.txt

# 查看CPU占用率
adb shell top -n 1

# 查看内存使用
adb shell dumpsys meminfo

# 模拟按键(比如Home键)
adb shell input keyevent KEYCODE_HOME

# 截图
adb shell screencap /sdcard/screenshot.png
adb pull /sdcard/screenshot.png

为什么会强调adb logcat -v time?因为稳定性测试最怕的就是不知道问题什么时候发生。加上时间戳,你才能定位到具体的时间点。我曾经排查一个内存泄漏问题,就是靠logcat里的时间戳,发现每次播放视频30分钟后内存暴涨——嗯,这就是线索。

注意:ADB连接有时会掉线,尤其是长时间跑稳定性测试时。建议写个心跳检测脚本,每隔30秒检查一次adb devices状态,如果断开就自动重连。别问我怎么知道的——有一次跑了12小时的测试,第11小时ADB断了,前功尽弃。

2.4 串口调试

串口调试,是咱们嵌入式工程师的「最后一道防线」。当系统死机、ADB连不上时,串口就是唯一的救命稻草。MTK8678的串口一般映射到UART0,波特率通常是115200。

接线其实很简单:

  • 开发板的TX接串口工具的RX
  • 开发板的RX接串口工具的TX
  • GND接GND

嗯,这里有个坑——电平匹配。MTK8678的串口是1.8V电平,而很多USB转串口模块是3.3V或5V的。直接接上去可能会烧芯片。我建议用带电平转换的模块,或者直接用MTK官方的调试板。

串口终端设置示例(以Putty为例):

Session:
  Serial line: COM3 (根据实际端口修改)
  Speed: 115200
  Data bits: 8
  Stop bits: 1
  Parity: None
  Flow control: None

连上串口后,你会看到内核启动日志。从uboot到kernel,再到Android系统启动,每一步都有输出。如果系统卡在某个阶段,串口日志会告诉你原因。比如:

[    1.234567] mmc0: error -110 whilst initialising SD card
[    1.240123] mmc0: card never left busy state

看到这种日志,基本可以断定是eMMC通信有问题。要么是焊接不良,要么是供电不稳。我曾经排查过一个「开机偶尔黑屏」的问题,就是靠串口日志发现是DDR初始化时序不对——说白了,就是PCB走线太长,信号质量差了。

串口调试的黄金法则:

  • 开机时按住空格键,可以进入uboot命令行
  • 内核启动阶段按任意键,可以进入内核调试模式
  • Android启动后,串口输出的是kernel log,不是logcat
  • 如果串口没输出,先检查接线,再检查波特率

2.5 环境验证

台架搭好了,工具链装好了,怎么知道环境是不是OK?我一般会跑一个「冒烟测试」:

  1. 上电,看串口能否正常输出内核日志
  2. 等待系统启动完成,用ADB连接
  3. 执行adb shell dumpsys battery,确认电池状态正常
  4. 播放一段视频,看屏幕显示是否正常
  5. 用Scrcpy投屏,确认画面流畅
  6. 跑一个简单的压力脚本(比如循环打开关闭App)

如果以上六步都通过,恭喜你,环境搭建完成。可以开始正式的稳定性测试了。

我的习惯:每次搭建完环境,我都会把串口日志和ADB连接状态截图保存。这样万一后续出问题,可以对比「正常状态」和「异常状态」的差异。你想想看,没有基线数据,你怎么判断问题是新出现的还是本来就有的?

好了,环境搭建这块就聊到这儿。下一章咱们聊聊具体的稳定性测试用例设计——那才是真正考验功力的地方。