ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TC377 Flash分区与HSM安全机制:从Bootloader到安全启动的完整指南

TC377 Flash分区与HSM安全机制:从Bootloader到安全启动的完整指南 1. 先把TC377的存储器家底摸清楚Flash到底是怎么组织的做英飞凌AURIX TC3xx系列开发尤其是TC377这颗芯片第一步就要跟它的Flash存储体系打交道。很多人上来就写代码、调外设结果一涉及到Bootloader升级、标定数据存储或者HSM固件刷写就发现对Flash的认知停留在一块可以擦写的ROM这种级别后面全是坑。TC377属于AURIX TC3xx家族里的中高端型号三核TriCore架构主频最高300MHz面向的动力总成、域控制器、BMS这类应用对Flash容量和安全性要求都不低。它内部Flash分两大块Program FlashPF和Data FlashDF由**DMUData Memory Unit**统一管理。DMU就是Flash控制器的角色负责擦写、校验、读保护、写保护、ECC检查这些底层操作。PF是放代码的主要阵地。TC377的PF总容量大约6MB划分成多个Bank每个Bank内部又分成若干个逻辑扇区Sector。不同型号的TC3xxBank数量和扇区大小不完全一样TC377我记得是分了几个独立的Bank每个Bank里扇区大小不完全相等有16KB、64KB、1MB甚至更大的。这种非均匀扇区划分恰恰是给不同用途准备的小扇区适合放Bootloader这种需要精细管理的代码大扇区适合放Application主体代码减少管理开销。DF则是用来存数据的TC377的DF分为DF0和DF1两块通常DF0放EEPROM仿真数据DF1可以放标定或者一些关键参数。DF的擦除粒度比PF小适合频繁读写的小数据块。很多人不理解为什么有了PF还要DF直接拿PF存数据不行吗可以但代价很大PF扇区大擦写一次要整块擦对寿命和效率都不友好DF就是专门为数据存储优化的小粒度擦写配合英飞凌的EEPROM仿真库能实现类似EEPROM的按字节寻址和磨损均衡。地址映射这块也容易绕晕。TC377的Flash有两种地址视图本地地址比如从0xA0000000开始的PF映射区和全局地址用于DMU访问的地址空间。CPU取指、DMA访问通常用本地映射地址而Flash擦写操作时命令参数里填的地址往往是基于Bank地址或者逻辑扇区地址的。我见过不止一个同事在调用Flash驱动时把本地映射地址直接塞进去结果擦了个寂寞或者把相邻扇区擦没了。这里的关键是擦写操作要使用以Bank为单位的地址而不是你代码运行时用的映射地址。UCBUser Configuration Block也是Flash体系里绕不开的一块。TC377在PF里留了若干个UCB区域专门存放用户配置信息比如启动模式、HSM配置、读保护级别、CRC校验值等。UCB的编程有专门的命令序列而且校验失败了芯片会怎么处理跟UCB里的配置有直接关系。后面讲HSM和SIL2的时候UCB还会再出现。2. 分区设计不只是画个示意图Bootloader/APP/HSM/数据的边界怎么划摸清了TC377的Flash物理结构下一步就是做分区规划。这一步做得好不好直接决定后续OTA、安全启动、功能安全认证能不能顺利推进。2.1 典型分区布局小扇区给引导大扇区给应用我经手的几个基于TC377的项目分区思路高度一致但也有不少细节值得单独拿出来讲。以6MB PF为例常规规划是区域用途地址段扇区大小说明BootloaderPF0起始段16KB/64KB小扇区启动引导、Flash驱动、刷写服务APP代码PF0/PF1主区域1MB大扇区应用主程序HSM固件区固定分配一段专用存放HSM固件和密钥、配置数据标定/参数区独立Bank按需可在线更新的标定数据UCB固定区域小扇区启动配置、安全配置Bootloader放小扇区是硬道理。因为Bootloader要做Flash擦写操作万一刷写过程中断电了Bootloader自身所在的扇区最好不受影响而且小扇区方便做AB备份或者版本标记。如果Bootloader放在一个1MB的大扇区里每次升级引导代码都要整块擦风险高不说时间也长。APP区用大扇区反而更划算。1MB的扇区擦写一次时间虽然长但APP整体刷写本来就是要整块更新的大扇区减少了对扇区表的维护成本。如果你有AB分区做OTA回滚那就需要规划两块几乎等大的APP区这时候扇区大小和Bank边界的对齐就很重要了。我建议做OTA方案的同学先把TC377的Bank边界画出来再在上面切AB区别把A区一个扇区跨到B区的边界上不然擦写逻辑会写到你怀疑人生。2.2 地址错位、Bank边界与同步擦写的实战细节TC377支持双Bank同步擦写这个概念很多人听过但没用明白。所谓双Bank就是DMU可以同时对一个Bank做擦除同时对另一个Bank做读或者编程操作。这对OTA来说太关键了刷写App的时候App正在跑总不能把正在执行的Flash区域给擦了。如果Bootloader和APP在同一个Bank里在线升级APP时代码所在的Bank是不能被擦的必须先把执行环境切换到RAM里或者保证Bootloader和APP在不同Bank。TC377的多Bank结构就是为这个设计的——Bootloader放Bank0APP放Bank1这样APP升级擦写Bank1时Bank0里的Bootloader照常运行刷写服务不断。同步擦写还有个前提你只能同时对不同Bank发命令同一个Bank内的操作必须串行。有次项目里测试反馈说在线升级偶尔卡死查了半天发现是Flash驱动里对同一Bank的两个扇区连续发了擦除命令。DMU的执行队列把命令吃进去了但硬件实际是串行处理的时序上没有做同步等待导致后续状态判断错乱。后来统一改成发命令 → 查询状态寄存器 → 等完成 → 再发下一条的模式这个卡死问题再没出现过。2.3 Data Flash的分区与EEPROM仿真DF区域的分区很多人容易忽略。TC377的DF包含DF0和DF1DF0通常在EEPROM仿真库的管理下运行。英飞凌官方的EERPROM仿真库会在DF0内部维护两个或更多数据块通过双块备份和状态位来保证数据一致性。你要是自己想当然地把DF0切出一块来直接存数据完全绕开仿真库那掉电时写到一半的数据一致性就没人帮你保证了。我见过一个BMS项目工程师为了省事直接在DF1里定义了一个结构体每次上电就修改一个字节做累计计数想着DF也能按位写。结果100万次擦写寿命没跑满DF1就先挂了整车上电后数据全乱。DF虽然比PF寿命长但也不是无限的而且DF1这种区域做频繁计数磨损均衡完全没做挂掉是必然的。所以我的建议是持续变化的数据老老实实走EEPROM仿真库只有那种很少变化、但要求断电保存的关键参数比如硬件配置信息、防盗锁止状态才考虑直接放DF1。3. HSM到底是个啥从SHE到Evita Full的能力边界HSMHardware Security Module在TC377上不是一个软件概念而是芯片内部一个独立的硬件子系统。很多做应用层的工程师一听到HSM就以为是上层软件加个加密库。完全不对。TC377内部的HSM模块包含了一个独立的SHE内核或者更完整的密算引擎、专用的RAM和Flash区域还有和主系统隔离的总线接口。3.1 HSM硬件架构与安全域隔离HSM在TC377里运行在自己的安全世界里主核TriCore CPU0/1/2跑在普通世界里。硬件层面做了隔离HSM的专用Flash和RAM区域主核在默认配置下是物理访问不到的反过来HSM可以访问主核的Flash也就是说HSM能读主核的代码区但主核不能读HSM的区域。这个单向访问特性是安全启动和固件保护的基础。HSM内部除了密算引擎还运行着一个独立的固件——由英飞凌提供的HSM固件包可以是完整版的支持SHE扩展功能或者轻量级的。HSM固件工作在一个微内核之上有自己的任务调度和通信机制。这个固件本身也要放在Flash里而且上电时要被BootROM校验后面讲安全启动会展开。TC377的HSM能力从功能安全的角度看对标的是Evita Full级别的能力支持AES-128/256、RSA、ECC、Hash、HMAC、真随机数生成。跟简单的SHE比Evita Full多了非对称算法和更灵活的密钥管理。在汽车里做V2X通信、安全OTA、SecOCSecure Onboard Communication这些场景非对称算法几乎是必须的所以TC377这颗料能撑起相对完整的安全架构。3.2 主核与HSM怎么通信Mailbox机制HSM不是一个孤岛它需要和主核配合。两者通信走的是Mailbox和共享内存的机制。主核把要做的操作比如用密钥K1做一次AES加密、帮我算个HMAC打包成一条命令放进共享内存然后写Mailbox寄存器通知HSM。HSM处理完会写响应数据到共享内存并通过中断通知主核。这里有个性能上的坑很多人没算Mailbox通信有延迟HSM处理一次命令也要时间。如果你在高频控制循环里调用HSM做对称加密比如每毫秒一次HSM的吞吐率会成为瓶颈。我实测过在TC377上通过Host接口调HSM做AES-128-CMAC单次往返大约要几十微秒级别具体跟HSM固件版本和时钟配置有关。做SecOC算MAC时一定要提前评估报文频率和HSM开销预留余量。有些项目为了赶进度SecOC的MAC计算直接在主核上软件实现了HSM闲置这属于合规性隐患后面做安全审计很麻烦。3.3 密钥/配置存储与HSM专用FlashHSM固件、密钥、安全配置数据都存在HSM的专属Flash空间里这个空间在物理上与主核Flash交织在一起都在PF内部但是通过DMU的访问控制做了隔离。主核代码里哪怕你写一句读地址0xAFxxxxxx去访问HSM区域结果不是读到垃圾数据而是触发总线错误或者直接被硬件block掉返回全F或者全0。密钥的管理是整个安全体系的核心。TC377里密钥不以明文形式暴露给主核。你在应用层做安全通信说用密钥K做AES实际是告诉HSM用slot N里的密钥K做AES至于K的真身在HSM的Flash里以密文形式存储由HSM内部的硬件加密引擎解密后使用主核从头到尾碰不到明文密钥。这也是SHE/HSM体系从设计上就保证的密钥不出安全边界。我实际调试的时候最常踩的坑是HSM固件版本和主核侧驱动版本不匹配。英飞凌的HSM固件包和MCAL里的Crypto驱动是有对应版本的混用有时能编译过但运行到具体算法时返回错误码。而且HSM固件升级本身有严格流程需要安全认证别想着随便刷。4. 安全启动链与Flash完整性的工程落地谈到HSM必然绕不开安全启动。安全启动是一个完整链条从芯片上电复位开始逐级校验、逐级放行最终保证跑起来的APP是被信任的。TC377的这套链条设计得非常典型可以拆成四到五级来看。4.1 从BootROM到UCB配置的信任根建立TC377上电后第一步是芯片内部固化的BootROM执行它不可修改是信任根。BootROM的职责是先检查UCB区域里的配置确认启动模式比如是从Flash启动还是从调试接口启动、是否允许外部调试器连接然后加载并校验HSM固件。HSM固件的校验是BootROM做的校验通过后HSM自己运行起来后续的层级校验就交给HSM了。HSM从自己的安全世界出发去校验主核的Bootloader。这一级校验通常用的是非对称算法Bootloader镜像带一个签名HSM用预先烧录的公钥去验签验签通过Bootloader才被允许执行。从Bootloader到APP的校验策略就灵活多了。常见做法有两种一是Bootloader验APP的签名对称或非对称验过才跳转二是APP启动后再把APP的关键段交给HSM做运行时完整性检查。前者是标准做法后者更多用于高安全等级场景。4.2 实际项目里的校验链配置与调试经历我在一个域控制器项目上调安全启动链的时候遇到过一个非常典型的“校验成功但跳转失败”问题。现象是这样的HSM验签通过了Bootloader也置好了跳转地址但一跳转到APP就进Trap。排查了大半天最后发现是Bootloader里对APP入口地址的配置用的是Absolute地址但链接脚本里APP的入口符号解析出来的地址被某种方式重定位过了两者差了整整0x400字节。也就是说校验函数确认的镜像范围和实际执行的入口点不在一个地方。这个问题的根因是链接脚本的错位和HSM没有关系但暴露了一个关键工程要点安全启动链路验证的边界和跳转点必须严格对齐。你校验的是整个APP镜像段跳转入口必须是这个段首地址里存放的入口点。任何一点偏移轻则启动失败重则留下可利用的漏洞。还有一次是UCB里的启动模式配置。开发阶段为了方便调试把调试接口的解锁配置设为了允许调试。交付前做安全加固时要把这个配置改成禁止调试需要重新编程UCB区域。编程UCB用的是专用命令而且对时序要求很严格我们当时在产线上遇到一次编程UCB后校验失败整颗芯片进入了一个奇怪的状态无法启动。后来对照User Manual靠BootROM的恢复机制救回来了。这个教训是UCB编程前务必确认封装库函数和时序正确而且要有变砖恢复的标准作业流程比如通过PMS的复位配置进入BootROM恢复模式否则产线批量操作时风险很高。4.3 Flash诊断SIL2等级下对Flash完整性的要求TC377的应用场景很多要求功能安全比如IEC 61508里的SIL2等级。如果做SIL2相关的开发Flash的诊断机制是绕不开的话题。为什么Flash需要诊断因为Flash本身可能发生细微故障比如位翻转bit flip、地址线短路、数据线干扰。在功能安全标准看来随机硬件失效可能导致Flash内容被破坏或读取错误如果没有诊断机制系统就会在错误数据上运行后果可能是灾难性的。TC377的Flash控制器内置了**ECCError Correction Code**机制。ECC能检测并纠正单比特错误检测出双比特错误。这个机制是硬件自带的不需要软件干预。但在SIL2设计里你不能完全依赖硬件ECC软件层也要有配合。结合SIL2的要求常见做法是周期性地对Flash关键区域做完整性检查。比如通过DMU读出Flash内容基于整段数据计算CRC与上电时算好的参考CRC对比。这个过程可以放在后台任务里优先级适当放低但周期要有上限否则失效覆盖率算不过去。还有一种做法是复制关键代码段到RAM中执行通过执行路径的冗余来降低Flash失效的风险。对于安全等级更高的应用这两种都会上。我参与的项目里SIL2设计文档中专门有一节写Flash诊断机制里面至少包括三点ECC错误状态的读取与上报流程上电时读DMU的错误寄存器看有没有积累的ECC错误、关键Flash区的周期性CRC检查周期一般几百毫秒、以及CRC结果异常时的降级策略比如进入安全状态禁止输出。5. 权限博弈HSM如何守住Flash的读写边界HSM对Flash的守护最终要落到“权限”这两个字上。TC377的DMU提供了一套细粒度的访问控制机制可以针对不同的总线主设备主核、HSM、DMA设置对特定Flash区域的读、写、擦除权限。5.1 DMU访问控制的实际配置逻辑TC377的Flash访问控制是基于“主设备 地址区间 操作类型”三元组来配置的。典型场景APP的代码区对主核是可读可执行的但不可写防止APP被恶意篡改或者防止跑飞的代码写坏FlashHSM对HSM自己的固件区可读可写但主核对这块区域连读都不行。这套配置的存放位置就是前面说的UCB。你用英飞凌的MCAL或者直接用寄存器操作把访问控制的配置写进UCB的对应字段然后芯片会在下次上电启动时把这个配置加载到DMU的硬件寄存器里。注意UCB里访问控制配置一旦生效想再改需要重新走一遍UCB编程流程不是改个寄存器就行的。这也是硬件级安全保护的意义——即使主核代码被攻破拿到执行权限它也改不了DMU的访问控制配置因为配置在UCB里锁着。5.2 安全刷写流程中的权限切换在线升级OTA场景下权限的切换是最微妙的。当Bootloader收到刷写请求它需要临时获得对APP Flash区域的写权限否则没法擦写。但芯片默认为了安全又把APP区设成了不可写。这怎么处理答案是这个权限切换不能由主核自己说了算要由HSM来授权。典型流程是APP收到刷写请求后先把请求转发给HSMHSM验证请求者的身份比如通过证书或者预共享密钥验完后HSM通过安全机制修改DMU的访问控制临时放行目标Flash区的写权限放行后通知Bootloader开始擦写。整个过程HSM是权限变更的唯一决策者主核只是个执行者。还有一个细节值得注意TC377的访问控制修改通常要在安全模式下进行。也就是说主核要操作DMU的相关寄存器必须先切换到安全模式通过特定的CPU指令序列普通模式下写这些寄存器会被硬件忽略或者触发Trap。这个设计我一开始也觉得很绕但想明白后就理解了只有在安全模式下CPU才被认为执行的是可信代码才有资格去触碰关键的硬件配置。5.3 防回滚与密钥轮换车企最关心的藏点车企对安全刷写还有两个隐藏需求防回滚和密钥轮换。防回滚是防止攻击者把车辆刷回旧版本固件利用已知漏洞发起攻击。TC377里实现防回滚的思路一般是在HSM内部或者安全Flash区里维护一个单调递增的版本计数器刷写新固件时版本号必须比当前值高刷写成功后更新计数器。这个计数器存在HSM能写、主核不能改的区域里从根上杜绝了主核软件自己改版本号的可能。密钥轮换则是密钥管理里的进阶操作。当密钥泄露风险升高或者周期性安全策略要求时需要把旧密钥替换为新密钥并同步更新到连接的服务器端。TC377的HSM支持在安全会话里执行密钥替换操作但这个过程比普通刷写敏感得多。我记得我们当时设计密钥轮换流程在产线和售后两侧都做了严格约束产线首次灌装Root Key售后只能做从Root Key派生出来的会话密钥更新Root Key本身原则上终身不改。这样即使售后环节被攻击攻击者拿到的也只是一个临时的会话密钥而不是整个安全体系的根。6. 结合SIL2要求Flash诊断机制的设计实践在汽车电子里说“SIL2”时常常会连带提到ISO 26262的ASIL等级但对于TC377的项目很多时候直接对标IEC 61508的SIL2尤其是工业控制类的控制器。无论对标哪个标准对Flash诊断的核心要求是相通的在随机硬件失效导致Flash错误时系统能及时发现并进入安全状态。6.1 诊断覆盖的维度SIL2对存储器的诊断通常从几个维度去覆盖数据完整性维度。Flash里存的数据是否被意外篡改这通过ECC来兜底单比特错误通过软件周期性CRC来兜底多比特错误ECC只能检测不能纠正多比特错误。地址完整性维度。读取数据时地址线是否出错导致读出来的内容不是想要的那个地址的内容这种故障普通ECC覆盖不到。一种常见的诊断方式是在固定周期内读取一组预期已知的常数看数值是否符合预期。如果地址线故障导致寻址偏离读出来的数会跟预期不一致。我见过有些安全工程师会专门做一个“Flash数据监视器”任务每100ms读一遍一个放在固定地址的已知值并做个简单的校验。擦写生命周期维度。Flash用久了擦写次数接近寿命上限时性能会下降可能出现擦不干净、写入不进去的情况。TC377的DMU可以读出擦写计数信息软件层可以定期读取如果接近阈值就提前报警。不过这个功能要慎用因为读擦写计数本身涉及对寄存器或特定地址的访问搞不好会触发ECC错误检测。6.2 一个可落地的Flash周期诊断方案我整理一个在实际项目里用过的SIL2 Flash诊断方案维度不算激进但SIL2评审能过上电自检时对Bootloader和APP的代码段逐段计算CRC32与链接时生成的参考值比对。如果失败禁止启动APP进入安全状态。运行期间每200ms对APP关键代码段链接脚本里定义一个专门的segment只含安全关键函数做增量CRC校验。所谓增量就是把校验段拆成几个小段每200ms校验一段轮流来整个关键段1秒内覆盖一轮。这样比一次性校验整个Flash省时间也能保证及时发现错误。每1秒读一次DMU的ECC错误聚合状态寄存器如果有单比特纠错事件发生记录下来如果检测到多比特错误立即触发安全状态切换。在非易失区域可以用DF0的EEPROM仿真区保存安全状态切换的故障码和时间戳方便售后排查。这套方案在SIL2评审时安全工程师最关注的其实是第2点——代码段的划分。如果关键代码段划分得太宽CRC计算时间摊不开会影响实时性划分得太细又要维护很多个小段的地址和长度信息代码里容易出错。我们最终通过一个Python脚本从ELF文件里提取各安全关键函数的地址区间自动生成CRC校验用的段表和参考值避免手写地址导致的人为错误。7. 实战调优Flash擦写性能与HSM调用的平衡点安全机制搞清楚了还得回到工程现实性能和安全的平衡。HSM做一次验签要几毫秒Flash擦一个1MB扇区要几百毫秒这两个操作如果串行叠加会严重影响客户的升级体验和产线节拍。7.1 Flash擦写的耗时实测不同型号的Flash擦除和编程时间差别不小。TC377的PF扇区擦除时间从几十毫秒到几百毫秒不等扇区越大越慢。1MB大扇区的擦除实测大概在300毫秒到600毫秒之间波动跟芯片温度和供电电压都有关系。编程写时间比擦除短但如果是边写边校验总时间会翻倍。所以在设计刷写流程时我强烈建议把“擦除 → 编程 → 校验”三个阶段的耗时分开做进度反馈不要笼统地给一个百分比。用户实际上看到的是“正在擦除”“正在写入”“正在校验”三个明确的阶段。这个细节别看小产线调试的时候能帮你精准定位是哪个环节慢是Flash工艺问题还是驱动代码问题。7.2 HSM调用的延迟预算HSM的调用延迟要分两部分看一是命令提交到响应返回的通信开销二是具体密码算法的计算时间。通信开销是固定的跟Mailbox的驱动实现质量有关计算时间取决于算法类型和密钥长度。AES-128加密一次HSM耗时在几十微秒级别RSA-2048验签一次耗时可能要毫秒级别ECDSA签名验证根据曲线不同普遍在毫秒级别。如果说你的系统里安全启动验签是串行阻塞的RSA验签那几毫秒其实还好毕竟每次启动只发生一次。但如果是SecOC这种高频场景每收到一条安全报文就要做一次HMAC或CMAC校验那延迟预算就必须按每个报文来算。我遇到过一个实际案例车辆网关每条报文都走HSM做CMAC计算结果报文量大的时候网关转发线程积压延迟飙到了十几毫秒超出了整车通信的时序预算。最后的优化方案是把CMAC校验的密钥材料提前加载到HSM内部缓存里减少每次会话初始化的开销同时把HSM调用改成异步方式主核先处理其他不依赖校验结果的逻辑等HSM中断回来再继续。这样把安全校验从关键路径上摘了出来延迟数据立刻好看了。7.3 Bypass接口与性能模式TC377的HSM还提供了一些“快速路径”接口可以绕过部分安全检查换取性能。比如有些操作允许直接以明文方式向HSM传数据只需要保证数据在传输过程中不被截获。这类接口在性能敏感时确实好用但用之前一定要在安全设计评审里讲清楚利弊。我的原则是默认全走完整安全检查只有在实测证明性能瓶颈确实在HSM调用、且绕过的操作不涉及密钥材料和安全敏感数据时才考虑用快速路径而且要详细记录在安全用例里。8. 一些老工程师才愿意说的坑最后写几个实操中反复踩到的坑基本都是文档里看不到的UCB编程失败变砖的恢复流程一定要提前演练。不要等产线烧了几百片突然出现UCB校验失败、芯片锁死的情况才开始手忙脚乱。TC377的BootROM有恢复模式可以绕过损坏的UCB但进入恢复模式的方法和步骤建议在开发阶段就做一次完整的演练写进产线作业指导书里。链接脚本里务必给HSM固件和配置区预留充足的地址空间。我见过一个项目HSM固件从1.5版本升到2.0版本体积大了不少结果原先预留的空间不够被迫重新调整整个Flash布局导致所有依赖地址的配置全部推翻重来。Flash分区时宁可多预留一些余量也别抠门。访问控制配置生效后调试器连不上是开发者的噩梦。如果你在开发调试阶段就把UCB里配置成了禁止调试下次想连调试器读flash内容会发现根本连不上只能通过BootROM恢复模式或仿真器特定的解锁流程救回来。我建议开发板上用一个轻松的调试许可配置在整车或量产配置里再收紧不要混淆。HSM固件版本和MCAL Crypto驱动版本必须严格对齐。这个前面提过但值得再强调一次因为它导致的故障太隐蔽了——不是编译报错而是运行到特定算法时返回错误码且错误码不直观。我们当时排查了很久最后是翻英飞凌的Release Note才发现的。别把HSM当成普通的加密加速器用。HSM的安全价值在于密钥管理和安全域隔离。如果你只是拿HSM做个AES加密而密钥管理还是用软件方式存在Flash明文里那HSM等于白装了安全评审也过不了。安全机制是一套体系不是单点功能。TC377的Flash分区和HSM安全机制确实是AURIX平台上最值得花时间吃透的部分之一。把这些基础打牢了后面做OTA、SecOC、功能安全认证都会顺很多。我做过的几个项目里凡是前期在分区和安全链条上投入足够时间的后期量产阶段几乎没出过安全相关的事故反而是那些跳过基础工作、直接堆功能的项目无一例外地在测试和认证阶段返工。希望这篇文章能帮你少走点弯路。
返回列表