我想将前 2 GB 保留给 RAM,因为我的硬件在这个位置写入内存 RAM,并且我需要内核不要将这部分触及内存。
我读到要使用此选项需要启动订单内存映射在引导加载程序中,我使用的引导加载程序是 U-Boot,因为我要使用 Yocto OS 中的驱动程序内核。
我阅读此示例以使用内存映射:
memmap=nn[KMG]$ss[KMG]
[KNL,ACPI] Mark specific memory as reserved.
Region of memory to be reserved is from ss to ss+nn.
Example: Exclude memory from 0x18690000-0x1869ffff
memmap=64K$0x18690000
or
memmap=0x10000$0x18690000
Some bootloaders may need an escape character before '$',
like Grub2, otherwise '$' and the following number
will be eaten.
我不知道在这种情况下使用,谢谢
编辑:新问题
我在 U-Boot 中使用 memmap=2G$0x00000000 和 memmap=7fffffff$0x00000000 编写此选项,不返回异常,我想我写得正确,但在猫/过程/iomem我没有看到任何东西告诉我这个记忆是为记忆保留的。
您需要修改.dtb吗?
答案1
我认为你最好在启动时使用Uboot中的“mem”属性,参见这里:
为了保留内存不被 SoC Cortex-A9 上运行的 Linux 使用,必须告知 Linux 内核什么是内存顶部(最高可寻址 RAM 地址)。该地址之外的所有 RAM 地址都可以用于 Linux 操作系统之外的其他用途。
通过将“mem=...”Linux 引导参数添加到 bootargs U-boot 环境变量中,可以在 U-boot 中设置最高可寻址 RAM 地址。
下面是一个示例 U-boot 命令行命令,用于将内存顶部设置为 0x3E800000 :
setenv bootargs console=ttyS0,115200 mem=1000M
请注意,“mmcboot”、“ramboot”和“qspiboot”U-boot 环境变量也会覆盖 bootargs 环境变量。如果使用这些变量,则可能还需要在这些变量中修改 bootargs。
默认的 U-boot 环境变量是通过“uboot-socfpga\include\configs\socfpga_common.h”C 头文件为 SoC 定义的。