车联网TBOX除了业务,感觉有必要先介绍一下芯片方案及系统知识
此专栏是想到哪里写哪里,并没有非常规范和明确的顺序,除非是单独一个比较大的主题,比如诊断和电源管理。毕竟已量产200W+了,车型几十个,电子电器架构好几代,TBOX硬件形态和集成形式也有好几种,涉及到的东西太多了,反正就是随心写。
TBOX说到底就是一个联网的盒子,主要芯片还是用的电信通讯方案,3G时代就不说了,毕竟现在也慢慢在退网,主要讲一下4G和5G的方案
先说4G方案
主要在用的基本都是高通方案,华为和中兴另说
高通以MDM9x07和9628为主,十几年前的芯片,消费电子也在用,比如移远的EC20,车载的叫AG35,直接看图吧

基本信息就不在此介绍了,说一下大家看到的常规信息之外的一些东西
-
内存有限,大部分256MB和512MB,留给应用的内存大概45%左右
-
单核A7,CPU算力2.3K Dmips左右,并不富裕,如果TBOX业务较多或者有比较吃算力的业务,就要好好计划省着点用
-
没有严格标准的TEE方案,为高通自己在NAND上做的一块机密区域
-
单频L1 GNSS定位,可选AGPS和RTK辅助
国产的方案也有,Cat.1的较多,Cat.4的比如ASR1806,ASR的技术基石为Marvell移动通讯部门,基本都大差不差,只是更为便宜,同时更符合国家的战略。
5G方案
最早出来的还是高通,后来有了MTK的方案,高通以SA515 和SA522为主,MTK以MT2735为主,国产紫光展锐的也有
SA515出来很早,同样是单核A7,算力有限,522/525和MT2735/2739是同一个时代的产品,以MT2735为例:

-
双核A55,算力7K Dmips,极其富裕,足够覆盖业务复杂的TBOX产品
-
内存基本512及以上
-
标准ARM TrustZone方案
-
可以支持虚拟化方案
-
集成GNSS,支持L1+L5双频段,定位更精确
-
支持千兆以太网,但CPU算力不能跑满千兆带宽
再看系统
以5G为例,典型的系统方案,支持WIFI,千兆以太网,对于7K算力的CPU来说,数据流并发存在一定困难,因此需要硬件加速单元
MT2735具备HW NAT,HW QOS以及DMA等硬件加速和数据转发单元,可以在ETH,Modem,WIFI之间任意配置加速转发,充分释放CPU算力

TEE方面

ARM TrustZone 技术在ARM V6开始退出,在V7架构开始标配,在Normal World中实现功能调用,在Secure World中实现安全计算和存储
从CPU架构角度看,以v8架构为例

EL0就是Normal World,EL0进入Secure World需要通过EL3,EL3管理整个和切换安全模式。
如何进入EL3?通过SMC指令,进入EL3后,所有的世界都是安全的,包括总线,也包括调试。
数据如何交互?通过共享内存或者寄存器
TrustZone 是一个标准技术,有需要再单独介绍,此处只需要知道流程如何及如何应用的就行。
之前提到的TSP证书秘钥,使用过程就在EL0,普通的linux APP进程中,具体的实现过程在TEE中,TEE可以理解为一个小的运行在安全环境的小OS,执行具体的加密解密及存储过程。
软件方面
现代处理器方案一般较多都会采用yocto工具,实现kernel和文件系统以及应用的整体集成
大概看看图吧,入手有一定门槛,整个工程比较大,配置非常灵活,对于多平台多板型架构的工程来说是非常合适的

在TBOX开发中,可以采用yocto编译kernel和文件系统及编译工具链,应用单独使用工具链编译,与庞大的yocto工程隔离,还方便分工,尤其有多方开发参与的情况下
启动管理
使用yocto一般会采用systemd作为启动管理方案,类似的还有initd等,比如buildroot中大多配置initd方式
systemd 是 Linux 系统中广泛采用的初始化系统和服务管理器,其设计目标是提高启动效率、简化服务依赖管理,并提供更丰富的功能(如日志管理、设备热插拔支持等)。其架构采用模块化设计,核心组件通过协同工作实现系统管理功能。其实在发展过程中,除了启动,systemd日益庞大,具备很多功能

有几个关键的用处:
-
启动时序分析,一般车辆在下线的时候会进行诊断动作,对TBOX启动有时间要求,systemd中的启动时序记录可以方便的分析应用启动时间及相互依赖
-
服务依赖管理,很多进程相互存在依赖,启动有先后顺序要求,而且还需要重启管理等,使用systemd比较方便
-
cgroups应用,可以方便的进行cpu,内存,IO等资源隔离和限制
安全相关
主要有安全启动和SElinux
安全启动,行为主要是逐级校验,确保启动的安全性,秘钥写入eFUSE确保不可被篡改

Selinux为linux的安全子模块,主要针对进程行为进行权限限制,不同级别的进程具备不同的权限,比如限制部分进程只能访问系统资源,不允许执行rm操作等等,借用一张图:

需要注意的是:
-
Selinux规则比较复杂且细致,需要针对每个进程每个系统行为进行配置
-
最好是在开发过程中开始准备,涉及到的系统行为,新的系统调用,立即加上selinux配置
-
前期设为宽容模式,抓取日志,使用工具进行分析和生成规则
总结一下:
-
芯片方案无非就是算力和成本及网络制式的区别
-
系统都是Linux方案,所采用的都是常规技术,只是安全性上会多一点