1. 目的
在有些应用场景中,有些reserved memory只在开机时使用,如开机logo之类的,在使用完成后可以选择释放这些reserved_memory,增大系统可用内存。
如下面这样的reserved_memory,系统是无法使用的。
2. 方法
- 从memblock中的reserved memory中释放内存--memblock_free()
- 将内存释放会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这段内存的大小。
评论