[libcpu][arm][cortex-a] Fixup mmu setup early #11094
Open
+1
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
在
rt_hw_mem_setup_early()函数中,用于对齐_reset符号起始虚拟地址的代码存在错误。原代码使用va &= (0x1000000 - 1);执行的是取模运算(保留低24位),而不是向下对齐到16MB边界。这会导致虚拟地址对齐错误,影响早期MMU内存映射的正确设置,可能导致系统启动失败或内存映射异常。In the
rt_hw_mem_setup_early()function, the code used to align the starting virtual address of the_resetsymbol is incorrect. The original codeva &= (0x1000000 - 1);performs a modulo operation (keeping the lower 24 bits) instead of aligning down to the 16MB boundary. This causes incorrect virtual address alignment, which affects the correct setup of early MMU memory mapping and may lead to system boot failure or memory mapping exceptions.你的解决方案是什么 (what is your solution)
将错误的取模运算
va &= (0x1000000 - 1);修正为正确的向下对齐操作va &= ~(0x1000000 - 1);。Change the incorrect modulo operation
va &= (0x1000000 - 1);to the correct alignment-down operationva &= ~(0x1000000 - 1);.请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up改动说明
在原来的代码中,虚拟地址va是_reset对16M的取模运算。此时 va < 16M, 这样会导致mmu要映射的空间非常大。

以qemu-vexpress-a9为例:
修复以后

测试
早期mmu映射不会影响后续功能。修复也只是减少映射空间的循环时间。
