软件和架构到底是什么关系,是否是架构定义软件?另外,我们上文提到了软件定义网络,这又该如何理解?接下来我们看看 "软件、硬件、架构、网络的恩怨情仇"!
三、软件、硬件、架构、网络的 "恩怨情仇"
第3个问题:到底是软件定义架构?还是架构定义软件?
为了搞清楚这个问题,我们需要先来捋一捋 "软件" 与 "架构" 这两个概念,由于架构本身就包含很多内容,因此,笔者也将 "网络" 与 "硬件" 加入进来一起捋捋!
当然,这里涉及的软件、硬件等仅限在汽车电子范围内。车架、轮胎等硬件不在讨论范围内!在研究软件、硬件、架构、网络之间的关系时,会涉及以下几个概念:功能、通信、系统。
"功能" 与 "通信" 的概念比较好理解,它们与 "网络" 、"软件"息息相关!
而 "系统" 一般是指若干个部分相互联系,相互作用所形成的某些功能整体,在后文中也会提及。
笔者试着绘制了软件、硬件、架构、网络这几个概念之间的关系,如下图。

图2 软件/硬件/架构/网络关系图
从上图中可以看出,存在了概念与概念之间的交叉,如 "网络" 与 "架构" 交叉产生的 "网络架构"!让我们来一一介绍!
①
软件
我们尝试将图2软件部分内容继续细化,分为两部分:一部分是软件架构,另一部分是除软件架构之外的软体部分!
结合第二节图1提到的与汽车相关的软件,我们比较容易理解软体部分。但在研究软件架构时,会有以下问题产生:
什么是软件架构?软件架构包含哪些内容?
有哪些软件架构?
笔者认为,软件架构是由软件元素之间的依赖关系组成!软件架构一般包含软件组件、端口、接口以及它们之间的互联关系等!AUTOSAR就是一个很好的例子!但是,需要说明的是,AUTOSAR体系较为膨大,它包含有 "软件架构" 这层概念在其中,笔者认为,正如其名一样,AUTOSAR更准确的来说是一种 "系统架构"!
汽车领域的软件架构如图3所示,主要有以下几种:
1)应用软件架构:由应用软件之间的依赖关系等所组成
2)基础软件架构:由多个基础软件组件及其之间的关系组成
3)OS内核架构:主要包括巨内核、微内核、混合内核以及XNU
4)服务架构:一种软件模板化的设计思路,这里的软件更多的是指应用软件!
5)SOA:一种面向服务的模板软件架构
需要注意的是,笔者认为SOA是一种模板软件架构,真要归类,应该是服务架构、基础软件架构、应用软件架构的交叉!
还有一个是诊断服务,由于诊断服务自身是属于服务的范畴,所以会涉及服务架构的概念!但是它不完全属于架构的范围!所以笔者认为是一个 "脚踏两只船" 的角色!

图3 汽车软件架构
②硬件
图2的硬件同样划分为两部分:一部分是硬件架构,一部分是硬体部分。
硬体部分比较容易理解,有ECU、电子电路、线束等(非架构),那么这问题又来了:
什么是硬件架构?
硬件架构包含哪些内容?
硬件架构是根据整车要实现的功能,按照一定的划分规则,比如空间布局,规划出相应的控制部件,同时考虑部件之间的连接关系,依赖关系。如图4所示,硬件架构主要包括以下几种:
1)硬件组件架构:通过电路图描述ECU的所有内部方面。如电源、接地、微控制器、总线接口、存储器等等
2)电子电路架构:定义物理组件的电气特性及互连
3)线束架构:包含硬件架构中所有线路的连接。如插头连接器、接头等等
4)硬件几何架构:描述车辆中所有安装空间和安装位置等
5)内核架构:一般是指处理器(芯片)的核架构,如ARM的Cotex-A系列等
需要注意的是,笔者认为在设计ECU时,所产生的 "ECU架构" 隶属于硬件组件架构的部分!

图4 汽车硬件架构组成
③网络
严格来说,网络架构、CAN总线、车联网、以太网等等都应该属于网络的范畴,网络架构设计,需要收集产品需求,针对不同的功能需求,数据交互量级规划不同网段,选择网络协议,不同网段的网络系统设计,分配网络负载,重点考量协议限制条件。
如图5所示,从大方向上,我们将 "网络" 划分为三个区域,分别是:
功能网络
网络架构
通信网络

图5 汽车网络架构组成
如上图5所示,网络架构主要包含三种:
1)逻辑功能架构
" 逻辑功能架构 "是功能网络和网络架构的交集!
什么是逻辑功能架构?包含哪些内容?
逻辑功能架构定义了以软件或硬件实现的功能网络,包含逻辑组件(如传感器、执行器和逻辑功能)的规范。另外,还指定了接口和连接。逻辑功能架构中的元素可以映射到应用层以及底层软件或硬件架构。
有的朋友可能也发现了一个问题,为什么逻辑功能架构是竖着的,因为逻辑功能架构也涉及软件与硬件的部分,因此,逻辑功能架构应该是横跨 "软件"、"硬件"、"架构"以及 "网络" 的一个存在。这也是为什么有些朋友认为它属于 " 系统架构 "的原因!
当然,横跨 "软件"、"硬件"、"架构" 以及 "网络" 另一个存在便是 "通信网络架构"!
2)通信网络架构
通信网络架构是什么?包含哪些内容?
笔者认为,通信网络架构定义了软件组件如何跨硬件边界交换数据,指定了硬件网络中的物理信号等!描述软硬件之间的通信关系!
3)硬件网络架构
顾名思义,硬件网络架构是 " 硬件 "、" 网络 "以及" 架构 "三者的交叉!那么:
什么是硬件网络架构?包含哪些内容?
笔者认为硬件网络架构描述硬件组件或物理设备之间的逻辑连接的网络结构,如描述网络总线类型、每种网络类型的通信等。
接着我们来看看功能网络。
在功能网络中,除了" 逻辑功能架构 "外,功能网络与软件交集的部分便是 "软件功能网络",与硬件交集的部分便是 "硬件功能网络"。那功能网络需要做什么事情:
笔者认为,在分布式系统中,需要通过功能网络描述来进行硬件与软件设计之间的分离;系统分解;以及通过将整个系统划分可管理的块来了解整个系统!
同理,在通信网络中,我们可以看到 "软件通信网络" 与 "硬件通信网络"
可能有的朋友会问,CAN、以太网在哪?笔者认为,它们大部分的概念是在 " 通信网络 "中,当然,还有朋友可能抠字眼说:CAN标准,以太网标准文档属于通信的范畴,这里就不做详细的讨论了!
当然,CAN、以太网等是一种通信网络,必然也有覆盖 " 通信网络架构 "这一层概念,所以,笔者认为,类似于这种总线通信,都是狠角色,脚踏四只船,"软件"、"硬件"、"架构"、"网络"均有涉及!
CAN、车载以太网等更多的是属于车内网,跟车内网并行的还有车云网、车际网等,这里就不做过多的解释!这也是笔者将 "车内网" 竖着放的原因!(连载文章,请关注下一篇)