日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android 分区layout以及虚拟内存布局-小结

發(fā)布時(shí)間:2025/4/16 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 分区layout以及虚拟内存布局-小结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要

簡(jiǎn)述啟動(dòng)過(guò)程的內(nèi)存分配,各個(gè)映像的燒寫(xiě),加載,logo的刷新,文件系統(tǒng)mount

DRAM:外部RAM

ISRAM:內(nèi)部RAM128K),(PL會(huì)跑在ISRAM里面,去初始化DRAMloadub映像到DRAM);


目錄

1概述-分區(qū)layout以及虛擬內(nèi)存布局

一概述

首先了解mt6573nand flash16分區(qū)結(jié)構(gòu):如下

1.preloader:

下載和程序啟動(dòng)引導(dǎo),初始化EMIPLL...

2.DSP_BL

modem+dsp

3.NVRAM

是一個(gè)yaffs2的文件系統(tǒng),保存硬件相關(guān)信息,如校準(zhǔn)參數(shù),MAC地址和IMEI--開(kāi)機(jī)之后生成

4.SECCFG

保留安全平臺(tái)配置參數(shù)

5.UBOOT

處理大多數(shù)硬件初始化和linux內(nèi)核的調(diào)試-引導(dǎo)進(jìn)入不同的開(kāi)機(jī)模式(Meta,facorymodenormal,recover)

6.BOOTIMG

內(nèi)核和ramdiskfile的根文件系統(tǒng)打包在一起了(還有factory/adb/meta),是編譯生成boot.img來(lái)燒錄的

7.RECOVERY

是恢復(fù)模式鏡像區(qū),和boot類(lèi)似。

8.SEC_RO

安全區(qū)域

9.MISC

保存設(shè)備配置信息:CID(Carrier or Region ID),USB和其它硬件設(shè)備配置信息

10.LOGO

開(kāi)機(jī)logo區(qū)域

11.EXPDB

kernelpanic debug調(diào)試信息

12.ANDROID

是一個(gè)yaffs2的文件系統(tǒng),這里有/system/bin/system/sbin保存很多系統(tǒng)命令。它是由編譯出來(lái)的system.img來(lái)燒入.system系統(tǒng)分區(qū),啟動(dòng)后此鏡像掛載在根目錄下的system文件夾中,包含了所有主要的android系統(tǒng)文件。

13.CACHE

是一個(gè)yaffs2文件系統(tǒng),它將掛載到/cache目錄下,看一般解釋,這里主要用升級(jí)的緩存,內(nèi)容由運(yùn)行而定.

14.USRDATA

是一個(gè)yaffs2文件系統(tǒng),它將掛載到/data目錄下,它是由編譯出來(lái)的userdata.img來(lái)燒入是用戶安裝的軟件以及各種數(shù)據(jù),掛載為/data目錄,用戶自行安裝的軟件都在此。將會(huì)被掛接到/data下,包含了所有應(yīng)用相關(guān)的配置文件,以及用戶相關(guān)的數(shù)據(jù)nvram等參數(shù).

15.BMTPOOL

壞塊管理

EMMC分區(qū)信息:


1.preloader:

下載和程序啟動(dòng)引導(dǎo),初始化EMIPLL…; RAW

2.DSP_BL

modem+dsp---RAW

3.MBR

主引導(dǎo)記錄;定義在mediatek/source/misc/

4.EBR1

擴(kuò)展分區(qū)1:存放NVRAMubRECOVERYandroid等定義在mediatek/source/misc/

x.EBR2

擴(kuò)展分區(qū)2:也可以存放其他映像,取決與分區(qū)需要,如:EBR1raw類(lèi)型的映像;EBR2放文件系統(tǒng)類(lèi)型的映像。

定義在mediatek/source/misc/

5.NVRAM

是一個(gè)yaffs的文件系統(tǒng),保存硬件相關(guān)信息,如校準(zhǔn)參數(shù),MAC地址和IMEI---開(kāi)機(jī)之后生成

6.UBOOT

處理大多數(shù)硬件初始化和linux內(nèi)核的調(diào)試-引導(dǎo)進(jìn)入不同的開(kāi)機(jī)模式(Meta,facorymodenormal,recover)

7.BOOTIMG

