0

据我了解,PC/嵌入式系统启动后,操作系统将占据整个 RAM 区域,RAM 将如下所示:

OS 区域占据整个 RAM

这意味着,当我运行我编写的程序时,所有变量、堆栈中分配的动态内存、堆等都将保留在该区域内。如果我运行 firefox、paint、gedit 等,它们也会在这个区域运行。(这个理解正确吗?)

但是,我想缩小操作系统区域。下面是我想如何划分 RAM 的说明:

OS 区域不占用整个 RAM,留下一些物理内存供我使用

我想这样做的原因是,我想将一些通过驱动程序从外部接收的数据存储到Custom Region固定的物理位置,然后我将能够直接从用户空间访问它而无需使用copy_to_user().

我认为可以通过配置u-boot来做到这一点,但是我没有u-boot的经验,谁能给我一些从哪里开始的指导,例如:我是否需要修改u-boot的源,或者改变environment variablesu-boot就足够了?

或者有没有其他方法可以做到这一点?

任何帮助深表感谢。谢谢!

p/s:我使用的是 TI ARM 处理器,并从 SD 卡启动,我不确定这是否重要。

4

3 回答 3

4

平台是ARM。min_addr 和 max_addr 在这些平台上不起作用,因为它们仅适用于 Intel 实现。

对于 ARM 平台,请尝试查看“mem=size@start”内核参数。阅读 Documentation/kernel-parameters.txt 和 arch/arm/kernel/setup.c。此选项在大多数新的 Linux 代码库(即 2.6.XX)上可用。

于 2012-01-10T00:41:46.533 回答
3

您需要设置以下参数:

max_addr=some_max_physical
min_addr=some_min_physical

通过 'bootargs' u-boot 环境变量中的 uboot 传递给内核。

于 2012-01-03T04:08:06.070 回答
0

我发现自己最近试图做相反的事情——换句话说,让 Linux 使用我系统中的额外内存——尽管我在 OMAP4 平台上使用的是 Barebox 而不是 u-boot。

我发现(有点令我惊讶)一旦 Barebox MLO 第一阶段引导加载程序知道额外的 RAM,内核就会在没有任何 bootargs的情况下检测并使用它。由于内存大小没有在引导行的任何地方传递,我只能假设内核检查引导加载程序设置的内存映射以确定 RAM 大小。这表明修改您的 u-boot 以不映射所有 RAM 是可行的方法。

关于 boot-args 的主题,曾经有人建议您使用引导行在 OMAP4 系统上映射出一块 RAM(由帧缓冲区使用?)。目前还不清楚这是否仍然有必要。

于 2012-08-15T09:02:09.963 回答