【天天播资讯】使用ARM的TrustZone技术 针对安全和非安全应用划分系统
(资料图片仅供参考)
实时关键电机控制功能运行µC/OS-II,工作在内核1上,而Linux以及提供控制和通信通道的应用程序运行在内核0上。目的是提供一个隔离域,在处理器内核1中运行功能时不会受到内核0的干扰。对此,内核1 (µC/OS-II)运行在安全环境中,内核0 (Linux)运行在非安全环境中。两个处理器内核通过共享物理存储器通道进行通信,使用了OpenMCAPI标准。对YHPS系统进行了静态划分,每一操作系统(OS)只可访问到其分配资源中。存储器映射被划分为分配给µC/OS-II或者Linux的区域,以及由二者共享的区域。
同样的,在µC/OS-II和Linux之间划分了外设,外设是不共享的。主机配置表列出了HPS中的所有AXI主机及其TrustZone安全状态。可以设置状态,这样,外设总是产生安全或者非安全访问,或者在每次“会话”基础上进行安全访问(例如,专门在每一访问上设置安全状态)。
配置
每一Cortex-A9处理器都有自己的独立L1高速缓存,获取指令和数据,还有一个独立的定时器/看门狗模块。处理器共享L2高速缓存、通用中断控制器(GIC)以及探测控制单元(SCU)。GIC管理优先级、中断和MPCore处理器的连接。可以将其配置为连接每一中断和某一内核,还可以为每一中断分配一个TrustZone状态。
可以把L2高速缓存配置为以很多不同的方式进行工作。在我们的例子中,L2配置寄存器被设置为只能从安全主机进行写操作,意味着,Linux不能修改L2高速缓存配置,除非它通过安全状态监视器来访问寄存器。主机将L2高速缓存分开,两个分配给µC/OS-II,六个分配给Linux内核。µC/OS-II内核分配了1Mb的DDR、UART1以及FPGA中的所有外设。所有其他资源都分配给Linux内核。
Linux内核能够管理ARM处理器的存储器管理单元,而µC/OS-II不能,因此,修改µC/OS-II BSP代码以便在启动期间建立静态页面表。分配给µC/OS-II的资源被放置在页面表中,µC/OS-II被配置为只使用这一存储器映射。对于Linux,描述系统的器件树(在启动时传递给内核)不包括分配给µC/OS-II的存储器或者外设参考。
SoC的启动是一个三级过程。第一级涉及到片内启动ROM,完成内核0的最小配置,使能外部非易失存储器。在这一存储器中,它找到并验证装入到片内RAM中的“预装入”软件镜像,用于配置SDRAM和SoC器件的外设I/O。器件初始化完成后,预装入程序装入并执行第二级启动加载程序(例如,U-boot)。第二级启动加载程序负责装入并执行最终的OS。我们的AMP系统还有其他的要求,例如,把两个独立的操作系统装入到存储器中,在SoC中配置TrustZone安全选项等。内核1、UART1、看门狗定时器1中的本地定时器/看门狗外设以及µC/OS-II使用的中断被配置为安全,因此,只能由µC/OS-II进行访问。所有其他外设和中断被配置为非安全。完成这一工作后,代码启动内核1运行µC/OS-II,然后在内核0上启动运行Linux。
使用这一例子中描述的方法,设计人员受益于Altera SoC带来的器件合并优势,同时满足了安全关键应用严格的(TrustZone/硬件要求)软件分离要求。
参考文献: [1]SoC FPGA ARM Cortex-A9 MPCore Processor Advance Information Brief[R/OL].http://www.altera.com.cn/literature/hb/soc-fpga/aib-01020-soc-fpga-cortex-a9-processor.pdf [2]Functional Description—HPS Memory Controller[R/OL].http://www.altera.com.cn/literature/hb/external-memory/emi_fd_controller_HPS.pdf [3]Cortex-A9 Microprocessor Unit Subsystem[R/OL].http://www.altera.com.cn/literature/hb/arria-v/av_54006.pdf