上传者: 26774169
|
上传时间: 2026-01-22 14:35:03
|
文件大小: 2MB
|
文件类型: PDF
3.4 启动阶段的安全测试和初始化
启动阶段,关键部件和基本 SMU 报警都要测试和初始化,如启动安全测试示图所示。START 驱动程序提
供了钩子(Hooks),调用通用安全程序库或是应用相关的安全初始化函数,详细内容可参考 SafeTlib
文档。
1. 应用程序调用的前期安全测试钩子可以提供初始安全测试配置相关的信息,进而确定哪部分存储器
和关键元件需要进行测试。
2. 预初始化确保先期运行的关键测试所需要的资源,变量是可用的,并且所需要的内存也经过了初始
化。每个核共享的资源由主核初始化,而各核独自使用的资源,由相应的内核初始化。
3. 根据安全级别的要求,每个工作循环内都要对关键部件进行测试。先期运行的关键需要优化测试序
列,以确保如启动时的 SBST & MBIST 图所要求的最短测试时间。
a. CPU+锁步 - SBST,锁步比较器检查,潜在故障测试
b. 关键静态内存 - 可配置的 MBIST 测试,ECC故障,寻址故障
c. 关键 FLASH - ECC 故障
d. 存储保护单元(MPU)
4. 需要提供一种方法对处理器内核完整性进行测试,而且能满足微控器内的每个处理器和锁步核的测
试可以分开独立执行。
5. 本文实现的示例中,START 驱动程序只对关键存储器的进行启动测试。对于内存的测试,可用 March,
Checkerboard 或非凡转测试等算法,可最多对 16 个内存区进行测试。应用通过钩子程序,可以动
态地启动或停用主要内存测试。一旦有错误发生,将抛出误异,返回错误发生的地址。内存 ECC 电
路测试函数会在每个工作循环内,对内存存储纠错代码(ECC)检测电路测试一次。测试方法是对预
存有 ECC 错误的内存区进行读操作,测试时会向 SMU 的触发 ECC 报警,但不会产生复位或是中断。
缓存存储器区这时还不能启用,因为在内存测试过程中,缓存存储会被测试覆盖。
6. 每个工作循环内,Flash ECC 电路测试函数都要对 Flash 存储器纠错代码(ECC)检测电路测试一次。
测试方法是使用预存有 ECC 错误的 Flash 区,测试过程中,SMU 的 ECC 报警不会产生复位或是中断。
7. 驱动初始化和多核启动后,会执行功能安全初始化,包括 SMU 初始化,SMU 激活和安全看门狗初始
化。进一步说,包括初始化 SMU,设置错误引脚和把 SMU 切换到运行状态。其实,功能安全测试和
初始化的顺序,是在驱动初始化/多核启动之前还是之后,需要从系统层面,综合考虑。
8. 最后,通过多次调用服务函数,指定不同参数,执行不同的安全预运行测试,可以完成对不同功能
模块的测试,特定报警测试也会执行。一些预运行测试,可在 OS 运行之前或之后执行,典型例子是
对 OS 用到的资源的测试,如 CPU 的存储保护单元(MPU),总线的 MPU,中断路由。所有预运行测试
会生成签名,可用来判断这些单元的逻辑流是否正确。上层程序提供一个输入种子,以生成测试签
名,这样能保证测试签名是动态值,而不是固定旧数据(避免粘滞故障)。另外,所有预运行测试
产生的测试结果,可被测试通过/失败标准用作失效判断。
9. 要求带存储保护的测试只能在 OS 启动后运行。通常假设,在 OS 启动前,测试执行时,中断全部关
闭。安全测试完成后,基本的存储访问保护机制(基于主 ID)才能初始化,避免由非安全的软硬件
组件使用导致系统崩溃。