Aar*_*sco 25
如果您希望操作系统完全忽略它,您需要使用“ memmap.”来制造内存漏洞。请参阅此参考。例如,如果你想要 512M 的 2GB 屏障,你可以memmap=512M$2G在你的内核命令行上加上“ ”。
您需要检查您的位置dmesg以找到一个连续的洞来窃取,这样您就不会踩踏任何设备;这是特定于您的主板+卡的。
这不是推荐的做事方式 - 请参阅 Warren Young 的答案以了解如何正确执行此操作(内核驱动程序 + DMA)。我正在回答你问的确切问题。如果你打算为最终用户做这个,如果你对他们这样做,他们会讨厌你......相信我,这是我知道这个答案的唯一原因。
编辑:如果您使用带有 grubby 的 grub2(例如 CentOS 7),您需要确保转义 $。\之前应该有单$。例子:
$ sudo -v
$ sudo grubby --update-kernel=ALL --args=memmap='128M\\$0x57EF0000'
$ sudo grubby --info $(sudo grubby --default-kernel) | grep memmap
args="ro crashkernel=auto ... memmap=128M\$0x57EF0000"
Run Code Online (Sandbox Code Playgroud)
War*_*ung 24
您要求的称为 DMA。您需要编写一个驱动程序来保留此内存。
是的,我知道您说过您不希望操作系统进行干预,并且驱动程序成为操作系统的一部分,但是在没有驱动程序保留的情况下,内核认为所有内存都属于它。(除非你告诉内核忽略内存块,按照 Aaron 的回答,就是这样。)
Rubini、Corbet 和 Kroah-Hartmann 所著的“ Linux 设备驱动程序,3/e ”的第 15 章(PDF)涵盖了 DMA 和相关主题。
如果你想要这个的 HTML 版本,我在网上其他地方找到了该章节的第二版。请注意,第 2 版现在已经有十多年的历史了,它是在内核 2.4 是新版本时问世的。从那时起,在内核的内存管理子系统上有很多工作,所以它可能不再适用。
小智 6
要在基于 ARM 的 Linux 的内核中保留一块内存,您还可以使用reserved-memory设备树 (dts) 文件中的节点。在内核文档(参见此处)中,有一个示例:
memory {
reg = <0x40000000 0x40000000>;
};
reserved-memory {
#address-cells = <1>;
#size-cells = <1>;
ranges;
/* global autoconfigured region for contiguous allocations */
linux,cma {
compatible = "shared-dma-pool";
reusable;
size = <0x4000000>;
alignment = <0x2000>;
linux,cma-default;
};
display_reserved: framebuffer@78000000 {
reg = <0x78000000 0x800000>;
};
multimedia_reserved: multimedia@77000000 {
compatible = "acme,multimedia-memory";
reg = <0x77000000 0x4000000>;
};
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46325 次 |
| 最近记录: |