memory:arm 分区layout以及虚拟内存布局-小结
2019独角兽企业重金招聘Python工程师标准>>>
摘要
简述启动过程的内存分配,各个映像的烧写,加载,logo的刷新,文件系统mount。
DRAM:外部RAM;
ISRAM:内部RAM(128K),(PL会跑在ISRAM里面,去初始化DRAM,loadub映像到DRAM);
目录
1概述-分区layout以及虚拟内存布局
一概述
首先了解mt6573nand flash的16分区结构:如下
1.preloader: |
下载和程序启动引导,初始化EMI和PLL... |
2.DSP_BL |
modem+dsp |
3.NVRAM |
是一个yaffs2的文件系统,保存硬件相关信息,如校准参数,MAC地址和IMEI--开机之后生成 |
4.SECCFG |
保留安全平台配置参数 |
5.UBOOT |
处理大多数硬件初始化和linux内核的调试-引导进入不同的开机模式(Meta,facorymode,normal,recover) |
6.BOOTIMG |
内核和ramdiskfile的根文件系统打包在一起了(还有factory/adb/meta),是编译生成boot.img来烧录的 |
7.RECOVERY |
是恢复模式镜像区,和boot类似。 |
8.SEC_RO |
安全区域 |
9.MISC |
保存设备配置信息:CID(Carrier or Region ID),USB和其它硬件设备配置信息 |
10.LOGO |
开机logo区域 |
11.EXPDB |
kernelpanic debug调试信息 |
12.ANDROID |
是一个yaffs2的文件系统,这里有/system/bin和/system/sbin保存很多系统命令。它是由编译出来的system.img来烧入.system系统分区,启动后此镜像挂载在根目录下的system文件夹中,包含了所有主要的android系统文件。 |
13.CACHE |
是一个yaffs2文件系统,它将挂载到/cache目录下,看一般解释,这里主要用升级的缓存,内容由运行而定. |
14.USRDATA |
是一个yaffs2文件系统,它将挂载到/data目录下,它是由编译出来的userdata.img来烧入是用户安装的软件以及各种数据,挂载为/data目录,用户自行安装的软件都在此。将会被挂接到/data下,包含了所有应用相关的配置文件,以及用户相关的数据nvram等参数. |
15.BMTPOOL |
坏块管理 |
EMMC分区信息:
1.preloader: |
下载和程序启动引导,初始化EMI和PLL…; RAW |
2.DSP_BL |
modem+dsp---RAW |
3.MBR |
主引导记录;定义在mediatek/source/misc/ |
4.EBR1 |
扩展分区1:存放NVRAM,ub,RECOVERY,android等定义在mediatek/source/misc/ |
x.EBR2 |
扩展分区2:也可以存放其他映像,取决与分区需要,如:EBR1放raw类型的映像;EBR2放文件系统类型的映像。 定义在mediatek/source/misc/ |
5.NVRAM |
是一个yaffs的文件系统,保存硬件相关信息,如校准参数,MAC地址和IMEI---开机之后生成 |
6.UBOOT |
处理大多数硬件初始化和linux内核的调试-引导进入不同的开机模式(Meta,facorymode,normal,recover) |
7.BOOTIMG |
内核和ramdiskfile的根文件系统打包在一起了(还有factory/adb/meta),是编译生成boot.img来烧录的 |
8.RECOVERY |
是恢复模式镜像区,和boot类似。RAW |
9.SEC_RO |
安全区域--RAW |
10.MISC |
保存设备配置信息:CID(Carrier or Region ID),USB和其它硬件设备配置信息;RAW |
11.LOGO |
开机logo区域-RAW |
12.EXPDB |
kernelpanic debug调试信息 |
13.ANDROID |
是一个ext4的文件系统,这里有/system/bin和/system/sbin保存很多系统命令。它是由编译出来的system.img来烧入.system系统分区,启动后此镜像挂载在根目录下的system文件夹中,包含了所有主要的android系统文件。 |
14.CACHE |
是一个ext4文件系统,它将挂载到/cache目录下,看一般解释,这里主要用升级的缓存,内容由运行而定. |
15.USRDATA |
是一个ext4文件系统,它将挂载到/data目录下,它是由编译出来的userdata.img来烧入是用户安装的软件以及各种数据,挂载为/data目录,用户自行安装的软件都在此。将会被挂接到/data下,包含了所有应用相关的配置文件,以及用户相关的数据,nvram等. |
16.BMTPOOL |
坏块管理 |
1.1NAND flash信息
MT6573_BIN文件,包括以下一些文件,如果没有,请打开ProjectConfig.mk里面对应的开关。
boot.img
DSP_BL
logo.bin
MT6573_Android_scatter.txt
preloader_XXX_gb.bin
recovery.img
secro.img
system.img
uboot_XXX_gb.bin
userdata.img
命令:#cat/proc/mtd----->查看NAND分区大小等信息
或者:cat emmc
A1000
root@android :/proc# cat emmc
partno: start_sect nr_sects partition_name
emmc_p1:00000020 00000002 "ebr1"
emmc_p2:0000ac40 00002800 "sec_ro"
emmc_p3:00010740 000c0000 "android"
emmc_p4:000d0f40 000d6800 "cache"
emmc_p5:001a7f40 0018f800 "usrdata"
emmc_p6:00337f40 004039c0 "fat"
分区设备节点:
#cat /proc/partitions----->注意这里面显示的分区索引:与PartInfo定义的一致,所以看不到全部的分区信息
#ls /dev/block/ ----->mtdblock13-0
sys信息:
cd/sys/block/只是链接文件
#ls-l
mtdblock0-> ../devices/virtual/mtd/mtd0/mtdblock0----真正的文件位置
1.2虚拟内核内存布局
1)布局:查看log(A100P为例4Gb+2Gb)
log:(A100p)4Gb+2Gb(256MB)
[ 0.000000] Memory: 240348k/240348k available,10532k reserved,0K highmem:
[ 0.000000] Virtual kernel memory layout:
[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[ 0.000000] fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
[ 0.000000] DMA : 0xffc00000 - 0xffe00000 ( 2 MB)
[ 0.000000] vmalloc : 0xcf800000 - 0xf0000000 ( 520 MB)
[ 0.000000] lowmem : 0Xc0000000 - 0xcf500000 ( 245 MB)
[ 0.000000] modules : 0xbf000000 - 0xc0000000 ( 16 MB)
[ 0.000000] .init : 0xc0008000 - 0xc0034000 ( 176 kB)
[ 0.000000] .text : 0xc0034000 - 0xc05d1000 (5748 kB)
[ 0.000000] .data : 0xc05d2000 - 0xc06108c0 ( 251 kB)
内核空间 |
address |
size |
描述 |
机器映射 |
0xFfff8000-0xffffffff |
copy_user_page/ clear_user_page use. ForSA11xx and Xscale, this is used to setupa minicache mapping。 使用,对于SA11XX和Xscal,它用于设置机器映射。 |
|
保留 |
0xFfff1000-0xffff7fff |
Reserved.保留,ARM平台一定不使用这个区间。 Platformsmust not use this address range. |
|
vector |
0xffff0000- 0xffff1000 |
4kB |
如果CPU支持向量重定向(控制寄存器的V位),则CPU中断向量被映射到这里。 |
fixmap |
0xfff00000- 0xfffe0000 |
896kB |
固定映射区,用来分配大页内存 |
DMA |
0xffc00000- 0xffe00000 |
2MB |
DMA内存映射区间。由dma_ammoc_xxx系列函数返回的内存会动态的映射到这里。(PS:最终还会到lowmem分配实际的物理内存) |
DMAreserve |
0xff000000--0xffbfffff |
Reservedfor future expansion of DMA mapping region. 保留,用于以后的DMA扩展映射区间。 PS:用作PMEM+VMEMandroid+FB,实际映射了物理内存。 |
|
Platformreserver |
0xf0000001-0xfeffffff |
Free forplatform use, recommended.用作其他硬件IO映射 VMALLOC_ENDmust be aligned to a 2MB boundary. VMALLOC_END必须在2MB的边界上对齐。 |
|
vmalloc |
0xcf800000- 0xf0000000 |
520MB |
虚拟内存申请的地址范围,实际大小 VMALLOC_END=0xf0000000must be aligned to a 2MB boundary. VMALLOC_END必须在2MB的边界上对齐。 |
lowmem |
0xC0000000- 0xcf500000 |
245MB |
直接物理内存映射区,它映射平台的RAM,通常所有的平台都使用1:1的映射关系。这里是245MB。大小=总物理内存大小减去其他分区总和。 0xC0000000也就是PAGE_OFFSET内核镜像起始虚拟地址。 |
modules |
0xbf000000- 0xc0000000 |
16MB |
内核模块空间,内核模块通过insmod命令加载,会动态的映射到这里。 |
.init |
0xc0008000- 0xc0034000 |
176kB |
内核映像(系统启动过程中以__init宏标识的函数占用的空间被vmlinux.lds标识为__init_begin__init_end启动init进程前被释放掉)init函数的init段,内核映像的虚拟起始地址:0xc0008000 |
.text |
0xc0034000- 0xc05d1000 |
5748kB |
内核映像(同上) text函数的代码段 |
.data |
0xc05d2000- 0xc06108c0 |
251kB |
内核映像(同上) data函数的数据段 内核映像的虚拟结束地址0xc06108c0大小:6175KB |
用户空间 |
0x00001000-0x0xc0000000 |
3G |
用户进程空间 |
0x00000000 -0x00000fff |
CPU向量表,NULL指针陷井 不支持向量重映射的CPU的向量表被映射到这里。用户空间和内核态的NULL指针引通过这个映射可以被捕获。 |
地址划分,定义在/arch/arm/include/asm/memory.h
------首先明确物理内存的起始地址:
Memory.h(trunk\mediatek\platform\mt6575\kernel\core\include\mach):
#definePHYS_OFFSET 0x00A00000 2G
#definePHYS_OFFSET 0x01600000 3G
------lowmem:就是linux最终可支配的物理内存大小。
2)为什么是可用RAM空间245MB?
PS:240348+10532k保留空间=245MB这个就是linux计算出来的总内存大小,尽管我们有256MB,剩余的11MB(11264KB)呢?
请看以下物理内存的分配(MTK默认配置,实际上请看代码里面的配置):
log:(mt6575_dev.c)
[ 1.678067] PMEM start: 0xff00000 size: 0x0
[ 1.678925] android_pmem: probe of android_pmem.1 failed with error-1
[ 1.679754] VMEM start: 0xff00000 size: 0x0
组成:
-------FB:RESERVED_MEM_SIZE_FOR_FB 0x100000 =1MB
fbdev->fb_pa_base = 0xff00000, fbdev->fb_va_base = cfa00000
-------PMEM:RESERVED_MEM_SIZE_FOR_PMEM 0x0 =0MB
start:0xff00000 size: 0x0
-------modem:RESERVED_MEM_MODEM 0xa00000==10MB
FB+PMEM+modem=11MB
3)linux内存空间消耗分配情况简述,也就是说lowmem245MB(250880KB)又是如何分配的呢:
第一部分是:内核映像占据的空间,起始地址就为0xc0008000大小是6175KB。这里面内核本身不会被释放,也就是还占用。
第二部分是:其他映射区,(4+896)kB+2048KB(2MBDMA)=2948KB。
第三部分是:保留内存,大小:10532KB;作用:包括linux内核占用的代码数据段空间,initrd占用的空间以及一些平台相关的内存(boot的时候参数,系统管理内存的页表占用空间等等)。
系统启动完成之后,Freeinginit memory:Init.c(trunk\kernel\arch\arm\mm):void free_initmem(void)
在这里会释放了176KB。
如A100P(4Gb(521MB)+4Gb(512MB))
1)查看整体内存使用情况
#cat/proc/meminfo
为何大于240348kB,多了764kB?如上面所言,系统启动完成之后,会从保留内存10532KB释放部分内存留给系统用。释放那些呢?
包括:.init,initrd(也就是根文件系统ramdisk.img=588KB)。
176+588=764kB
MemTotal: 241112 kB
MemFree: 24688 kB
Buffers: 0 kB
Cached: 67936 kB
SwapCached: 0 kB
Active: 116160 kB
Inactive: 51116 kB
Active(anon): 99384 kB
….
VmallocTotal: 532480 kB--------520Mb
VmallocUsed: 99508 kB
VmallocChunk: 413700 kB
2)查看IOMEM分配情况:
#cat/proc/iomem
3)查看vmallocinfo
#cat/proc/vmallocinfo
4)内存初始化
Init.c(trunk\kernel\arch\arm\mm):
mem_init()----》
转载于:https://my.oschina.net/weichou/blog/548048
memory:arm 分区layout以及虚拟内存布局-小结相关推荐
- android 分区layout以及虚拟内存布局-小结
摘要 简述启动过程的内存分配,各个映像的烧写,加载,logo的刷新,文件系统mount. DRAM:外部RAM: ISRAM:内部RAM(128K),(PL会跑在ISRAM里面,去初始化DRAM,lo ...
- HenCoder Android UI 部分 2-3 定制 Layout 的内部布局
这期是 HenCoder 布局部分的最后一期:重写 onMeasure() 和 onLayout() 来定制 Layout 的内部布局. 简介 这期虽然距离上期的时间比较久,但主要是我的个人原因,而不 ...
- android如何引用布局,android 动态布局与引用第三方layout中的布局
引用第三方layout中的布局LinearLayout rightContentView = (LinearLayout) findViewById(R.id.lyt_chat_content); V ...
- 固定布局(fixed layout)、流体布局(fluid layout)、弹性布局(elastic layout)、响应布局(responsive layout)理解和技巧归纳
关于web页面布局,首先简单了解一下固定布局(fixed layout).流体布局(fluid layout).弹性布局(elastic layout).响应布局(responsive layout) ...
- android设置高度比例,android开发layout按比例布局(详解)
释放双眼,带上耳机,听听看~! 由于Android的复杂性,在写程序的时候经常会遇见一些难题,也可能会遇见处理不了的问题,下面是技术狗小编详解android layout 按比例布局的代码,一起进入下 ...
- LayoutInflater将layout的xml布局文件实例化为View对象
LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: LayoutInflater inflater=(Layo ...
- Unity/Auto Layout -- 理解Layout Elements(布局元素)
前言 在UGUI1中,Canvas下的每个GameObject都会自动添加 Rect Transform 组件来控制自身的位置和大小.通常情况下,基于Rect Transform的布局系统已经足够灵活 ...
- AOS虚拟内存布局、进程线程
文章目录 前言 一.用户进程虚拟内存地址空间 二.tadm时间管理员之CPU调度 三.用户进程CPU虚拟设备v节点结构 四.processes virtual device进程虚拟设备v节点结构 总结 ...
- linux swap分区与内存,虚拟内存和swap分区的关系
首先,这两个概念分别对应windows和linux,即: windows:虚拟内存 linux:swap分区 windows即使物理内存没有用完也会去用到虚拟内存,而Linux不一样 Linux只有当 ...
最新文章
- PSM-省电模式(PowerSaving Mode)
- jboss1.7_在JBoss Fuse / Fabric8 / Karaf中使用Byteman
- Eclipse 常用快捷键-java
- Tomcat服务脚本
- java查询SQLServer遇到问题:对象名无效。
- 【Java从0到架构师】SpringMVC - 异常处理_拦截器
- python优秀源码新闻系统_[内附完整源码和文档] 基于python的新闻检索系统
- 在React / React Native中使用构造函数与getInitialState有什么区别?
- scrapy爬取动态网页_scrapy_splash 爬取 js 加载网页初体验
- 提高查询效率,了解SQL的索引管理规则
- i7 8750h支持linux,开启游戏本六核时代!酷睿i7-8750H处理器性能实测
- 用java实现mysql数据可视化_java可视化界面操作数据库编程.doc
- 史上最全论文下载方法
- Outlook设置自动存档
- Unity支持的C#版本
- 爬取煎蛋网图片的一种思路
- web前端整套面试题(二)--今日头条面试题
- html+css仿QQ邮箱静态界面
- SSD1963+STM32F4+RGB565 TFT调试
- 基于NodeJS+VUE+Mysql的大学生校园疫情防控管理系统