【论文阅读】CAN网络中基于时序信道的隐蔽认证算法

文章目录

  • 摘要
  • 一、引言和动机
    • A 相关工作
  • 二、背景及实验设置
    • A 以前工作中的时钟偏差和局限性
    • B.最坏到达时间
    • C.安装组件
  • 三、优化流量分配
    • A.问题陈述
    • B.优化帧调度
  • 四、协议和结果
    • A.主协议
    • B.对手模型
    • C. 优化流量和单一发送者的结果
    • D.多发送方情况和噪声信道

摘要

以前的研究工作已经认可了使用延迟和时钟偏移来检测在CAN总线上通信的入侵或指纹识别控制器。最近,CAN帧的定时特性也被用于建立一种隐蔽通道进行密码认证,通过这种方式巧妙地消除了在数据帧短负载中需要密码材料的需求。然而,这种方法的主要缺点是现有的CAN总线流量上可以实现的安全级别有限。在这项工作中,我们通过依赖优化算法来调度CAN帧并在优化的CAN流量上部署隐蔽通道,从而显著提高了安全性。在实际的总线分配下,我们能够从每个帧中提取3-5位的认证数据,这导致了一种有效的入侵检测和认证机制。通过累积连续几个帧的隐蔽通道数据,我们可以实现与当前现实世界需求相符的更高安全级别。为了证明我们的方法的正确性,我们在汽车级控制器(即Infineon Aurix)上进行了实验,并使用行业标准工具(即CANoe)进行了总线测量。

一、引言和动机

在模拟环境中对车辆总线进行攻击的小型演示,最早可以追溯到[1]的工作。最近的一些工作,如[2]–[4]等,已经明确证明了攻击现实世界中的车辆的可行性。车载网络的大部分安全问题源于控制器局域网(CAN)没有内在的安全机制这一事实。CAN总线能够在单个帧中传输多达8字节的数据,最大位速率为1Mbit/s。CAN帧的结构如图1所示。为了避免冲突,基于ID字段进行仲裁,该字段使用帧的前11位(如果使用扩展标识符,则为29位),而15位CRC(循环冗余校验)有助于识别传输错误。CAN还使用比特填充来避免长序列中相同值的比特同步丢失,即在连续五个相同位之后,引入一个相反值的额外位以强制转换。研究界已经提出了数十种保护CAN总线的方案。正如预期的那样,其中大多数依赖于使用密码消息认证码(MAC)(例如,[5]–[7],[8]或最近[9]和许多其他)。但由于CAN帧的大小有限,即64位,因此在文献中通常讨论了两种选项:截断MAC以便它们与合法数据一起适应帧内或将MAC作为单独的数据包发送。最后一个选项会创建额外的问题,因为每个常规帧都发送一个新的认证帧会增加总线负载,并且无法满足我们稍后在分析中讨论的实时需求。第一个过程,MAC截断,得到了AUTOSAR [10]架构中引入的较新的安全规范的支持,该规范要求为CAN帧提供24位的安全性。然而,从64位CAN帧有效载荷中保留24位用于安全性可能不太方便,因为这代表了37%的有效载荷。此外,标准规定新鲜度参数需要8位,导致32位预留用于安全目的,因此50%的帧变得无法用于常规数据。总的来说,似乎将密码材料包含在CAN帧中仍然有些问题,因为CAN的小数据包大小很难应对所需的安全级别。第三种选择是使用替代物理层(例如CAN+ [11])隐藏认证位,这是CAN的一种扩展。这种方法在[12]中提出。然而,车载设备中不存在CAN+收发器,而且由于向CAN-FD的迁移,汽车工业似乎不太可能采用CAN+。

