摘要

简述启动过程的内存分配,各个映像的烧写,加载,logo的刷新,文件系统mount。

DRAM:外部RAM;

ISRAM:内部RAM(128K),(PL会跑在ISRAM里面,去初始化DRAM,loadub映像到DRAM);

目录

概述-分区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

:存放NVRAM,ub,RECOVERYandroid等定义在mediatek/source/misc/

x.EBR2

:也可以存放其他映像,取决与分区需要,如: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)布局:查看logA100P为例4Gb+2Gb

log:(A100p4Gb+2Gb256MB

[ 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

的映射关系。这里是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

3linux内存空间消耗分配情况简述,也就是说lowmem245MB(250880KB)又是如何分配的呢:

第一部分是:内核映像占据的空间,起始地址就为0xc0008000大小是6175KB。这里面内核本身不会被释放,也就是还占用。

第二部分是:其他映射区,(4+896)kB+2048KB(2MBDMA)=2948KB。

第三部分是:保留内存,大小:10532KB;作用:包括linux内核占用的代码数据段空间,initrd占用的空间以及一些平台相关的内存(boot的时候参数,系统管理内存的页表占用空间等等)。

系统启动完成之后,Freeinginit memoryInit.c(trunk\kernel\arch\arm\mm):void
free_initmem(void)

在这里会释放了176KB

A100P4Gb521MB+4Gb512MB))

1)查看整体内存使用情况

#cat/proc/meminfo

为何大于240348kB,多了764kB?如上面所言,系统启动完成之后,会从保留内存10532KB释放部分内存留给系统用。释放那些呢?

包括:.initinitrd(也就是根文件系统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()----》

android 分区layout以及虚拟内存布局-小结的更多相关文章

  1. Android Relative Layout 安卓相对布局详解

    思维导图可在幕布找到 1. 基础 如果在相对布局里,控件没有指明相对位置,则默认都是在相对布局的左上角: <TextView android:layout_width="wrap_co ...

  2. Android Studio分类整理res/Layout中的布局文件(创建子目录)

    res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...

  3. 14.Android之Layout布局学习

    Android布局主要有5种,接下来学习总结下. 1) 最常见的线性布局 LinearLayout 线性布局是Android布局中最简单的布局,也是最常用,最实用的布局. android:orient ...

  4. Xamarin.Android之简单的抽屉布局

    0x01 前言 相信对于用过Android版QQ的,应该都不会陌生它那个向右滑动的菜单(虽说我用的是Lumia) 今天就用Xamarin.Android实现个比较简单的抽屉布局.下面直接进正题. 0x ...

  5. Best Practices for Performance_3.Improving Layout Performance 优化布局

    http://developer.android.com/training/improving-layouts/index.html 1. 优化布局层次 1)  每增加一个View或者布局,都会增加额 ...

  6. Android笔记:DrawerLayout抽屉布局的使用

    DrawerLayout(抽屉布局),在各种app中经常出现,比如csdn.. 如下示,只要从屏幕侧边滑一下,或者点击左上角的图标,抽屉就会出来. DrawerLayout要点: 1.使用Drawer ...

  7. Android 自定义View及其在布局文件中的使用示例(二)

    转载请注明出处 http://www.cnblogs.com/crashmaker/p/3530213.html From crash_coder linguowu linguowu0622@gami ...

  8. android项目的结构和布局

    一.res文件夹 1.res文件夹用于存放Android的资源.包括:动画.静态图片.字符串.菜单.布局.视频.文件等. 1.drawable-ldpi:低分辨率图形(120像素/英寸) 2.draw ...

  9. Android UI学习 - FrameLayou和布局优化(viewstub)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://android.blog.51cto.com/268543/308090 Fram ...

随机推荐

  1. 【BZOJ】【1053】【HAOI2007】反素数ant

    搜索 经典搜索题目(其实是蒟蒻只会搜……vfleaking好像有更优秀的做法?) 枚举质数的幂,其实深度没多大……因为$2^32$就超过N了……而且质数不能取的太大,所以不会爆…… /******** ...

  2. 【BZOJ】【1011】【HNOI2008】遥远的行星

    神奇的思路题QAQ 玛雅看到这题我就醉了,什么玩意……5%的误差?果断膜拜@ydc神犇的题解: 就是因为不清楚如何应用那个答案误差不超过5%啦. 从没见过这么诡异的题一下就懵了,问到了方法之后都还半信 ...

  3. Beautiful People 分类: Brush Mode 2014-10-01 14:33 100人阅读 评论(0) 收藏

    Beautiful People Time Limit: 10000/5000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)   ...

  4. 4-Highcharts曲线图之时间轴折线图

    鼠标按住左键 左右移动可以试试<!DOCTYPE> <html lang='en'> <head> <title>4-Highcharts曲线图之时间轴 ...

  5. JavaScript之工厂方式 构造函数方式 原型方式讲解

    一.工厂方式可以为一个对象,创建多个实例. var oCar = new Object; oCar.color = "red"; oCar.doors=4; oCar.mpg=23 ...

  6. PHP event 事件机制

    PHP event 事件机制   <?php /* * PHP 事件机制 */ class baseClass{ private $_e; public function __set($name ...

  7. JSP 页面打印

    <HTML><HEAD><TITLE>javascript打印-打印页面设置-打印预览代码</TITLE> <META http-equiv=Co ...

  8. 百度面试题——top K算法

    需求 从一亿个数据中,找出其中最小的10个数. 分析 最笨的方法就是将这一亿个数据,按从小到大进行排序,然后取前10个.这样的话,即使使用时间复杂度为nlogn的快排或堆排,由于元素会频繁的移动,效率 ...

  9. JS加载时间线

    1.创建Document对象,开始解析web页面.解析HTML元素和他们的文本内容后添加Element对象和Text节点到文档中.这个阶段document.readyState = 'loading' ...

  10. 刷机(手机自带的recovery)

    recovery模式是手机系统的一个工程模式,用户通过同时按住开机键加home键,直到手机界面出现一个三角框里面一个感叹号即是进入了传说中的recovery模式,在这个模式中用户可以看到以下的内容(不 ...