博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OK6410A 开发板 (八) 43 linux-5.11 OK6410A memblock 的 消费者
阅读量:4285 次
发布时间:2019-05-27

本文共 10077 字,大约阅读时间需要 33 分钟。

怎么查看 memblock 的消费者 memblock=debuglog 中查看关键字 "memblock_reserve: ["
start_kernel -> setup_arch -> arm_memblock_initmemblock_reserve: [0x50100000-0x51080143] arm_memblock_init+0x48/0x148			// start_kernel->setup_arch->arm_memblock_init->memblock_reserve(__pa(KERNEL_START), KERNEL_END - KERNEL_START);memblock_reserve: [0x50004000-0x50007fff] arm_memblock_init+0x88/0x148			// start_kernel->setup_arch->arm_memblock_init->arm_mm_memblock_reserve();->memblock_reservememblock_reserve: [0x5fffe000-0x5fffffff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->early_alloc->memblock_allocmemblock_reserve: [0x5fffde70-0x5fffdfff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> memblock_allocmemblock_reserve: [0x5fffc000-0x5fffcfff] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_allocmemblock_reserve: [0x5fffb000-0x5fffbfff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_allocmemblock_reserve: [0x5fffa000-0x5fffafff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_allocmemblock_reserve: [0x5fff9000-0x5fff9fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_allocmemblock_reserve: [0x5fff8000-0x5fff8fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping -> __create_mapping -> alloc_init_p4d -> alloc_init_pud -> alloc_init_pmd -> alloc_init_pte -> arm_pte_alloc -> early_alloc -> memblock_allocmemblock_reserve: [0x5fffde48-0x5fffde6f] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->devicemaps_init->mdesc->map_io/smdk6410_map_io->s3c64xx_init_io-> iotable_init(mach_desc -> memblock_allocmemblock_reserve: [0x5fff7000-0x5fff7fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->kmap_init->early_pte_alloc->arm_pte_alloc->early_alloc->memblock_allocmemblock_reserve: [0x5fffde20-0x5fffde47] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->tcm_init->iotable_init(dtcm_iomap->memblock_allocmemblock_reserve: [0x5fffddf8-0x5fffde1f] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->tcm_init->iotable_init(itcm_iomap->memblock_allocmemblock_reserve: [0x5fff6000-0x5fff6fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->early_alloc->memblock_allocstart_kernel->setup_arch->paging_init->bootmem_init->memblock_allow_resize memblock_reserve: [0x5fdf6000-0x5fff5fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->bootmem_init->zone_sizes_init->free_area_init->alloc_node_mem_map->memblock_alloc_node->memblock_alloc_try_nidmemblock_reserve: [0x5fffddc0-0x5fffdddf] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->paging_init->bootmem_init->zone_sizes_init->free_area_init->free_area_init_core->setup_usemap->memblock_alloc_node->memblock_alloc_try_nidmemblock_reserve: [0x5fffdd80-0x5fffdd9f] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->setup_arch->request_standard_resources->memblock_allocmemblock_reserve: [0x5fffdcc0-0x5fffdd71] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_command_line-> saved_command_line = memblock_allocmemblock_reserve: [0x5fffdc00-0x5fffdcb1] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_command_line-> static_command_line = memblock_allocmemblock_reserve: [0x5fdf5000-0x5fdf5fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_alloc_alloc_info->memblock_allocmemblock_reserve: [0x5fded000-0x5fdf4fff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->memblock_alloc_from->memblock_alloc_try_nidmemblock_reserve: [0x5fffdbc0-0x5fffdbc3] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_allocmemblock_reserve: [0x5fffdb80-0x5fffdb83] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_allocmemblock_reserve: [0x5fffdb40-0x5fffdb43] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_allocmemblock_reserve: [0x5fffdb00-0x5fffdb03] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_allocmemblock_reserve: [0x5fffda80-0x5fffdaf7] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> memblock_allocmemblock_reserve: [0x5fffda00-0x5fffda5b] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_allocmemblock_reserve: [0x5fffd600-0x5fffd9ff] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_allocmemblock_reserve: [0x5fffd1c0-0x5fffd5c3] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_allocmemblock_reserve: [0x5fffd0c0-0x5fffd1bf] memblock_alloc_range_nid+0xc0/0x148	// start_kernel ->setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk -> memblock_allocmemblock_free: [0x5fdf5000-0x5fdf5fff] setup_per_cpu_areas+0x11c/0x168			// start_kernel ->setup_per_cpu_areas->pcpu_free_alloc_info->memblock_free_early->memblock_freememblock_reserve: [0x5fdcd000-0x5fdecfff] memblock_alloc_range_nid+0xc0/0x148	// start_kernel->vfs_caches_init_early -> dcache_init_early -> alloc_large_system_hash -> memblock_allocmemblock_reserve: [0x5fdbd000-0x5fdccfff] memblock_alloc_range_nid+0xc0/0x148 	// start_kernel->vfs_caches_init_early -> inode_init_early -> alloc_large_system_hash -> memblock_allocstart_kernel->vfs_caches_init_early// 之后就没有 用过 memblock_reserve
MEMBLOCK configuration: memory size = 0x10000000 reserved size = 0x011c5ed8 memory.cnt  = 0x1 memory[0x0]    [0x50000000-0x5fffffff], 0x10000000 bytes flags: 0x0	 	// 全部内存 reserved.cnt  = 0x10 reserved[0x0]  [0x50004000-0x50007fff], 0x00004000 bytes flags: 0x0	 	// 页表,页目录表 reserved[0x1]  [0x50100000-0x51080143], 0x00f80144 bytes flags: 0x0	 	// kernel reserved[0x2]  [0x5fdbd000-0x5fdf4fff], 0x00038000 bytes flags: 0x0	 	// inode_hashtable 	 : 文件系统相关 	// dentry_hashtable  : 文件系统相关 	// setup_per_cpu_areas中的memblock_alloc_from	 : per_cpu 变量相关  reserved[0x3]  [0x5fdf6000-0x5fffcfff], 0x00207000 bytes flags: 0x0	 	// buddy 中的 所有的 struct page 	// paging_init->early_alloc : zero page 	// paging_init->kmap_init->early_pte_alloc : fixmap 相关 	// 4个 s3c64xx_init_io-> iotable_init(s3c_iodesc -> create_mapping	: 设备的一级页表在 0x50004000-0x50007fff , 申请设备的二级页表(1个页) reserved[0x4]  [0x5fffd0c0-0x5fffd5c3], 0x00000504 bytes flags: 0x0	 	// 2个 setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk reserved[0x5]  [0x5fffd600-0x5fffda5b], 0x0000045c bytes flags: 0x0	 	// 2个 setup_per_cpu_areas->pcpu_setup_first_chunk -> pcpu_alloc_first_chunk reserved[0x6]  [0x5fffda80-0x5fffdaf7], 0x00000078 bytes flags: 0x0		// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk reserved[0x7]  [0x5fffdb00-0x5fffdb03], 0x00000004 bytes flags: 0x0	 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk reserved[0x8]  [0x5fffdb40-0x5fffdb43], 0x00000004 bytes flags: 0x0	 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk reserved[0x9]  [0x5fffdb80-0x5fffdb83], 0x00000004 bytes flags: 0x0	 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk reserved[0xa]  [0x5fffdbc0-0x5fffdbc3], 0x00000004 bytes flags: 0x0	 	// 1个 setup_per_cpu_areas->pcpu_setup_first_chunk reserved[0xb]  [0x5fffdc00-0x5fffdcb1], 0x000000b2 bytes flags: 0x0	 	// 1个 setup_command_line-> static_command_line = memblock_alloc reserved[0xc]  [0x5fffdcc0-0x5fffdd71], 0x000000b2 bytes flags: 0x0	 	// 1个 setup_command_line-> static_command_line = memblock_alloc reserved[0xd]  [0x5fffdd80-0x5fffdd9f], 0x00000020 bytes flags: 0x0	 	// 1个 request_standard_resources reserved[0xe]  [0x5fffddc0-0x5fffdddf], 0x00000020 bytes flags: 0x0	 	// 1个 free_area_init->free_area_init_core->setup_usemap reserved[0xf]  [0x5fffddf8-0x5fffffff], 0x00002208 bytes flags: 0x0	 	// tcm_init->iotable_init(itcm_iomap							// static_vm 	// tcm_init->iotable_init(dtcm_iomap 							// static_vm 	// smdk6410_map_io->s3c64xx_init_io-> iotable_init(mach_desc 	// static_vm 	// smdk6410_map_io->s3c64xx_init_io-> iotable_init(s3c_iodesc 	// static_vm 	// devicemaps_init->early_alloc									// vectors