在这里插入图片描述
上下文和动机。在最近的工作中,我们通过设计一种隐蔽的定时信道用于密码认证,以上下文和动机。在最近的工作中,我们通过设计一种隐蔽的定时信道用于密码认证,以建设性的方式利用了定时器-计数器电路的精细控制[13]。这个提议的优点在于允许认证数据被承载在CAN帧有限的64位有效载荷之外。然而,[13]中工作的问题是在现有的CAN总线流量上放置隐蔽通道时,性能会显著下降。在[14]中可以找到一种基于帧到达时间创建隐蔽认证通道的类似方法,但实现的安全级别非常有限,每个CAN帧只有1个隐蔽比特。此外,[14]中的认证仅针对发送方,而不是帧的内容。
在这里插入图片描述
通过优化CAN通信,我们的方法可以在隐蔽通道上获得更高的数据速率。当然,在多个发送者的情况下,这需要发送者之间的时间同步。传统的CAN实现假设节点的异步行为和缺乏共同的时间基准。然而,根据[15]的AUTOSAR标准规范,来自行业的最新方法为所有三种主要的车载总线(以太网、CAN和FlexRay)提供了时间同步的支持。最近的AUTOSAR关于CAN上的时间同步的规范,对时间主设备、网关甚至从设备的最大精度提出了警告,将其设定为10μs,即[16]的第4.1节。这表明我们的方法的需求是现实的,并与行业当前的趋势一致。在TT-CAN(Time-triggered CAN)的时间触发通信中,时间同步也是必需的,因此在现实世界的应用中存在。

设计意图。我们创建一个隐蔽的身份验证通道,该通道保持CAN帧的位不变,并通过依赖有效的帧调度来提高通道的数据速率。所处理的场景在图2中简要概述。为了避免使图形过载,只描绘了两个ECU(电子控制单元)和一个外部设备(可能是一个CANcase),但我们的场景对ECU或外部设备的数量没有限制。ECU以通常的方式在预定义的周期i, i = 1. . n(对于总线上定义的每个ID,我们假设有n个这样的ID)进行消息通信,其中添加了一个小的漂移i和一个小型的身份验证延迟ξ(更多详细信息将在后续部分给出)。在CAN总线上创建隐蔽身份验证通道的主要优点如下:

  • 它不会消耗帧数据字段中的比特,该字段限制在64位。
  • 它在携带数据的帧中隐蔽地嵌入认证数据,而无需额外的认证帧。
  • 由于认证数据隐藏在延迟中,因此它不会增加总线负载。

我们为CAN上的消息认证创建的秘密通道必须被视为与基于MAC的常规解决方案相辅相成,而不是与之竞争。显然,使用常规MAC更为高效,但不可否认的是,数据字段(64位)的有限大小使得包含此类MAC变得困难,而MAC截断是唯一的选择,这反过来又会显著降低安全级别(因为我们稍后会讨论,所以添加额外的认证帧可能是不现实的)。相反,秘密认证通道可以在不影响现有流量的情况下带来额外的保护层。事实上,我们讨论的优化流量分配直接改善了真实帧的最坏情况到达时间,因为总线上发生了更少或希望没有的帧冲突。比较秘密通道和常规、预期通信通道的容量将是具有偏见的,因为前者建立在后者微小的物理波动之上(不足为奇的是,秘密通道确实具有较小的数据速率)。

在我们的提案中,帧认证工作的主要概念是:在延迟中编码认证数据并添加针对帧时序的优化。这些细节可以在图3中找到。CAN帧由标识符字段ID表示,以循环方式到达总线(为了避免过于复杂,我们省略了数据字段,但在消息认证码中使用了ID)。虽然事件帧也可能存在于CAN总线上,但CAN流量的大多数性质是循环的,因此我们专注于对此类流量进行身份验证。我们为三种不同的延迟(10ms、20ms和50ms)描绘了标识符。每个延迟都添加了一个漂移ξ,它以隐蔽的方式携带认证数据。原则上,ξ是加密消息认证码(MAC)的最后一字节。该MAC在整个帧的内容上计算,并且对于每一帧来说都是唯一的,假设适当的新鲜度参数被使用,例如时间戳或计数器。为了避免过于复杂,我们在图形轮廓中省略了这些细节。由于CAN流量分配不当,可能需要同时发送多个数据包(灰色高亮的数据包所暗示的那样)。这些重叠可能从传输的角度来看不是问题,但是它们会影响预期到达时间和因此覆盖通道的数据速率。为了避免这种情况,我们使用额外的延迟i,i = 1. . 3来以最佳方式分配流量并保持帧间距离最大。图4提供了关于为什么未优化的流量对秘密时序通道来说是问题的更清晰的图像。图的左侧显示了记录在现实世界车辆中的帧之间的传输时间。尽管整个流量是循环的,但帧之间的传输时间是嘈杂的,并且与预期到达的偏差很常见。为了提高性能,我们进一步依赖优化算法。图4右侧显示了经过优化后的传播时间。相同的总线负载和相同的ID数量被使用,但传输时间现在遵循一个更清晰的模式。如预期并由实验证明,秘密通道将比优化过的流量具有更高的比特率。