內(nèi)核和ramdiskfile的根文件系統(tǒng)打包在一起了(還有factory/adb/meta),是編譯生成boot.img來(lái)燒錄的

8.RECOVERY

是恢復(fù)模式鏡像區(qū),和boot類(lèi)似。RAW

9.SEC_RO

安全區(qū)域--RAW

10.MISC

保存設(shè)備配置信息:CID(Carrier or Region ID),USB和其它硬件設(shè)備配置信息;RAW

11.LOGO

開(kāi)機(jī)logo區(qū)域-RAW

12.EXPDB

kernelpanic debug調(diào)試信息

13.ANDROID

是一個(gè)ext4的文件系統(tǒng),這里有/system/bin/system/sbin保存很多系統(tǒng)命令。它是由編譯出來(lái)的system.img來(lái)燒入.system系統(tǒng)分區(qū),啟動(dòng)后此鏡像掛載在根目錄下的system文件夾中,包含了所有主要的android系統(tǒng)文件。

14.CACHE

是一個(gè)ext4文件系統(tǒng),它將掛載到/cache目錄下,看一般解釋,這里主要用升級(jí)的緩存,內(nèi)容由運(yùn)行而定.

15.USRDATA

是一個(gè)ext4文件系統(tǒng),它將掛載到/data目錄下,它是由編譯出來(lái)的userdata.img來(lái)燒入是用戶安裝的軟件以及各種數(shù)據(jù),掛載為/data目錄,用戶自行安裝的軟件都在此。將會(huì)被掛接到/data下,包含了所有應(yīng)用相關(guān)的配置文件,以及用戶相關(guān)的數(shù)據(jù),nvram.

16.BMTPOOL

壞塊管理


1.1NAND flash信息

MT6573_BIN文件,包括以下一些文件,如果沒(méi)有,請(qǐng)打開(kāi)ProjectConfig.mk里面對(duì)應(yīng)的開(kāi)關(guān)。
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分區(qū)大小等信息

或者: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"

分區(qū)設(shè)備節(jié)點(diǎn):

#cat?/proc/partitions----->注意這里面顯示的分區(qū)索引:與PartInfo定義的一致,所以看不到全部的分區(qū)信息

#ls /dev/block/ ----->mtdblock13-0

sys信息:

cd/sys/block/只是鏈接文件

#ls-l

mtdblock0-> ../devices/virtual/mtd/mtd0/mtdblock0----真正的文件位置




1.2虛擬內(nèi)核內(nèi)存布局

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)


內(nèi)核空間

address

size

描述

機(jī)器映射

0xFfff8000-0xffffffff


copy_user_page/ clear_user_page use.

ForSA11xx and Xscale, this is used to

setupa minicache mapping

使用,對(duì)于SA11XXXscal,它用于設(shè)置機(jī)器映射。

保留

0xFfff1000-0xffff7fff


Reserved.保留,ARM平臺(tái)一定不使用這個(gè)區(qū)間。

Platformsmust not use this address range.

vector

0xffff0000- 0xffff1000

4kB

如果CPU支持向量重定向(控制寄存器的V位),則CPU中斷向量被映射到這里。

fixmap

0xfff00000- 0xfffe0000

896kB

固定映射區(qū),用來(lái)分配大頁(yè)內(nèi)存

DMA

0xffc00000- 0xffe00000

2MB

DMA內(nèi)存映射區(qū)間。由dma_ammoc_xxx系列函數(shù)返回的內(nèi)存會(huì)動(dòng)態(tài)的映射到這里。PS:最終還會(huì)到lowmem分配實(shí)際的物理內(nèi)存)

DMAreserve

0xff000000--0xffbfffff


Reservedfor future expansion of DMA mapping region.

保留,用于以后的DMA擴(kuò)展映射區(qū)間。

PS:用作PMEM+VMEMandroid+FB,實(shí)際映射了物理內(nèi)存。

Platformreserver

0xf0000001-0xfeffffff


Free forplatform use, recommended.用作其他硬件IO映射

VMALLOC_ENDmust be aligned to a 2MB boundary.

VMALLOC_END必須在2MB的邊界上對(duì)齊。

vmalloc

0xcf800000- 0xf0000000

520MB

虛擬內(nèi)存申請(qǐng)的地址范圍,實(shí)際大小