总结

消费者有1. 页表2. kernel3. per_cpu4. 文件系统5. buddy中的struct page6. zero page的 物理页7. fixmap 的 4KB 二级页表8. 设备的 n*4KB 二级页表9. static_vm	// add_static_vm_early10. vectors		// vectors = early_alloc11. resource	12. command_line13. setup_usemap为什么这些模块会成为 memblock_alloc 的消费者 ???大概是需要内存	为什么 需要 alloc 的内存	而不是建立 全局变量		而且现在必须用,不能等到buddy建立,	而此时只有 memblock ,所以只能用 memblock_alloc

其他

per_cpu 基于 chunk内存分配器chunk 基于 vmalloc和buddy

转载地址:http://djigi.baihongyu.com/

你可能感兴趣的文章
英文序數寫法與唸法 Ordinal Numbers(轉載)
查看>>
DVB-S info
查看>>
绿盟扫描操作指导
查看>>
理解链路本地址与站点本地地址
查看>>
/proc/mtd 各个参数含义 -- linux内核
查看>>
linux nand flash常用命令
查看>>
NESSUS扫描操作指导
查看>>
C语言读取文件大小,载入文件全部内容
查看>>
C语言 static静态变量的作用
查看>>
Linux(C/C++)下的文件操作open、fopen与freopen
查看>>
C语言 文件操作的头文件
查看>>
C语言的常用库函数(dos)之四(dir.h文件下的一些函数)
查看>>
warning: jobserver unavailable: using -j1. Add `+' to parent make rule问题怎么解决
查看>>
防火墙报文转发流程
查看>>
以太坊创始人:17岁的亿万富翁养成记
查看>>
linux下IPTABLES配置详解
查看>>
关于iptables -m选项以及规则的理解
查看>>
linux系统中查看己设置iptables规则
查看>>
一些库函数的使用注意事项
查看>>
IPv6地址自动配置中的有状态(stateful)和无状态(stateless)的区别
查看>>