A 相关工作

在计算机网络中,隐蔽定时信道已经得到了很好的探索,例如[17]–[19]。但是,除了上述最近的论文[13]和[14]之外,我们不知道这种信道是否用于保护车载通信。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
表I尝试对CAN总线上的现有两个隐蔽定时信道提案[13]和[14]进行比较总结。我们试图以一种统一的方式从TACAN [14]和INCANTA [13]中提取比较结果。这两个工作都使用通过改变单个ID的到达时间来创建的信道进行实验。特别是,TACAN [14]使用在10ms广播的载体ID并编码了到达时间中的1位信息,而INCANTA [13]使用在100ms广播的载体ID并编码了5位信息。为了增加数据速率,TACAN [14]还使用了最低有效位信道,通过该信道修改数据字段的最后一位,但这并不是定时隐蔽信道,因此我们没有将其包含在此分析中,只关注TACAN的到达时间间隔(IAT)版本。对于[14],误码率(BER)小于1%,提到这个BER值是通过近似超过4帧获得的(否则BER可能会显著高达40%左右)。对于[13],BER值为1.75%,适用于高优先级ID轻松赢得仲裁的情况。在吞吐量方面,[14]报告为22.5 bps,我们可以计算[13]的数据速率为57 bps,尽管其ID的周期性较慢,即[13]为100ms vs. [14]为10ms,但[13]使用的ID漂移更高,即220ns,公差为20,000ns,这导致每条消息提取约5位。无论是[14]还是[13]都没有用多个ID进行隐蔽数据的实验,而且由于较低优先级ID的到达时间的不可预测性增加,性能不太可能随着ID数量的增加呈线性扩展。相反,在CANTO中,我们使用来自总线的所有ID作为定时隐蔽信道。来自CANTO的最佳流量分配使我们能够实现所有ID的相同结果,从而实现大约5047 bps的数据速率和0.95%的误码率,我们在实验部分稍后会展示这一点。

尽管如此,许多近期的研究工作都集中在使用帧到达时间,即我们用来创建隐蔽通道的延迟,以检测入侵,例如[24]和[25]。通过使用布隆过滤器[26],帧到达时间也与帧内容相结合,以过滤[27]中的恶意活动。最近,帧周期性被利用来提取时钟偏差,这由于振荡器中的物理缺陷而在[28]中用于为每个设备创建独特的指纹。这为CAN节点的物理指纹识别提供了空间。十多年来,时钟偏差的使用已被[29]的工作探索用于对计算机进行指纹识别,并且不出所料,它也应用于智能手机[30]。不幸的是,基于时钟偏差的识别机制在嵌入式设备的精细粒度的时间触发中断控制下变得无效,这使它们有可能伪造它们的时钟偏差,如[31]所示。所有这些工作都在利用控制器中时钟电路的精度,这也是我们在这里提出的建议的核心。

在这里插入图片描述
为了从数据字段中节省比特,其他工作已经建议使用标识符字段,即[32]、[33]、[34]和[35],但这需要特别小心,因为标识符字段对于仲裁至关重要,也用于过滤目的。另一种在不损害CAN帧的比特的情况下识别发送方的方法是使用物理信号特性,例如[36]–[38],但这些方法可能容易受到总线阻抗的小变化的影响。

二、背景及实验设置

这部分内容简要概述了CAN网络上的延迟和时钟偏移。尽管如此,我们还是讨论了先前关于CAN总线隐蔽定时信道的工作中的局限性。然后,我们描述了我们设置的组成部分。

