
内存管理
小小蜗牛
这个作者很懒,什么都没留下…
展开
-
arm64_memblock_init
本文来分析arm64_memblock_init函数的代码这个函数的主要作用是初始化memblock。关于memory的区间范围,已经在setup_machine_fdt函数中添加进来。这里主要是remove掉no-map的区域,并reserve一些关键区域:如kernel镜像、dtb块、ramdisk镜像和device tree中的一些需要reserve的节点。...原创 2019-07-01 20:16:06 · 1941 阅读 · 0 评论 -
一个关于线性映射区的疑问
学习内存管理时一直有个疑问:内核虚拟地址空间中有一部分是线性映射用的,在内核初始化时会把物理内存映射到这个线性区域,既然映射已经建立完成了,那是不是就把物理内存全都占用了,用户空间是否就不能申请这些内存了?后来宋宝华老师给出了解释:被映射和被占用完全是两码事。下面就结合代码,谈谈我最这个解释的理解,以及自己碰到的疑问。我最大的疑问是,在实际项目中,我看到的线性映射区并没有对所有的物理内存进行...原创 2019-06-27 21:49:10 · 2307 阅读 · 0 评论 -
对fixmap实现动态内存申请的理解
本文谈谈内核初始话过程中是如何利用fixmap来实现动态分配内存的。关于fixmap的学习,可以参考这两份链接:http://www.wowotech.net/memory_management/440.htmlhttp://www.wowotech.net/memory_management/fixmap.html物理地址的分配是由memblock来完成,但这不意味这就可以使用了,还需要...原创 2019-06-28 11:11:56 · 1034 阅读 · 0 评论 -
early_fixmap_init
本文来分析early_fixmap_init函数的代码基于如下的配置,没有pud,因此可以提取到关键的代码如下CONFIG_ARM64_VA_BITS=39CONFIG_ARM64_4K_PAGES=yCONFIG_PGTABLE_LEVELS=3void __init early_fixmap_init(void){ pud_t *pud; pmd_t *pmd; unsign...原创 2019-06-28 19:41:06 · 1365 阅读 · 0 评论 -
fixmap_remap_fdt
本文来分析fixmap_remap_fdt函数的代码输入:dtb的物理地址输出:dtb映射后的虚拟地址功能:为dtb所在的物理内存建立映射void *__init fixmap_remap_fdt(phys_addr_t dt_phys){ void *dt_virt; int size; dt_virt = __fixmap_remap_fdt(dt_phys, &siz...原创 2019-06-28 19:40:38 · 1294 阅读 · 0 评论 -
setup_machine_fdt
本文来分析setup_machine_fdt函数的代码1.先讨论下dtb的物理地址变量__fdt_pointer2.关于fixmap_remap_fdt已经在https://blog.youkuaiyun.com/snail_coder/article/details/94023887中谈论,这里不再提3.谈论下early_init_dt_scan函数关于__fdt_pointer这个参数是由boo...原创 2019-06-28 20:17:02 · 1578 阅读 · 0 评论