嵌入式高速发展的今天,大量的嵌入式设备使用了Arm为核心的芯片。我们会接触到越来越多的嵌入式设备,一个问题油然而生:数量如此巨大的嵌入式设备的安全性如何?目前针对嵌入式安全的技术和标准可谓千姿百态,除了必要的硬件安全技术,与之配套的安全软件也是必不可少的一部分。今天我们要介绍的是基于Arm 的可信固件Trusted Firmware-A,简称TF-A。它是一个开源软件,运行在一个硬件隔离的安全环境中并提供安全服务。
华清远见开发环境,FS-MP1A平台
本实验基于tf-a-stm32mp-2.2版本,然后添加意法半导体提供的补丁文件。在意法半导体官方的tf-a中移植我们自己的tf-a。
如果之前已经建立了源码目录,并且导入了源码包,即可跳过本小节。
将ST官方补丁文件打到tf-a源码中:
要对TF卡进行烧录,需要先将TF接入到ubuntu系统中。
由上图所示只有“/dev/sdb1”一个分区则需要重新进行分区。
如果显示如下内容,则表示设备已经被挂载,需要卸载掉设备再删除分区。
卸载完成后重新执行删除分区命令
注意:最后-p /dev/sdb参数中的/dev/sdb需要按照实际ubuntu中的tf节点为准,否则可能发生不可预料的后果。
1.4.3 建立自己的平台
导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装)
验证开发工具是否安装正确,显示版本信息如下图所示。
2) 增加板级相关文件
进入到tf-a源码目录
执行如下指令编译trusted:
编译成功后,最后显示内容(部分截图)如下:
编译完成后会在上级build/trusted目录得到如下文件:
由于在移植过程中会多次烧写固件并且会导致正常tf-a无法启动,因此推荐使用TF卡启动的方式来验证。
tf-a需要使用trusted 格式的u-boot镜像启动,具体的编译方法可参考《U-boot移植》章节中的“生成Trusted镜像”小节。
将TF接入ubuntu系统后,查看TF卡分区
/dev/sdb为TF卡设备。如果该设备下只有/dev/sdb1一个分区则重新分区。
执行如下指令烧写u-boot:
将拨码开关设置为SD卡启动方式:
将制作好的TF卡插入开发板,上电后会出现如下错误提示:
这个错误产生的原因是电源初始化错误,需重新调整电源相关配置。
1.4.4 调整设备树电源配置
由于官方参考板DK1采用电源管理芯片做电源管理,而FS-MP1A采用分离电路作为电源管理,本例需要将文件中原有电源管理芯片相关内容去掉,增加上固定电源相关内容
1) 去掉原有电源管理内容
DK1参考板电源管理芯片挂在I2C4上,而FS-MP1A并未使用I2C4总线,所以直接将I2C4相关内容完全删除即可。
将文件中i2c4节点相关内容整体删除,删除内容如下:
2) 添加固定电源配置
固定电源配置通常添加在根节点下,在根节点末尾位置添加如下内容(红色字体为需要添加的内容):
重新烧写后启动现象如下:
可以看到现在已经可以启动到u-boot了。
参考原理图可知eMMC使用的是SDMMC2总线,当前所使用的设备树文件中没有SDMMC2的支持,所以需要增加相关内容才能正常驱动eMMC。
由于在使STM32MP1芯片很多管脚为多功能复用管脚,且很多管脚具备同样的功能,所以移植eMMC时需要确认硬件设计是使用的是那些管脚,根据原理图确认后管脚对应关系为:
1、将十进制数128D转换成二进制数。128D=B
2、将十进制数142D转换成十六进制数。142D=8EH
4、直接将B写成十六进制数。B=CAH
1、如果一个二进制负数的有效位N=6,那么它的原码在计算机中应该占用几个字节。
2、如果一个二进制负数的有效位N=14,那么它的原码在计算机中应该占用几个字节。
3、如果一个二进制负数的有效位N=20,那么它的原码在计算机中应该占用几个字节。
4、求139的原码、反码、补码。
5、求-139的原码、反码、补码。
6、求-1139的原码、反码、补码。
1、直接写出-25的原码、反码、补码。11
2、以二进制无符号数表示254。
3、直接写出68的BCD码。
5、分别将1248以二进制、压缩BCD码、非压缩BCD码、ASCII码存放在计算机内存中。……
1、根据你的理解,单片机由哪几部分组成。
CPU,ROM,RAM,并行口,串行口,中断系统,定时计数器,时钟电路
2、8051单片机随机存储器有多少字节。128字节
3、8051单片机程序存储器有多少字节,它的用途是什么?4K字节,存放程序
4、程序地址存储器PC的用途是什么?指示当前指令的下一条指令地址
5、8051单片机的输入输出线共有多少根?32根
1、简述8051单片机内存的分区及其用途。
2、如何确定当前工作寄存器组?
3、可位寻址区有多少字节?能否作字节寻址操作?16字节可以
堆栈应该设在内存的哪个区?第3区
5、能否将特殊功能寄存器区作为随机存储器使用?不能
1、四个I/O口中,哪些有内部上拉电阻、哪些没有上拉电阻、没有的怎么办?