ST MP157 存储分配深入分析(含多核异构)

368 阅读3分钟

1 A7 设备启动时ROM及内存使用分配

  • A7固化ROM CODE image.png
  • A7使用RAM运行FSBL镜像 image.png
  • MP1 Linux 启动流程
  • 现在很多产品对设备上运行的应用都提出了安全要求,STM32MP1启动 Linux 内核的过程是一个链式结构:ROM Code→FSBL→SSBL→Linux kernel→rootfs,系统启动的过程中要保证整个链式结构都是安全的。ROM 代码作为第一链,首先要对 FSBL 代码进行鉴权,同样的,FSBL 以及后面的每一链都要对下一个阶段的镜像进行鉴权,直到设备系统正确启动。 image.png

2 多核异构内存使用分配

  • STM32MP157 是一款 32 位的 ARM 芯片,有 4GB 的存储空间,被划分为了 13 块

2.1 STM32MP157 的内存映射图

image.png image.png

2.2 多核异构SRAM存储区域划分(单次接收 1024B)

  • SRAM 存储区域,包括 BOOT、SRAMs、SYSRAM、RAM aliases 存储区域,它们和 M4 有关, image.png
  • 从上图ST的参考设计中,RETRAM和SRAM1以及SRAM2是单独给M4使用的,其中,RETRAM用于存放M4的中断向量表,这部分的区域是固定的,用户不能够使用,SRAM1用于存放M4的代码段,SRAM2用于存放M4的数据段,SRAM1和SRAM2加起来共256KBSRAM3是A7和M4共同使用的,这部分区域用于IPC缓冲区,即A7和M4的共享内存在SRAM3中SRAM4被A7单独使用了,用于Linux下的DMA缓冲区image.png
  • RAM aliases的地址范围是0x30000000-0x40000000,除了预留存储块,还有和SRAMs一样大小的SRAM1-SRAM4以及和BOOT区域一样大小的RETRAM。RAM aliases里的RETRAM、SRAM1-SRAM4我们称之为A7可以访问的RAM,实际上,RAM aliases里的SRAM1-SRAM4和RETRAM与SRAMs里的SRAM1-SRAM4和BOOT里的RETRAM对应的是同一个物理地址,即同一块物理地址映射到了两段内存区域中,一个区域是A7“可见”的,另一个区域是M4“可见”的,A7“可见”的区域和M4“可见”的区域本质上对应的是同一块物理内存。
  • 设备树 image.png
  • 链接脚本(其中vdev0vring0和vdev0vring1,一个是用于发送,一个是用于接收。vdev0vring0+vdev0vring1+vdev0buffer=24576 字节。M4 工程的链接脚本 STM32MP157DAAX_RAM.ld 配置的 m_ipc_shm(即 IPC 缓冲区)大小为 0x00008000,为 32768 字节image.png
  • 总结 image.png

2.3 多核异构SRAM存储区域划分(单次接收 1024B)

image.png

  • 前面我们说过,SRAM4在Linux下默认当做了DMA的区域了,如果Linux下不使用DMA,那么可以将 SRAM4 当做其它用途,例如,我们可以将 SRAM4 分配给 M4 使用,对于 SRAM3中未使用的区域,我们也可以将其用作其它功能,假设刚好我们有这个需求,那么,我们可以将以上链接脚本修改如下 image.png
  • vdev0vring0 配置的地址长度是 0x1000,即 4096 字节
  • vdev0vring1 配置的地址长度是 0x1000,即 4096 字节;
  • vdev0buffer 的配置要求 image.png image.png