添加linux内核启动参数实现内存预留
前言
本人想预留一块连续的物理内存用于DMA传输,经过摸索和查阅资料,发现通过修改linux内核启动参数可以实现连续物理内存预留。
其预留操作是通过限制内核使用的物理内存大小,来实现目的。
举例:一个主机内存为4G,可以通过添加内核启动参数限制内核使用的物理内存为3G,这样就可以预留出1G大小的连续物理内存供DMA使用。
下面介绍两种修改内核参数的方式,来实现内存预留
内核启动参数mem、reserve
根据内核启动参数中的介绍,可以获知,mem确定的内核允许使用内存的大小,reserve确定了你需要预留的那部分内存(我个人发现通过reserve预留的区域不能为内核使用的内存,举个例子,主机4G和内存,通过mem限制3G内存给内核,那么reserve就只能在剩余的1G中操作,否则不会生效)
-
查看当前内存分配情况,找到一块合适的内存进行预留sudo cat /proc/iomem;
我对这一块区域的内存进行预留,从0x3fed0000开始预留0xffff大小的内存 -
查看当前内核启动参数cat /proc/cmdline;
-
开始修改内核启动参数vim /boot/grub/grub.cfg或sudo gedit /boot/grub/grub.cfg(我的虚拟机无法下载vim,所以只能用gedit);
找到这里,和第一步打印出来的内核启动参数一模一样,不过可能会有很多这样的代码,但是只修改第一条这样的就行了,因为后面的是advanced版本的内核启动参数(我不多介绍了,反正别管他)
我把他改成这样的,添加mem=0x3fed0000 reserve=0x3fed0000,0xffff
3. 修改完毕,重启系统reboot;
4. 查看内核启动参数;
5. 查看内存分配情况;
内核启动参数memmap
memmap比较直接,直接将想要预留的内存直接分出来。还是预留上面的那块内存,memmap=0xffff$0x3fed000(有些需要用转义符才能使用\$,我这里就加了转义符\)
- 修改内核启动参数;
添加memmap=0xffff\$x3fed000
- 修改完毕,重启系统reboot;
- 查看内核启动参数;
- 查看内存分配情况;
参考文档
https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html
https://blog.csdn.net/wennuanddianbo/article/details/77720873
https://blog.csdn.net/yhc1991/article/details/78447657?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1
https://www.cnblogs.com/dakewei/p/7499014.html
https://www.cnblogs.com/shengs/p/4608441.html