我使用带有 i.MX8M Mini 的定制板。安装并配置了 4G 内存。
现在我已经为这个系统启用了 Trusty,但是加载 Trusty 模块(trusty-log)失败并且内核只是在 init 序列中停止。
看来内存配置有问题,因为4G内存。将内核的内存限制为 2GB (mem=2G) 解决了这个问题。
对于 Trusty,对于 i.MX8MM,基地址 (MEMBASE) 配置为 0xBE000000,即 2GB 边界。
查看地址库配置,引导加载程序实际上配置了以下内容。CONFIG_NR_DRAM_BANKS 设置为 3:
optee 参数开始 0xbe000000,大小 0x2000000
1. bank 0 开始 0x40000000,大小 0x7e000000
2. bank 1 开始 0xc0000000,大小 0x40000000
3. bank 2 开始 0x100000000,大小 0x40000000
内核选择以下区域(针对 4G 配置):
[0.000000] [T0]区域范围: [0.000000] [
T0] DMA32 [MEM 0x0000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFf
很多
]
[T0]早期内存节点范围
[0.000000][T0]节点0:[mem 0x0000000040000000-0x00000000bdffffff]
[0.000000][T0]节点0:[mem 0x00000000c0000000-0x000000000c0000000-0x000000013ffffitme[m0
]0.Infitme[m0]0设置节点 0 [mem 0x0000000040000000 -0x000000013fffffff]
[0.000000][T0] 在节点 0 上,区域 DMA32:8192 页不可用范围
[0.000000][T0] cma:在 0x0000000086000000 保留 800 MiB
Trusty 内存似乎有从 0xBE00 0000 到 0xC000 0000 的差距,这没关系。
现在,当我尝试加载 Trusty 日志模块时,内核就此挂起。这是内核输出。我已经添加了一些调试打印输出,给出了用于共享缓冲区的内存区域的物理地址:
[1.908062][T1]可信赖可信赖:可信赖版本:项目:imx8mm,内置:2023 年 3 月 30 日 07:19:24
[1.909187][T1]可信赖可信赖:选择的 api 版本:5(请求 5)
[1.910037][T1] trusty trusty:trusty_init_msg_buf:FF-A 版本 0x10000,预期 0x10000
[
1.911145]
[T1] : trusty_init_msg_buf:FFA_TX 位于 0x101475000
[1.913832][T1]
现在
加载
[ 1.960424 ] [ T1] trusty_irq:现在加载
[1.974842][T1]trusty_log:现在加载
[2.007747][T1]trusty-log trusty:trusty-log:trusty_log_init:分配 9 页
[2.008755][T1]trusty-log trusty:trusty-log:将添加页面 0x25c4000
[2.009614][T1]trusty-log trusty:trusty-log:将添加页面 0x25c3000
[2.010514][T1]trusty-log trusty:trusty-log:将添加页面 0x25c2000
[2.011374][T1]trusty-log trusty:trusty -log:将添加页面 0x25c1000
[2.012235][T1]trusty-log trusty:trusty-log:将添加页面 0x25c0000[
2.013098][T1]trusty-log trusty:trusty-log:将添加页面 0x172000
[2.013951][T1 ] trusty-log trusty:trusty-log: 将添加页面 0x1d7000
[ 2.014817][ T1] trusty-log trusty:trusty-log: 将添加页面 0x156b000
[2.015682][T1]trusty-log trusty:trusty-log:将添加页面 0x156a000
[2.016546][T1]trusty-log trusty:trusty-log:trusty_log_init:真正分配内存
[2.017549][T1]trusty trusty:trusty_transfer_memory: dma map sg list
[2.018427][T1]trusty trusty:trusty_transfer_memory:dma map sg list done 9
[2.019395][T1]trusty trusty:trusty_transfer_memory:encode pages
[2.020236][T1]trusty trusty:trusty_transfer_memory:total page len 36864
[ 2.021165][T1]trusty trusty:trusty_transfer_memory:与trusty cons_mrd_offset 64交谈
内核挂在 vendor/nxp-opensource/kernel_imx/drivers/trusty/trusty.c 第 350 行的以下代码处:
if (cons_mrd_offset) {
u32 smc = lend ? SMC_FC_FFA_MEM_LEND :
SMC_FC_FFA_MEM_SHARE;
/* First fragment */
dev_info(dev, "%s: talk to trusty cons_mrd_offset %lu\n", __func__, cons_mrd_offset);
smc_ret = trusty_smc8(smc, total_len,
fragment_len, 0, 0, 0, 0, 0);
} else {
在 i.MX8M Mini 上使用 4G RAM 运行 Trusty 的正确内存配置是什么?
也许我错过了设备树中的一些条目?