如何从 STiROT 启动 STiROT_Appli_TrustZone LAT1556
关键字:STiROT, STiROT_Appli_TrustZone
1. 前言
STM32H5 的 STiROT 让客户不用自己开发 bootloader 来实现安全启动与安全固件更新,用户只需要将精力集中在应用程序上,这给用户实现 Security 需求带来了方便。对于用户应用,STM32Cube 也提供了基于 STiROT 的例程和烧录脚本,能够进一步加速 Security 需求的开发。STM32Cube 有两个典型的用户应用例程,一个是 STiROT_Appli,另外一个是STiROT_Appli_TrustZone。使用 STiROT_Appli 具有丰富的文档支持,而有些用户在使用STiROT_Appli_Trustzone 过程中则遇见了困难。本文来解决这一问题。
2. 环境
本文基于
- STM32H573I-DK 开发板
- STM32CubeH5 v1.5.0
- STM32CubeProgrammer v2.17.0
- STM32CubeIDE 1.16.1
开发板是关键的环境,其他软件与工具版本并不一定需要相同。
3. 从 STiROT_Appli 到 STiROT_Appli_Trustzone 的困难
STiROT_Appli 与 STiROT_Appli_Trustzone 的区别在于,前者是一个 Full secure 的应用,后者则包含了 Secure 和 Non-Secure 工程,因此他们的 Flash 布局是不一样的。Flash 布局不一样意味着烧录脚本的配置往往不一样。
对于运行 STiROT_Appli_Trustzone 的困难则在于,STM32CubeH5 中 STiROT_Appli 和STiROT_Appli_Trustzone 并不互相独立,他们会共享一些环境配置。但是用户拿到STM32CubeH5 时 STiROT_Appli 之所以能够直接工作,得益于编译环境和烧录脚本的默认配置。所以,如果用户以为这两个程序互相独立,默认都能工作,一上来不加修改的去编译和烧录 STiROT_Appli_Trustzone,那么遇见 STiROT_Appli_Trustzone 在 STiROT 环境下不工作,并不奇怪。
幸运的是, STM32CubeH5 里的框架足够友好,从 STiROT_Appli 到 STiROT_Appli_Trustzone 只需要简单的修改。
4. 修改 env.bat
和 STiROT_Appli 一样,对于将 STM32CubeH5 的 STiROT_Appli_Trustzone 在 STM32H573I-DK 板子上运行起来的第一步都是进到STM32Cube\Repository\STM32Cube_FW_H5_V1.5.0\Projects\STM32H573I-DK\ROT_Provisioning\STiROT 目录,直接运行 provisioning.bat 或者 provisioning.sh。这里选择 provisioning.bat
你会注意到这里的输出并不符合你的需要,这里默认显示 STiROT_Appli,而你希望运行STiROT_Appli_Trustzone。
这里的输出也告诉了我们,要在 env.bat 里进行修改。
env.bat 的目录是在 STM32Cube\Repository\STM32Cube_FW_H5_V1.5.0\Projects\STM32H573I-DK\ROT_Provisioning。在这个文件里,你需要将 STiROT_Appli改成 STiROT_Appli_Trustzone,方法就是注释掉 STiROT_Appli 这一行,放开 STiROT_Appli_Trustzone 那一行,效果如下:
5. 修改 full secure 到 not full secure
修改好环境变量,你关闭并重新运行 provisioning.bat。你看见应用名字已经修改成了STiROT_Appli_Trustzone。如同使用 STiROT_Appli 那样,你的工作就是直接输入回车。结果,你遇见了一个错误:
似乎 STiROT_Appli 在 STiROT_Config.xml 并没有自动修改。检查脚本同一目录的provisioning.log,你发现如下提醒:
你猜测 STiROT_Config.xml 应当被修改
直接进到 STM32Cube\Repository\STM32Cube_FW_H5_V1.5.0\Projects\STM32H573I-DK\ROT_Provisioning\STiROT\Config 目录打开 STiROT_Config.xml,果然如此,full secure 的配置不对。
修改后如下:
6. 重新生成 OBK
修改好 STiROT_Config.xml,你关闭并重新运行 provisioning.bat。
在[code firmware image generation]这一步你也打开了 STM32CubeIDE 重新生成了固件。按照提示,将 BOOT0 拨到 FLASH
在开发阶段,为了调试方便,在选择产品状态时选择 OPEN
然后,按照提示将 BOOT0 拨到 SYSTEM,脚本提示一切似乎正常
但是按照要求下电、上电,打开串口,看不到任何输出。
这里的问题关键在于对于 STiROT_Appli,你可以忽略脚本运行过程中 OBK 重新生成的提示,因为 STM32CubeH5 默认是按照 STiROT_Appli 提供的。而对于 STiROT_Appli_Trustzone 则需要按照提示,或者在其他时间重新生成 OBK。
打开STM32TrustedPackageCreator。STM32TrustedPackageCreator 是STM32CubeProgrammer 的一部分。
选择 OBKey 工具,并选择STM32Cube\Repository\STM32Cube_FW_H5_V1.5.0\Projects\STM32H573I-DK\ROT_Provisioning\STiROT\Config 的 xml 文件,然后点击[Generate OBKey]
7. 重新运行
你重新运行 provisioning.bat,这个时候你发现串口输出了。一切正常。
8. 小结
如果你需要基于 STM32CubeH5和 STM32H573I-DK 的 STiROT 运行STiROT_Appli_TrustZone,发现它不能直接工作,不要奇怪,你需要修改 env.bat 的应用路径,以及 STiROT_Config.xml 里的 full secure 的配置,并重新生成 OBK。