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)
如果需要内存进行调整,官方建议最好通过该工具调整。