A 以前工作中的时钟偏差和局限性

在图5中,我们展示了当三个ECUs以固定的时间间隔δ广播时,时钟偏差如何累积。由于时钟精度问题,尽管延迟δ是固定的,但每个ECU测量的时间实际上是δ1、δ2和δ3。如果第一个ECU测量从第二个和第三个ECU接收到的帧的到达时间,那么这些延迟就会累积。结果是一个代表时钟偏差的斜率。图6显示了在一个Infineon板上测量的延迟与CANoe之间的图形描述,这是另一个Infineon板周期性广播帧的情况。这个描述是根据我们之前的工作[13]进行的。延迟被强制设置为±100、±250、±500个时钟滴答(1个滴答是10ns),因此在图片中可以看到几个斜率。我们在CAN总线上创建隐蔽通道的前期工作的主要限制是现有的流量(分配不良)阻碍了隐蔽通道的数据速率。图7显示了根据[13]记录的四个Infineon TriCore板上没有(左)和有(右)现有网络流量时的延迟变化(延迟表示为预期到达时间和记录到达时间之间的分数)。在存在流量的情况下,一些帧会显著延迟到达,使它们与随机延迟发送的帧无法区分。这些延迟会导致入侵检测机制的误报。正如我们在这项工作中所讨论和展示的,流量优化是解决这个问题的唯一方法。

B.最坏到达时间

CAN消息的最坏到达时间对于评估CAN网络中特定消息周期分配的可行性至关重要。
在这里插入图片描述
请注意,由于其基于ID的仲裁机制,低优先级ID的到达可能会被高优先级ID显著延迟。为了证明我们方法的可行性并概述总线的带宽限制,我们现在简要介绍一下CAN调度性的背景。为此,我们将使用[39]中提出的理论框架。特别是,我们使用[39]中定义的消息m的繁忙时间段t和最坏排队延迟w:
在这里插入图片描述
我们保持[39]中的原始符号,并将m解释为定义其优先级的消息的ID。在先前的关系中,Bm是由较低优先级消息传输引起的阻塞延迟,Jk是消息k的排队抖动,Tk是消息k的周期,Ck是消息k的传输时间,q是消息m的实例,τbit是总线上传单个位的时间。通过hp(m),我们表示具有高于m的优先级的消息,即ID较低的消息。t和w都通过n的递归来解决(更多详细信息请参阅[39]),直到t和w的值收敛,即t n+1 m = t n m 和 wn+1 m (q) = wn m(q)。

我们现在展示通过将先前的方法应用于我们特定的40个ID分配所获得的结果。我们选择了ID及其周期性,以获得40%的总线负载,这是真实世界车辆的特征。这些ID的周期为10、20、50和100ms(在即将到来的部分中给出了对此分配的更多评估)。我们固定了以下参数,这些参数是我们设置的特征:τbit = 2μs用于我们使用的500kbps CAN,Ck = 270μs,这是总线上最长消息的持续时间(根据[39],这是计算为(55 + 10B)τbit,其中B是消息中的字节数),Bm = 270μs,除了优先级最低的ID之外,Bm = 0。图8显示了左侧的繁忙期和右侧的每个40个ID的最坏情况排队延迟(蓝色圆圈)。一些ID的值被描绘为标签,但这些值并不重要,这些值只是被分配得更快的ID具有更高的优先级,并且对于相同的周期性连续编号,以便我们可以更轻松地直观跟踪它们。然后我们用红色圆圈描绘了当ID数量翻倍时这些值的变化,例如我们需要发送带有认证数据的额外帧的情况。在原始实例中,有40个ID的情况下,广播时间为10ms的ID的总线繁忙期将在0.2-1.2ms之间,而广播时间为100ms的ID将在5.4-8ms之间。排队时间保持在0.52-11.96ms的范围内。对于一个周期为100ms的帧来说,11.96ms的漂移可能有点高。然而,当ID数量翻倍时,繁忙期和最坏情况排队延迟增加的范围为0.52-34.06ms,最坏情况下增加了3倍。通过使总线负载翻倍,最坏情况到达时间的增加高于预期的两倍,这表明添加额外的帧几乎不是替代方案。优化流量分配也将在这方面有所帮助。
在这里插入图片描述

