根据我的理解,在PC /嵌入式系统启动后,操作系统将占用整个RAM区域,RAM将如下所示:
这意味着,当我正在运行我编写的程序时,所有变量,堆栈中分配的动态内存,堆等都将保留在该区域内。如果我运行firefox,paint,gedit等,它们也将在这个区域运行。 (这种理解是否正确?)
但是,我想缩小操作系统区域。下面是我想如何划分RAM的说明:
我想这样做的原因是,我想通过驱动程序将一些数据外部存储到固定物理位置的Custom Region
,然后我就能直接从用户空间访问它不使用copy_to_user()
。
我认为通过配置u-boot可以做到这一点,但我没有u-boot的经验,任何人都可以给我一些指示从哪里开始,例如:我是否需要修改u的来源-boot或更改u-boot的environment variables
就足够了吗?
或者有没有其他方法可以做到这一点?
非常感谢任何帮助。谢谢!
p / s:我正在使用TI ARM处理器,并从SD卡启动,我不确定它是否重要。
答案 0 :(得分:3)
您需要设置以下参数:
max_addr=some_max_physical
min_addr=some_min_physical
通过'bootargs'u-boot环境变量中的uboot传递给内核。
答案 1 :(得分:3)
该平台是ARM。 min_addr和max_addr将无法在这些平台上运行,因为这些仅适用于英特尔实现。
对于ARM平台,请尝试查看“mem = size @ start”内核参数。阅读Documentation / kernel-parameters.txt和arch / arm / kernel / setup.c。此选项适用于大多数新的Linux代码库(即2.6.XX)。
答案 2 :(得分:0)
我发现自己最近试图做相反的事情 - 换句话说让Linux在我的系统中使用额外的内存 - 虽然我在OMAP4平台上使用Barebox而不是u-boot。
我发现(有点令我惊讶),一旦Barebox MLO第一阶段启动加载程序意识到额外的RAM,内核就会检测并使用而不使用任何bootargs 。由于内存大小没有在引导线上的任何地方传递,我只能假设内核检查引导加载程序设置的内存映射以确定RAM大小。这表明修改你的u-boot以不映射所有的RAM是要走的路。
关于boot-args的主题,曾经有一段时间你建议你使用引导线在OMAP4系统上映射出一大块RAM(由帧缓冲区使用?)。目前还不清楚这是否仍然是必要的。