目录
往期推荐
- ETAS工具链自动化实战指南<一>
- ETAS工具链自动化实战指南<二>
- ETAS工具链自动化实战指南<三>
- AUTOSAR工程师必读:Artop的核心功能
- Vector工具链自动化实战指南<一>
- isolar高手秘籍| ECU Configuration三分钟速成!
- 掌握核心步骤:RTA-BSW以太网配置全解析
- 一文详解TC399 CAN MCAL 配置
- LSL常见应用场景及示例<一>
- LSL常见应用场景及示例<二>
- LSL常见应用场景及示例<三>
- 为什么Autosar钟情arxml而非json?大揭秘!
众所众知,Vector Davinci Configurator配置工具(后称“该工具”)是在AUTOSAR 领域占据绝对优势地位的工具链,近期有小伙伴在群里突发奇想,想自己手搓一个这样的工具链能不能行?答案是:可行。但是……请听小编道来这个“但是”背后意味着什么。
声明:由于商业IP因素,本文不会分析“该工具”本身具体的技术实践,只讲解使用怎样的技术地图可以实现同等功能。
1.熟练掌握桌面工具开发
该工具是一个桌面版开发工具,你得熟练掌握桌面工具的开发流程、常见的桌面开发方式有哪些,熟悉桌面软件工具的基础常识,与操作系统相关的基础知识,比如windows的文件系统相关常识(尤其是常用路径和权限的管理策略)、动态库dll运行机制、注册表配置信息、程序安装、可执行程序运行原理等。
2.精通Java
该工具目前基于基础程序设计语言Java(JDK1.8)实现。毫无疑问,你得非常熟悉Java语言,要熟悉Java语言到什么水平呢,就是看到如下Java代码就像感觉Helloworld那样简单,否则使用Java去开发如该工具这样规模的软件配置工具会非常吃力。
private Collection<IGeeksLink> GeeksDemoFunctionTestYourJavaAbility(IGeeksModelRelation var1, List<GeeksMIReferenceValue> var2, IGeeksPostBuildPredefinedVariantView var3,
IGeeksGUIServiceContext var4, IGeeksModelViewManagerCoreInternal var5, IGeeksLinkService var6, IGeeksPartContainerRegistry var7,
String var8) {
return var2.stream().map((var0) -> {
return var0.getValue();
}).filter((var0) -> {
return var0 != null;
}).flatMap((var0) -> {
return (new ArrayList<>(var0.getGeeksDefTargets())).stream().filter((var0x) -> {
return var0x != null;
});
}).filter((var2x) -> {
return var3 == null || var5.isVisibleInGeeksView(var2x, var3);
}).map((var1x) -> {
return GeeksModelRelation.anchor(var4, new Object[] { var1x });
}).flatMap((var1x) -> {
return var6.buildLinks((IGeeksGUIServiceContext) null, var1x, GeeksELinkLocationType.JUMP_To_TARGET).stream();
}).sorted(new GeeksDomainSensitiveLinkComparator(var7, var7.getGeeksDomains(var8))).collect(Collectors.toList());
}
凡事都有例外,比如你当然可以使用其它你非常擅长的程序语言来实现同样效果的功能。本文基于该工具实际的实现语言Java来分解后续工作,无论强调Java语言有多重要都不为过,在此不再赘述Java语言在开发该工具过程中的重要性。尤其重中之重的是,需要精通Google Guice框架的应用实践技术,该技术实现了动态拓展配置工具平台的能力,尤其是BSW的各类Generator的部署和实现。
3.掌握多种程序语言
该工具使用了这Groovy,Python两种语言作为许多自动化任务的接口。尤其是自动化配置工作流相关的任务基于Groovy实现,同时也兼容python作为用户自动化配置流程过程中的外部接口实现自定义的自动化配置工程,这里的Python是基于ironPython的,ironPython兼容C#接口。
4.精通eclipse内核框架
该工具的基础平台框架是基于大名鼎鼎的开源工具eclipse内核框架实现的,你得精通eclipse平台,包括但不限于osgi(equinox)原理、Bundle/Plugin 架构和运行机制)、eclipse框架架构、workspace工作区的管理架构、project的管理架构、可视化编辑器尤其是table和form表单类编辑器的架构等。关于eclipse,可以去官网学习,后续我们也会推出相应的技术实践分享。
划重点,Bundle是OSGI框架的组件模型,Plugin是Eclipse框架的组件模型,Bundle是使用Manifest.MF文件描述组件的接口输出、依赖关系、版本约束、打包形式、运行环境描述(比如JDK最低需要版本、class loader路径等);Plugin是使用plugin.xml文件采用extension和extension point对组件的接口进行描述,接口形式丰富多样,比如icon文件、java接口、服务实现对应的Class等,Plugin是对Bundle的进一步丰富和拓展。
5.精通Java和xml文件的序列化与反序列化原理与实践
精通java和xml文件的序列化和反序列化原理是因为要处理AUTOSAR 中大量的arxml文件,对arxml文件进行增删改查,尤其是AUTOSAR 中对"splitable的数据处理"的特性需求,即同一个autosar数据模型可以分离存在多个相同结构路径的arxml文件中,需要能够对分布式arxml数据文件模型进行合并与拆分处理。该工具使用了Java本身的序列化与反序列化技术来作为arxml的基础读写,比如语法分析、xml文件节点处理等。
注意:关于arxml文件的序列化与反序列化有两种替代方案。方案一:这块内容可以用Artop完全覆盖,不必自己手搓实现,只需要精通Artop的应用即可,可大大降低工作量。关于Artop的介绍请参考我们的另一篇文章《Artop的核心功能》。方案二:基于autosar.xsd元模型定义完全使用EMF框架实现arxml的序列化与反序列化,这种方案的前提是精通EMF框架。
6.熟练掌握EMF架构与实践
该工具用到了EMF架构的基础功能,基于ecore(xmi、xml)数据统一模型基础处理框架,包括但不限于emf数据的基础访问和validation,数据依赖解析与报错跳转处理等。还有eclipse 4(E4)本身的UI框架的定义是基于xmi实现的,也就是说部分UI界面操作部门是基于xmi UI配置模型用配置的方式实现的。
7.熟练掌握Bundle/Plugin的拓展机制
熟练掌握Bundle/Plugin的拓展与拓展点组件的实现机制、生命周期管理可以用来灵活的定义和实现部分UI元素、实现跨组件的通信、对已有功能进行无缝衔接的拓展。
8.熟练应用eclipse UI框架
能够使用Jface(SWT)实现各类Widget UI组件的定制与拓展。Jface框架是对SWT进行再次封装,便于快速定制UI元素,比如Button、Treeview(常用作导航视图)、Form表单编辑器、Table表格类编辑器等。
9.精通AUTOSAR
除去上述工具本身所需技能,只具备了最多一半的前提条件去实现这样一个工具。还有工具更本质的东西,就是工具需要解决的业务领域:AUTOSAR 。如果要亲自实现这样的工具,还需要一个精通AUTOSAR的团队,从十几人到几十人不等,看团队成员本身的背景情况。当然,如果没有时间约束或你已经积累了十几年的AUTOSAR背景知识,你一个人也是可以的!
大家知道,AUTOSAR组织本身对汽车嵌入式领域软件架构进行了统一抽象和规范,其宗旨是共同降低行业内软件的开发、维护、迁移、变形应用、沟通等成本。因AUTOSAR目标宏大,导致其成为极其复杂的领域,典型领域包括但不限于 ECU上下电管理、状态机管理、诊断服务、RTOS及相应Lib、RTE、通信服务、内存服务、MCAL芯片抽象、IO接口服务(传感器和执行器接口)、信息安全服务等。
纵使许多开发实施人员由于各种原因对于AUTOSAR颇有微词,但依然无法撼动AUTOSAR当前作为汽车电子软件领域架构标准的事实,而且客观上降低了行业整体的软件成本。但需要指出的是,尤其对于小型供应商增加了成本,小型供应商团队没有资源投入去吸收消化庞大的AUTOSAR领域能力,一般来说小型团队只负责某一块软件业务,而AUTOSAR是大而全的规范和标准,对于小型团队来说投入AUTOSAR工具链的费用过于昂贵,但这也催生了行业大型工具链供应商Vector、ETAS等。
10.工具软件工程化能力
该工具本身大约有500个左右的Plugins/Bunles,除去eclipse/equinox的组件——还有大约300多个组件。该工具安装目录Plugins下面以com.vector开头的jar文件包,这些是工具本身的组件。此外,还有大量的AUTOSAR BSW模块的组件,这些模块组件本身也是以jar文件存在,就是在DaVinciConfigurator\Generators目录下大约100个BSW组件包,比如其中一个网络管理的包名为Nm_Asr4NmCan.jar,这个包内部还有包含子包,其本身是具备一定结构标准的,如果要自己开发,需要自行定义BSW组件内部的结构标准。而且每个BSW组件包的实现还需要精通该业务领域,比如你要实现网络管理这个包,你得精通AUTOSAR网络管理的原理、逻辑、策略等相关领域背景知识。
工具本身和BSW组件总共600-700个Bundles,size大约400-500M,估计Java源码+各类配置xml配置文件应该有1G左右。这么大的软件体量,需要有强大的软件工程化能力,软件集成、测试、发布、配置管理等,尤其是面对入场庞大复杂交错的功能组合,需要灵活多变的调试技术来确定实施过程中的层出不穷的各种Bug和问题。
即使万事俱备,还需要假以时日,孜孜不倦日复一日的手搓代码,若是独自一人,快则数月,慢则数年,才能大功告成得到一个同等的工具利器。当然,若你有资源、有团队,取决于你的资源和团队的能力分布情况,正常情况下,至少需要30-50人的团队(市场平均水平码农,价格自己参考市场价),持续1-2年则大事可成。由于软件工程领域,不同段位的大侠水平可能相差十万八千里,所以对某个体或团队的特定差异情况,小编无法预估你所需的真实的投入量。
最后,锦上添花,彩蛋尤佳。各位大侠是否有兴趣进一步了解相关内容?如果有兴趣,可以关注或者邀请感兴趣的伙伴一起关注,后续会开播详解上述相关内容。在此也邀请各位可以将自己特别关注感兴趣的方向和内容、以及自己想通过工具解决的问题通过留言或者后台反馈给小编,以便后续为你准备相关精彩内容,助力你快速成长为工具江湖/Autosar江湖的武林高手!
如果你代表团队有自研Autosar工具的规划且需要技术方案协助,小编作为工具技术游侠,可以为你提供有效技术指导和培训,助你扫清一切技术实施障碍,同时也为你免去招聘一个高级工具链技术专家所需的高额成本和各种管理成本。