限制linux内核的内存区域

限制linux内核的内存区域

我在 P1022RDK(P1022 Core)平台上运行 ltib Linux。我有 512 MB = 0x20000000 内存。我希望我的 Linux 内核使用主板内存的后半部分(即从 256 MB 到 512 MB),并希望保留前半部分内存用于其他目的。

为此,我使用 ltib 构建 Linux 内核,并设置以下内核配置。请建议我是否以正确的方式这样做。

CONFIG_LOWMEM_SIZE = 0x10000000 # 256 MB 
CONFIG_PHYSICAL_START = 0x10000000 # Starting from 256MB (second half of memory)

在 Uboot 上,我通过以下方式加载内核:

setenv loadaddr 0x11000000 # Kernel base = 0x10000000 + 0x01000000 (offset) 
setenv fdtaddr 0x10c00000 # Kernel base = 0x10000000 + 0x00c00000 (offset) 
bootm $loadaddr - $fdtaddr My kernel Load address is 0x10000000 & kernel entry point is 0x10000000

使用上述配置/步骤,我的内核在 Uboot 上卡在以下位置:

Booting kernel from Legacy Image at 11000000 ...

Image Name: Linux-2.6.32.13 
Image Type: PowerPC Linux Kernel Image (gzip compressed) 
Data Size: 3352851 Bytes = 3.2 MB 
Load Address: 10000000 
Entry Point: 10000000 
Verifying Checksum ... OK

Flattened Device Tree blob at 10c00000

Booting using the fdt blob at 0x10c00000 
Uncompressing Kernel Image ... OK

应该在此处解压缩 FDT 并继续

有什么想法吗?

答案1

要为 David Schwartz 的答案添加详细信息,通过指定内核启动参数来设置内核使用的数量和起始地址,您可以做您想做的事情。

例如,将以下命令添加到内核启动参数中:

mem=256M@0x80000000

将指示内核应使用从 0x80000000 开始的 256M,这正是您所需要的。

您应该将 CONFIG 设置恢复为其原始值,并验证您的内核是否能够以其默认配置正确启动(没有 mem= 设置)。

您可以首先通过指定来尝试 mem=

mem=256M

这将使您从 0 开始减少内存区域,而顶部 256M 未被使用。一旦发现该方法有效,请使用具有上述偏移量的 256M。

还要注意通过 uBoot 在 RAM 中加载初始压缩映像的位置,以确保它不会与最终的内核内存区域发生冲突。

答案2

我认为您必须以相反的方式执行此操作,并保留顶部 256MB 未使用。CONFIG_PHYSICAL_START并没有像你想象的那样做。它控制内核加载的位置,而不是内核使用哪些物理页。

相关内容