微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Linux启动时尽可能早地保留物理内存空间

我试图find一种方法,在系统启动后(Linux CentOs与英特尔至强服务器平台)尽早为专有内存types硬件预留物理内存。

我在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,因为设备的开始和大小是未知的(它必须由软件“发现”),

有没有办法做到这一点?

usb-skeleton.c不起作用

在Beaglebone中断

在Linuxnetworking驱动程序中区分转发stream量和本地发起的stream量

Linux内核堆栈

为什么我的内核模块中的探测function没有被调用

Linux驱动程序开发:如何调查copy_to_user()的时机?

make命令中的M选项,Makefile

Linux内核configuration设备的顺序是什么?

打开固件设备树的概述/参考手册

在Linux内核中映射DMA中断

一个想法是编写一个自定义的grub模块,并使用它设置memmap=xx 。 以下是如何做到这一点。

请注意,以下方法只适用于CentOS 7以上,因为CentOS 6.x或以下使用的是grub 0.9x 。 在这种情况下,您可能需要修改grub 0.9x的代码,并将/boot/grub/stage1或/boot/grub/stage2

$ git clone git://git.savannah.gnu.org/grub.git $ cd grub $ git checkout grub-2.02-beta2 # CentOS 7 currently uses grub-2.02-beta $ vim grub-core/Makefile.core.def # add following row module = { name = my_custom_module; common = lib/my_custom_module.c; }; $ vim grub-core/lib/my_custom_module.c # create following file #include <grub/dl.h> #include <grub/env.h> GRUB_MOD_LICENSE ("GPLv3+"); GRUB_MOD_INIT(my_custom_module){ // Calls a proprietary function that returns custom proprietary memory module's starting address and size. const char *mem_size = "123"; grub_env_set("my_memsize",mem_size); } GRUB_MOD_FINI(my_custom_module){ } $ ./autogen.sh $ ./configure $ make

现在你可以发现grub-core/my_custom_module.mod被创建了。 所以把它复制到/boot/grub2/i386-pc/ (或者不管你的*.mod文件是否存在)

编辑grub.conf并添加类似的东西

insmod my_custom_module linux /boot/vmlinuz-3.10.el7.x86_64 root=UUID=1a3b5c7d9 ro memmap=${my_memsize}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