zoukankan      html  css  js  c++  java
  • android 分区layout以及虚拟内存布局-小结

    摘要

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

    DRAM:外部RAM

    ISRAM:内部RAM128K),(PL会跑在ISRAM里面,去初始化DRAMloadub映像到DRAM);


    目录

    1概述-分区layout以及虚拟内存布局

    一概述

    首先了解mt6573nand flash16分区结构:如下

    1.preloader:

    下载和程序启动引导,初始化EMIPLL...

    2.DSP_BL

    modem+dsp

    3.NVRAM

    是一个yaffs2的文件系统,保存硬件相关信息,如校准参数,MAC地址和IMEI--开机之后生成

    4.SECCFG

    保留安全平台配置参数

    5.UBOOT

    处理大多数硬件初始化和linux内核的调试-引导进入不同的开机模式(Meta,facorymodenormal,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:

    下载和程序启动引导,初始化EMIPLL…; RAW

    2.DSP_BL

    modem+dsp---RAW

    3.MBR

    主引导记录;定义在mediatek/source/misc/

    4.EBR1

    扩展分区1:存放NVRAMubRECOVERYandroid等定义在mediatek/source/misc/

    x.EBR2

    扩展分区2:也可以存放其他映像,取决与分区需要,如:EBR1raw类型的映像;EBR2放文件系统类型的映像。

    定义在mediatek/source/misc/

    5.NVRAM

    是一个yaffs的文件系统,保存硬件相关信息,如校准参数,MAC地址和IMEI---开机之后生成

    6.UBOOT

    处理大多数硬件初始化和linux内核的调试-引导进入不同的开机模式(Meta,facorymodenormal,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

    使用,对于SA11XXXscal,它用于设置机器映射。

    保留

    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,通常所有的平台都使用11的映射关系。这里是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(trunkmediatekplatformmt6575kernelcoreincludemach):

    #definePHYS_OFFSET 0x00A00000 2G

    #definePHYS_OFFSET 0x01600000 3G


    ------lowmem:就是linux最终可支配的物理内存大小。



    2)为什么是可用RAM空间245MB

    PS240348+10532k保留空间=245MB这个就是linux计算出来的总内存大小,尽管我们有256MB,剩余的11MB11264KB)呢?

    请看以下物理内存的分配(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

    组成:

    -------FBRESERVED_MEM_SIZE_FOR_FB 0x100000 =1MB

    fbdev->fb_pa_base = 0xff00000, fbdev->fb_va_base = cfa00000

    -------PMEMRESERVED_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+896kB+2048KB2MBDMA=2948KB

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

    系统启动完成之后,Freeinginit memoryInit.c(trunkkernelarcharmmm):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(trunkkernelarcharmmm):

    mem_init()----

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/liang123/p/6325494.html
Copyright © 2011-2022 走看看