从memblock中释放已经reserved的内存

adtxl
2022-12-08 / 0 评论 / 411 阅读 / 正在检测是否收录...

1. 目的

在有些应用场景中,有些reserved memory只在开机时使用,如开机logo之类的,在使用完成后可以选择释放这些reserved_memory,增大系统可用内存。
如下面这样的reserved_memory,系统是无法使用的。

image.png

2. 方法

  1. 从memblock中的reserved memory中释放内存--memblock_free()
  2. 将内存释放会buddy system管理-- free_reserved_page()

3. 测试

针对上面的logo_reserved,一个简单的测试驱动如下

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/memblock.h>
 
 
static int __init logo_init(void)
{
        unsigned long mem_addr = 0xe6c00000;
        unsigned long size = 0x1000000;
        unsigned long pfn_start, pfn_end, pfn_idx;
        pfn_start = mem_addr >> PAGE_SHIFT;
        pfn_end = (mem_addr + size) >> PAGE_SHIFT;
             
        memblock_free(mem_addr, size);
             
        for (pfn_idx = pfn_start; pfn_idx < pfn_end; pfn_idx++)
                free_reserved_page(pfn_to_page(pfn_idx));
        printk("logo_init!\n");
        return 0;
}
 
static void __exit logo_exit(void)
{
}
 
module_init(logo_init);
module_exit(logo_exit);
 
MODULE_LICENSE("GPL");
MODULE_AUTHOR("adtxl");

测试结果如下,可以看到在加载驱动后,可用内存增大了16M,也就是logo_reserved这段内存的大小。

image95074a94074b20db.png

0

评论 (0)

取消