从memblock中释放已经reserved的内存

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

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)

OωO
  • ::(呵呵)
  • ::(哈哈)
  • ::(吐舌)
  • ::(太开心)
  • ::(笑眼)
  • ::(花心)
  • ::(小乖)
  • ::(乖)
  • ::(捂嘴笑)
  • ::(滑稽)
  • ::(你懂的)
  • ::(不高兴)
  • ::(怒)
  • ::(汗)
  • ::(黑线)
  • ::(泪)
  • ::(真棒)
  • ::(喷)
  • ::(惊哭)
  • ::(阴险)
  • ::(鄙视)
  • ::(酷)
  • ::(啊)
  • ::(狂汗)
  • ::(what)
  • ::(疑问)
  • ::(酸爽)
  • ::(呀咩爹)
  • ::(委屈)
  • ::(惊讶)
  • ::(睡觉)
  • ::(笑尿)
  • ::(挖鼻)
  • ::(吐)
  • ::(犀利)
  • ::(小红脸)
  • ::(懒得理)
  • ::(勉强)
  • ::(爱心)
  • ::(心碎)
  • ::(玫瑰)
  • ::(礼物)
  • ::(彩虹)
  • ::(太阳)
  • ::(星星月亮)
  • ::(钱币)
  • ::(茶杯)
  • ::(蛋糕)
  • ::(大拇指)
  • ::(胜利)
  • ::(haha)
  • ::(OK)
  • ::(沙发)
  • ::(手纸)
  • ::(香蕉)
  • ::(便便)
  • ::(药丸)
  • ::(红领巾)
  • ::(蜡烛)
  • ::(音乐)
  • ::(灯泡)
  • ::(开心)
  • ::(钱)
  • ::(咦)
  • ::(呼)
  • ::(冷)
  • ::(生气)
  • ::(弱)
  • ::(狗头)
泡泡
阿鲁
颜文字
取消