VMALLOC_END=0xf0000000must be aligned to a 2MB boundary.

VMALLOC_END必須在2MB的邊界上對(duì)齊。

lowmem

0xC0000000- 0xcf500000

245MB

直接物理內(nèi)存映射區(qū),它映射平臺(tái)的RAM,通常所有的平臺(tái)都使用11的映射關(guān)系。這里是245MB。大小=總物理內(nèi)存大小減去其他分區(qū)總和。

0xC0000000也就是PAGE_OFFSET內(nèi)核鏡像起始虛擬地址。

modules

0xbf000000- 0xc0000000

16MB

內(nèi)核模塊空間,內(nèi)核模塊通過(guò)insmod命令加載,會(huì)動(dòng)態(tài)的映射到這里。

.init

0xc0008000- 0xc0034000

176kB

內(nèi)核映像(系統(tǒng)啟動(dòng)過(guò)程中以__init宏標(biāo)識(shí)的函數(shù)占用的空間被vmlinux.lds標(biāo)識(shí)為__init_begin__init_end啟動(dòng)init進(jìn)程前被釋放掉)init函數(shù)的init段,內(nèi)核映像的虛擬起始地址:0xc0008000

.text

0xc0034000- 0xc05d1000

5748kB

內(nèi)核映像(同上) text函數(shù)的代碼段

.data

0xc05d2000- 0xc06108c0

251kB

內(nèi)核映像(同上) data函數(shù)的數(shù)據(jù)段 內(nèi)核映像的虛擬結(jié)束地址0xc06108c0大小:6175KB

用戶空間

0x00001000-0x0xc0000000

3G

用戶進(jìn)程空間


0x00000000 -0x00000fff


CPU向量表,NULL指針陷井

不支持向量重映射的CPU的向量表被映射到這里。用戶空間和內(nèi)核態(tài)的NULL指針引通過(guò)這個(gè)映射可以被捕獲。 

地址劃分,定義在/arch/arm/include/asm/memory.h

------首先明確物理內(nèi)存的起始地址:

Memory.h(trunk\mediatek\platform\mt6575\kernel\core\include\mach):

#definePHYS_OFFSET 0x00A00000 2G

#definePHYS_OFFSET 0x01600000 3G


------lowmem:就是linux最終可支配的物理內(nèi)存大小。



2)為什么是可用RAM空間245MB

PS240348+10532k保留空間=245MB這個(gè)就是linux計(jì)算出來(lái)的總內(nèi)存大小,盡管我們有256MB,剩余的11MB11264KB)呢?

請(qǐng)看以下物理內(nèi)存的分配(MTK默認(rèn)配置,實(shí)際上請(qǐng)看代碼里面的配置):


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內(nèi)存空間消耗分配情況簡(jiǎn)述,也就是說(shuō)lowmem245MB(250880KB)又是如何分配的呢:

第一部分是:內(nèi)核映像占據(jù)的空間,起始地址就為0xc0008000大小是6175KB。這里面內(nèi)核本身不會(huì)被釋放,也就是還占用。

第二部分是:其他映射區(qū),(4+896kB+2048KB2MBDMA=2948KB

第三部分是:保留內(nèi)存,大小:10532KB;作用:包括linux內(nèi)核占用的代碼數(shù)據(jù)段空間,initrd占用的空間以及一些平臺(tái)相關(guān)的內(nèi)存(boot的時(shí)候參數(shù),系統(tǒng)管理內(nèi)存的頁(yè)表占用空間等等)。

系統(tǒng)啟動(dòng)完成之后,Freeinginit memoryInit.c(trunk\kernel\arch\arm\mm):void free_initmem(void)

在這里會(huì)釋放了176KB


A100P4Gb521MB+4Gb512MB))

1)查看整體內(nèi)存使用情況

#cat/proc/meminfo

為何大于240348kB多了764kB?如上面所言,系統(tǒng)啟動(dòng)完成之后,會(huì)從保留內(nèi)存10532KB釋放部分內(nèi)存留給系統(tǒng)用。釋放那些呢?

包括:.initinitrd(也就是根文件系統(tǒng)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)內(nèi)存初始化

Init.c(trunk\kernel\arch\arm\mm):

mem_init()----

總結(jié)

以上是生活随笔為你收集整理的android 分区layout以及虚拟内存布局-小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。