無圖無真相,貼張MSM7627的內存分佈圖,一目瞭然:
由上圖可以看到,內存主要分給modem/bootloader/SMEM/pmem/Android幾個部分使用:
1、modem/bootloader/SMEM部分一般會佔用40M~50M的內存,上圖佔用了43M。這部分主要用於跑AMSS、bootloader及RPC。如果你有源碼的話,可以在device\qcom\msmxxx/Boardconfig.mk看到。還有一種方法,可以用adb pull /proc/config.gz .將config.gz文件dump下來,裏面可以看到分配給linux的內存大小,用物理內存總大小減去這部分,就可以得到這部分的內存總開銷。
2、Pmem一般會佔用40M的內存,上圖佔用了38M左右。系統的framebuffer\mdp\video等都會用到這部分memory。如果你有源碼的話,可以在kernel/arch/arm/mach-msm/Board-xxx.c文件中看到Pmem的分配情況。譬如:
#define MSM_PMEM_MDP_SIZE 0x1B76000
#define MSM_PMEM_ADSP_SIZE 0xAE4000
#define MSM_PMEM_AUDIO_SIZE 0x5B000
#define MSM_FB_SIZE 0x177000
#define MSM_GPU_PHYS_SIZE 0x177000
#define PMEM_KERNEL_EBI1_SIZE 0x1C000
3、最後是給用戶空間使用的memory,用free或者cat /proc/meminfo等命令看到的是這部分的memory大小。大小是之前第一步傳給linux kernel的memory大小減去pmem的佔用部分再減去linux kernel和ramdisk大小。