如何在 U-Boot 中使用 memmap?

如何在 U-Boot 中使用 memmap?

我想将前 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 定义的。

相关内容