C.安装组件

我们使用AURIX TC224 TFT应用套件实施和评估流量分配的优化。开发板具有一个运行频率高达133 MHz的TC224 32位TriCore CPU,提供1MB的FLASH内存和96kB的RAM内存。我们的基于TriCore的实施所传输的CAN帧使用CANoe(一种用于分析和测试汽车网络的软件工具)进行记录。为了实现这一点,CANoe运行的PC通过VN CAN到PC适配器与开发板接口,如图9所示。离线使用Mathematica分析记录的跟踪。

根据描述的机制,由于CAN帧必须在特定的时间槽中传输,节点需要实现一个保持时间的功能。我们在TC224上使用捕获/比较单元6定时器(CCU6)模块实现了这个功能,该模块被配置为每1微秒触发一次中断,作为我们本地时钟的基本滴答。在几次实验中,我们使用计算MAC值的最后7位来表示认证延迟。此延迟添加到消息周期时间加上 ,当足够的CCU6定时器的滴答过去时,消息将在总线上发送。

在这里插入图片描述
所有消息数据字节、配置的消息周期时间和每个消息选择的 值都在MultiCAN+模块中配置。MultiCAN+模块还负责将帧数据以指定的波特率为500 kbps发送到CAN收发器。

执行初始硬件设置后,为每条消息计算初始MAC值。在运行时,基于CCU6定时器中递增的计数器值,发送所有帧的周期时间和 值,但如前所述会有一个小的延迟。帧交付将在CCU6定时器的ξ个滴答过期后发生。每次帧交付后,消息计数器递增,并根据消息数据和消息计数器计算新的MAC值。

三、优化流量分配

A.问题陈述

B.优化帧调度

四、协议和结果

A.主协议

B.对手模型

C. 优化流量和单一发送者的结果

D.多发送方情况和噪声信道

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/190255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下为可执行文件添加图标

Ubuntu 18.04上使用Qt5.14.2创建一个简单的Qt Widgets项目test,添加2个Push Button按钮,点击分别获取github和csdn地址,在mainwindow.cpp中添加的代码如下: #include "mainwindow.h" #include "ui_mainwindow.h" #inclu…

从零开发短视频电商 在AWS上用SageMaker部署开源模型并用Java SDK调用

文章目录 1.创建AWS账户2.登录AWS3.创建域4.部署模型方式一 使用JumpStart可视化界面部署内置的模型方式二 采用python脚本部署私有模型5.调用模型AWS Java SDK调用Http调用6.监控7.自动扩缩容1.创建AWS账户 需要准备好邮箱一个,支持visa功能的信用卡一个。然后到aws上自己去…

电梯安全远程监控系统解决方案

一、方案背景 随着万丈高楼的平地起,电梯也成为了我们出入高层建筑最常用的工具之一。面对电梯数量的不断增加,电梯安全事故也是相继频发,因此关于电梯的安全运行就越来越受到社会各界的关注。电梯的使用在给人们出入高层建筑带来便利的同时&…

分布式ID生成框架Leaf升级踩坑

背景: 在项目中需要一个统一的拿单号等唯一ID的服务,就想起了之前用到的leaf,但是因为项目要求,leaf的版本不符合,需要做一些升级 项目地址:https://github.com/Meituan-Dianping/Leaf 升级点&#xff1…

STM32-(串口通信)

什么是通信? 数据交互信息传递条件:两个端 发送端 一、通信基础知识 1、时钟信号划分 同步通信:通信双方根据同步信号通信,比如双方有一个共同的时钟信号(SPI全双工 I2C半双工) 异步通信:通信双方有自己独立的系统时…

【解决方案】基于物联网表计的综合能源管理方案

安科瑞顾强 为加快推进国家“双碳”战略和新型能源体系建设,努力实现负荷准确控制和用户精细化管理,按照“政府主导、电网组织、政企协同、用户实施”的指导原则,多地成立市/县级电力负荷管理中心,包括浙江宁波、慈溪、辽宁大连、…

Java——》JSONObjet 数据顺序

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

