【发布时间】:2016-04-20 13:35:05
【问题描述】:
我正在尝试找到一种方法,以便在系统启动后尽早为专有内存类型的硬件保留物理内存(带有 Intel Xeon 服务器平台的 Linux CentO)。
我在 arch/x86/kernel/setup.c 中的 setup_arch() 执行了以下操作,它可以工作,但发现我不允许修补内核。要求是没有 BIOS 和内核模块。
setup_arch()
{
....
// Calls a proprietary function that returns custom proprietary memory module's starting address and size.
memblock_reserve(mem_start_addr, mem_size);
.....
}
我也不能在 Grub 中使用 memmap=xx/xx,因为设备的启动和大小是未知的(它必须被软件“发现”)
有什么办法吗?
【问题讨论】:
-
我一直在为 20+ 编写 linux 内核/驱动程序,而且,IMO,“无补丁”要求是,嗯,很傻......在这种情况下 [专用硬件]。好的,所以没有对
setup_arch的补丁,但是添加一个“内置”的驱动程序/模块怎么样(即直接编译到内核中——不可动态加载)。许多模块/驱动程序都是以这种方式构建的。如果您 [仍然] 做不到,我会严重质疑该要求的合理性,除非有 真正 充分的理由 [而且我很乐意听到它]。 -
有一个叫做
mem的内核参数可以用来指定内核可以使用的内存大小。您可以通过提供较小的mem来保留一些物理内存。 -
克雷格,“我也想到了“内置”的驱动程序/模块,但驱动程序通常会在启动过程中加载很久。我们需要保护/保留linux 接触它之前的硬件内存空间,因为它可能会在硬件中产生未定义的行为。在此期间,内核启动到驱动程序,linux 有可能对该内存空间做一些事情。对吗?
-
@electro 你有没有找到这个问题的答案?我正在努力实现与您相同的目标。我们有一个需要明确控制的设备,并且不希望 Linux 内核在任何时候都加载到这个内存空间中。你有什么推荐的?
标签: linux linux-kernel linux-device-driver