在自动售货机嵌入式开发中,操作系统选型是一个绕不开的决策点。Android还是Linux?这个问题没有标准答案,但选错了,后面全是坑。

2023年底,我们团队接手了一个自动售货机系统升级项目。原有设备跑的是裸机程序,功能单一——按键选货、电机出货、收钱完事。新需求列了一长串:触摸屏交互、多支付方式、远程管理、AI视觉识别、广告播放……

摆在面前的第一道坎就是:操作系统选哪个?

本文从支付SDK集成、系统稳定性、开发效率、硬件成本四个维度,复盘这个项目的操作系统选型全过程。

一、需求画像:这个系统到底要干什么

在选型之前,先把需求拆清楚。项目包含两种机型,需求完全不同:

弹簧机(传统售货机):控制逻辑相对简单——接收支付信号→驱动电机转动→商品掉落。需要触摸屏展示商品信息、支持扫码支付、支持4G远程管理。不需要AI识别,不需要复杂交互。

开门柜(AI视觉柜):核心是“开门拿货、关门自动结算”。需要多路摄像头实时捕捉取货画面,在端侧完成YOLO模型的推理,需要支持扫码/NFC/刷脸等多种支付方式,需要后台远程管理库存和价格。

两种机型对操作系统的要求完全不同。

二、操作系统方案对比

方案A:Android

Android的优势集中在几个方面:

支付SDK集成是最大的加分项。 微信支付、支付宝的支付SDK都是Android优先,官方文档、示例代码、技术支持都更完善。集成一个扫码支付,Android开发者照着文档一天能搞定,Linux下要自己封装HTTP接口、处理签名验签、调试各种边界情况,时间翻几倍。

UI开发效率高。 开门柜的屏幕交互复杂——商品列表滑动、购物车、广告轮播、多语言切换——这些用Android的RecyclerView、ViewPager2、Fragment做起来得心应手。Linux下用LVGL或者Qt虽然也能实现,但开发周期更长,动画效果和触摸体验也不如Android流畅。

多屏异显支持成熟。 高端开门柜需要主屏做交互、副屏播放广告,Android的Presentation类专门解决这个问题。

但Android也有明显的短板:

系统臃肿。 Android系统本身占用的资源多,开机慢(冷启动通常30秒以上),内存占用高。对于弹簧机这种只需要基础交互的设备,跑Android有点“杀鸡用牛刀”。

OTA升级复杂。 Android的OTA升级涉及分区表、bootloader、recovery等多个层面,一旦升级失败设备可能变砖。

方案B:Buildroot Linux

Linux的优势在于“可裁剪”和“稳定”。

系统精简。 Buildroot编译出来的Linux镜像可以做到200多MB,内存占用控制在1GB以内。弹簧机用2GB RAM + 8GB eMMC的配置就够了,硬件BOM比Android方案低不少。

稳定性高。 没有多余的服务和进程,系统重启后干净利落,不容易出现Android常见的“系统越跑越慢”的问题。

成本优势明显。 但支付SDK需要自己封装HTTP接口,没有现成的库可以用。

三、最终决策:双系统策略

我们的结论是:不做二选一,而是双系统并行。

机型 操作系统 理由
弹簧机 Buildroot Linux 控制逻辑为主,支付简单,成本敏感,用Linux即可
开门柜 Android 11 交互复杂,多支付方式,AI推理,用Android开更快

这套双系统方案的硬件成本比单平台Android方案节省约25%——弹簧机不需要大内存和高存储,整体BOM大幅下降。同时也比纯Linux方案节省了开门柜的UI开发时间,开发周期缩短约40%。

四、双系统方案的技术要点

弹簧机系统配置(Linux)

Buildroot编译的系统镜像控制在200MB以内,只包含必要的驱动和服务。开机时间从Android的30秒以上缩短到8秒以内。外设通过RS485串行总线连接多个从控板,每个从控板控制8-16个货道,最大支持近500路货道。

开门柜系统配置(Android)

基于Android 11深度定制,裁剪掉不必要的系统应用和服务。集成微信、支付宝支付SDK,对接后台MQTT协议实现远程管理。

多屏异显是重点开发模块。通过Presentation类在副屏独立播放广告视频,需要处理好HDMI热插拔导致的渲染线程崩溃问题。

支付与后台的统一

双系统方案的一个关键设计是支付接口和后台协议统一。Android和Linux设备使用相同的MQTT Topic结构和数据格式,后台无需区分设备类型。

五、踩坑记录

坑1:Linux下支付对接的坑

Linux设备对接微信支付时,签名验签的库需要自己编译。openssl版本不匹配会导致签名错误,调试了好几天才发现是库版本问题。建议在Buildroot中固定openssl版本。

坑2:Android多屏异显的坑

开门柜的副屏广告播放,刚开始用Presentation实现,但HDMI插拔时经常崩溃。后面改用SurfaceControl的方式,自己管理副屏的Surface生命周期,稳定性好很多。

坑3:双系统固件维护成本

维护两套系统固件确实增加了工作量——kernel配置、驱动适配、系统裁剪都要做两遍。但换来了硬件成本的最优解和产品线的灵活覆盖,这个投入是值得的。

六、总结

自动售货机的操作系统选型,没有“最好的系统”,只有“最合适的系统”。核心思路是:不追求“一个系统打天下”,而是根据产品定位选择最匹配的方案。

控制逻辑为主的弹簧机用Linux,控制成本和复杂度;交互复杂的开门柜用Android,提升开发效率和用户体验。

这套选型逻辑在自动售货机行业已有量产验证——业内部分头部设备制造商的弹簧机产品采用Linux方案,AI视觉开门柜产品则基于Android平台,配合视觉+重力感应双重识别方案,识别准确率不低于99.7%,产品出口全球100多个国家和地区,售后网络覆盖国内外600多个城市、30000多个网点。

本文基于真实项目经验整理,技术细节已脱敏。相关硬件和平台信息均来自公开渠道,仅供参考。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