1_企业架构之LNMP

公司企业架构LNMP(单点服务器部署) 学习目标和内容 1、能够描述项目流程 2、能够了解PV、QPS、DAU等参数 3、能够实现服务器基本环境配置 4、能够部署配置MySQL生产环境 5、能够部署配置Nginx生产环境 6、能够部署配置PHP生产环境 7、能够理解PHP-FPM和Nginx关联关系 8、能够配…

思维模型 逆向思维

本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。弱者道之用反者道之动。 1 逆向思维的应用 1.1 历史典故 1 曹冲称象 这个故事讲述的是曹操的儿子曹冲如何利用逆向思维解决了称大象重量的难题。曹冲没有直接去称大象的重量,…

海云安谢朝海:开发安全领域大模型新实践 人工智能助力高效安全左移

2023年11月29日,2023中国(深圳)金融科技大会成功举行,该会议是深圳连续举办的第七届金融科技主题年度会议,也是2023深圳国际金融科技节重要活动之一。做好金融工作,需要兼顾创新与安全,当智能体…

在表格中显示字典的内容(根据后端返回的数据)vue3

进入页面,调接口,后端返回数据,indexType为0或者1,要用这个数据显示字典的内容 用插槽拿到数据 写一个函数,在模板中使用 const { proxy } getCurrentInstance(); // 字典-指标类型 const { index_type } proxy.u…

谈谈Listener

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 Tomcat三大组件&#x…

分享82个节日PPT,总有一款适合您

分享82个节日PPT,总有一款适合您 82个节日PPT下载链接:https://pan.baidu.com/s/1boDTl3PiHFXLJ890CoUfJA?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不易。…

windows配置go调用python的编译环境

go是支持调用python代码的,之前写了几篇linux的部署教程,因为觉得windows的不复杂就没有写,结果今天新部署一个Windows的环境,有些步骤想不起来了,好记性不如烂笔头,还是记录一下吧。 这些是之前写的linux…

CTF-虚拟机-QEMU-前置知识-操作流程与源码阅读

文章目录 总览内存PCI设备PCI配置空间前64个字节对应源码Memorry空间的BARIO空间的BAR MMIOPMIOIspci访问PCI设备配置空间中的Memory空间和IO空间MMIOPMIO QQM(qemu object model)简洁概要将 TypeInfo 注册 TypeImpl:ObjectClass的初始化&…

SAS聚类分析介绍

1 聚类分析介绍 1.1基本概念 聚类就是一种寻找数据之间一种内在结构的技术。聚类把全体数据实例组织成一些相似组,而这些相似组被称作聚类。处于相同聚类中的数据实例彼此相同,处于不同聚类中的实例彼此不同。聚类技术通常又被称为无监督学习&#xff0…

深入了解Vue.js:构建现代、响应式的前端应用

文章目录 1. Vue.js简介1.1 安装Vue.js 2. Vue的核心概念2.1 数据驱动2.2 组件化2.3 生命周期钩子 3. Vue的特性3.1 响应式数据3.2 模板语法3.3 组件通信 4. 示例项目结语 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 &#x1…

Jmeter性能测试 —— 压力模式

压力模式 性能测试中的压力模式有两种。 第一种是并发用户模式(虚拟用户模式)并发用户是指虚拟并发用户数,从业务角度,也可以理解为同时在线的用户数。 从客户端的角度出发,摸底业务系统各节点能同时承载的在线用户数…

pytorch中Conv1d、Conv2d与Conv3d详解

1 卷积介绍 1.1 什么是卷积 卷积(convolution),是一种运算,你可以类比于加,减,乘,除,矩阵的点乘与叉乘等等,它有自己的运算规则,卷积的符号是星号*。表达式…

Linux Makefile的认识及CMake的使用

1 Makefile的作用 Makefile 指的是一个叫 Makefile 的文件,里面提前写了一些指令。每次要自动化的完成一个比较复杂项目的自动编译用的时候,就在命令行输入“make”命令Makefile使用。使用Makefile可以 “智能” 的知道: 1 哪些文件需要先进行编译。 2 当某一文件在某次mak…