SSD2020 内存分布MMAP 理解

1 编译过程

板卡配置信息spinand.glibc.011a.128 定义引用 MMAP = MMAP_I2M_128M.h
编译过程中,通过 mmapparser 工具获取MMAP_I2M_128M.h的相应的内存段的起始地址,长度,类型等参数。

/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_MEM phyaddr
/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_MEM size
/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_MEM2 phyaddr
/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_MEM2 size
/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_MEM3 phyaddr
/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_MEM3 size
/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_LOGO_RESERVED_FB miuaddr
/opt/project/image/makefiletools/bin/mmapparser /opt/project/board/i2m/mmap/MMAP_I2M_128M.h i2m E_LX_LOGO_RESERVED_FB size

2 内核参数传递

内核启动会对应清除掉DTS对应的内存分配方式,采用bootargs对应的值。

console=ttyS0,115200 ubi.mtd=UBI,2048 root=ubi:rootfs rw rootfstype=ubifs init=/linuxrc rootwait=1 LX_MEM=0x7f00000 mma_heap=mma_heap_name0,miu=0,sz=0x3800000 mma_memblock_remove=1 highres=off mmap_reserved=fb,miu=0,sz=0x300000,max_start_off=0x7C00000,max_end_off=0x7F00000 mtdparts=nand0:384k@1280k(IPL0),384k(IPL1),384k(IPL_CUST0),384k(IPL_CUST1),768k(UBOOT0),768k(UBOOT1),256k(ENV),256k(ENV1),0x20000(KEY_CUST),0x60000(LOGO),0x500000(KERNEL),0x500000(RECOVERY),-(UBI)
  • E_LX_MEM的地址和大小 定义在MMAP_I2M_128M.h,如LX_MEM=0x7f00000
  • 堆栈的地址和大小 定义在spinand.glibc.011a.128: mma_heap=mma_heap_name0,miu=0,sz=0x3800000 mma_memblock_remove=1
  • FB的地址和大小 定义在MMAP_I2M_128M.h: mmap_reserved=fb,miu=0,sz=0x300000,max_start_off=0x7C00000,max_end_off=0x7F00000

2.1 堆栈调整

系统默认打印级别为2级,告警时会打印,/proc/mi_modules/mi_sys/debug_level。
手动设置级别3,KMSG都可以打印。
内核在分配内存时存在空间不够即可被发现,可用对bootline进行调整

  • 第一步 调整 mma_heap_name0的sz大小
    mma_heap=mma_heap_name0,miu=0,sz=0x3800000
  • 第二步 如果内存不够连续的大小,即第一步不成功,可以增加MMU功能利用碎片内存。
    mma_heap=MMU_MMA,miu=0,sz=0x380 0000 mma_heap=mma_heap_name0,miu=0,sz=0x100 0000 mma_memblock_remove=1
  • 第三步 分配情况可以通过 cat /proc/mi_modules/mi_sys_mma/MMU_MMA查看。

3 内存分配查看

3.1 内核工具查看

对应的参数可以在系统启动后通过/config/dump_mmap查看。

# /config/dump_mmap 
u32TotalSize:0x8in MI_SYSCFG_ShowMmap:98
in commonraw_proc_read:315 
in commonraw_proc_read:324
000000
u32Miu0Size:0x8000000
u32Miu1Size:0x0
u32MiuBoundary:0x40000000
u32MmapItemsNum:8
bIs4kAlign:1
bMiu1Enable:0
E_LX_MEM:GID=0,Addr=0x0,Size=0x7f00000,Layer=0,Align=0x1000,MemoryType=0x4,MiuNo=0,CMAID=0
E_MMAP_ID_DUMMY0:GID=1,Addr=0x0,Size=0x7c00000,Layer=1,Align=0x0,MemoryType=0x4,MiuNo=0,CMAID=0
E_LX_LOGO_RESERVED_FB:GID=2,Addr=0x7c00000,Size=0x300000,Layer=1,Align=0x1000,MemoryType=0x4,MiuNo=0,CMAID=0
E_MMAP_ID_DUMMY2:GID=3,Addr=0x7f00000,Size=0x100000,Layer=0,Align=0x0,MemoryType=0x4,MiuNo=0,CMAID=0
E_MMAP_ID_CMDQ:GID=4,Addr=0x7f00000,Size=0x20000,Layer=1,Align=0x1000,MemoryType=0x4,MiuNo=0,CMAID=0
E_MMAP_ID_GE_VQ:GID=5,Addr=0x7f20000,Size=0x20000,Layer=1,Align=0x1000,MemoryType=0x4,MiuNo=0,CMAID=0
E_MMAP_ID_AO:GID=6,Addr=0x7f40000,Size=0x4b000,Layer=1,Align=0x1000,MemoryType=0x4,MiuNo=0,CMAID=0
E_MMAP_ID_AI:GID=7,Addr=0x7f8b000,Size=0x4b000,Layer=1,Align=0x1000,MemoryType=0x4,MiuNo=0,CMAID=0
# 

3.2 SCA工具查看(基于MMAP_I2M_128M.h)

在这里插入图片描述
如果需要内存进行调整,官方建议最好通过该工具调整。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
共享内存是通过使用mmap将文件映射到进程的地址空间来实现的。对于Python中的mmap模块来说,它是通过映射同一个普通文件来实现共享内存的。一旦文件被映射到进程的地址空间中,进程就可以像访问内存一样对文件进行访问。具体来说,mmap函数将文件映射到进程的虚拟内存中的某个地址范围,这个地址范围就是共享内存的位置。在上面的代码示例中,使用mmap来创建共享内存时,通过传入NULL作为参数,让系统自动选择合适的地址来映射文件。因此,具体的映射地址是由操作系统来决定的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [mmap实现共享内存](https://blog.csdn.net/qq_21539375/article/details/124180661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python进程间通信之共享内存详解](https://download.csdn.net/download/weixin_38640150/14864869)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值