仅对英特尔可见 — GUID: jto1540272334080
Ixiasoft
5.4.2.5. 应用映像布局
应用程序映像包括SDM固件和配置数据。配置数据最多包括四个section。SDM固件包含指向这些section的指针。下表显示了应用程序映像中section的数量和指针的位置。
默认情况下,开始于地址偏移0x1FC0的应用程序映像*.rpd的前16个字节为0。但是,您可以使用这16个字节来存储Version ID以标识应用程序映像。提供此Version ID可让您稍后验证存储在闪存中的图像。
偏移(offset) | 大小(以字节为单位) | 说明 |
---|---|---|
0x1F00 | 4 | section的数量 |
… | ||
0x1F08 | 8 | 第一个section的地址 |
0x1F10 | 8 | 第二个section的地址 |
0x1F18 | 8 | 第三个section的地址 |
0x1F20 | 8 | 第四个section的地址 |
… | ||
0x1FFC | 4 | CRC32 of 0x1000 to 0x1FFB |
section指针必须与闪存中FPGA映像的实际位置匹配。有两个选项可满足此要求:
- 您可以生成应用程序映像以匹配quad SPI闪存中的实际位置。因为不同的系统可能具有不同的更新集,所以此选项可能不适用。
- 您可以生成应用程序映像,就好像位于地址零一样,然后更新指针以匹配实际位置。
以下步骤将指针从一个对INITIAL_ADDRESS创建的应用程序映像更新成一个对NEW_ADDRESS创建应用程序映像:
- 创建应用程序映像,目标为INITIAL_ADDRESS。
- 从应用程序映像的offset 0xF100读取32-bit值来确定section的数量。
- 对于<s>= 1 to number_of_sections:
- section_pointer = 从0xF100 + (s * 8)读取的64-bit section pointer
- 从section_pointer减去INITIAL_ADDRESS
- 将NEW_ADDRESS加到section_pointer
- 存储更新的section_pointer
- 重新计算地址0x1000 to 0x1FFB的CRC32。在offset 0x1FFC上存储新值。必须按照以下步骤在数据副本上计算CRC32值:
- 交换每个字节的比特,以使这些比特以相反的顺序出现并计算CRC。
- 交换计算得出的CRC32值的字节以相反的顺序出现。
- 交换CRC32值的每个字节中的比特。
- 将CRC32值写入闪存。
使用HPS管理RSU时,U-Boot和LIBRSU客户端均实现上述过程,以将目标地址为零的应用程序映像重新定位到实际目标插槽地址中。
注: 出厂更新映像具有不同的格式。有关生成出厂更新映像的正确过程,请参考生成出厂更新映像主题。
相关信息