android emmc生产日期,碎碎念android eMMC【转】
一、/dev/block
root@:/dev/block #ls
bootdevice
mmcblk0
mmcblk0p1
mmcblk0p10
…….
mmcblk0p18
mmcblk0p19
mmcblk0p2
mmcblk0p20
……
mmcblk0p29
mmcblk0p3
mmcblk0p30
……
mmcblk0rpmb
platform
dd命令直接操作
分区的创建过程:
LK获取分区信息
smem_ptable_init()从SMEM的entry SMEM_AARM_PARTITION_TABLE中读取分区信息,保存在smem_ptable结构中(hard coded)。调用smem_add_modem_partitions()将smem_ptable中的内容解析出来保存在flash_ptable中.
将分区信息传递给kernel
Lk将分区信息打包成atag形式传递给kernel,让kernel知道分区信息。
target_atag_mem()->flash_get_ptable()
Kernelget the partition info and add partition:
blkdev_get_by_path()->blkdev_get()->__blkdev_get()->
rescan_partitions()->add_partition()
/dev/block/bootdevice/by-name/xxx,目录及后面的链接是在userspace的init进程中创建出来的,init收到增加新分区的uevent事件后,构造出以上by-name下的文件。
Code:system/core/init/devices.c
Function:parse_platform_block_device(structuevent*uevent)
二、/sys/class/mmc_host/mmc0/mmc0:0001
root@:/sys/class/mmc_host/mmc0/mmc0:0001#ls
block
cid
csd
date
driver
enhanced_area_offset
enhanced_area_size
erase_size
fwrev
hwrev
manfid
name
oemid
power
preferred_erase_size
prv
raw_rpmb_size_mult
rel_sectors
runtime_pm_timeout
serial
subsystem
type
uevent
三、/sys/block/mmcblk0
root@:/sys/block/mmcblk0 #ls
alignment_offset
bdi
bkops_check_threshold
capability
dev
device
discard_alignment
ext_range
force_ro
holders
inflight
mmcblk0p1
mmcblk0p10
……
mmcblk0p9
mmcblk0rpmb
no_pack_for_random
num_wr_reqs_to_start_packing
power
queue
range
removable
ro
Size // emmc size = Size * 512Btye
slaves
stat
subsystem
uevent
四、/proc/partitions
root@:/proc # cat partitions
major minor #blocks name
253 0 486188 zram0
179 0 15267840 mmcblk0 //emmc size,单位KB
179 1 65536 mmcblk0p1
179 2 512 mmcblk0p2
179 3 512 mmcblk0p3
179 15 16 mmcblk0p15
179 16 20480 mmcblk0p16
……
179 26 2097152 mmcblk0p26
179 27 512 mmcblk0p27
179 28 32 mmcblk0p28
179 29 65536 mmcblk0p29
179 30 268288 mmcblk0p30
179 31 12312559 mmcblk0p31
179 32 4096 mmcblk0rpmb
五、多种size规格eMMC兼容方案一:利用文件系统自身resize功能
mountdata之前,比较super block的size与block deviceszie,不一样就去resize。
六、多种size规格eMMC兼容方案之二:第一次开机format data分区
如果使用的filesystem没有resize功能,比如f2fs, fat32等。
那只能采用此种办法啦:
不下载userdata.img
mountdata之前,fs_mgrservice判断是否会第一次开机,如果是,则启动format
system/core/fs_mgr
七、存储空间保护,防止空间满导致系统启动异常
内置sd卡保护:
fuse增加保护,内置sd卡最大可写容量data total size-reserved(50MB)
Code:system/core/sdcard/sdcard.c
#define LIMIT_SDCARD_SIZE
MTP保护:
Mtpservice增加保护,PC可写的最大可写容量internalsdcardfs total size-reserved
code:frameworks/base/services/java/com/android/server/MountService.java
FileSystem保护:
Ext4文件系统增加保护,保留16MB给uid<= 10010的使用
Code:kernel/fs/ext4/balloc.c
init.{platform}.rc:exec /system/bin/tune2fs -Ohas_journal -u 10010 -r 4096 /dev/block/platform/mtk-msdc.0/by-name/userdata
resv_clusters: -r 4096=4096blocks=4096*4096=16MB
dirty_clusters: default 16M当flags有EXT4_MB_USE_RESERVED才可写
sbi->s_resuid:-u10010
sbi->s_resgid:tune2fs没有传递default0
八、eMMC workload & performance of mtk log
1.Workload是根据什么计算出来的呢?
500ms内花在io上的时间比例
/kernel/drivers/mmc/card/block.c
static intmmc_blk_issue_rw_rq(structmmc_queue *mq,struct request *rqc)
xlog_printk(ANDROID_LOG_DEBUG,"BLOCK_TAG", "mmcqd:%d Workload=%d%%, duty %lld,period %lld00, req_cnt=%d \n",mmcqd[idx],t_percent,t_usage,t_period,mmcqd_rq_count[idx]);
2.能否知道主要哪个app占得workload?
/kernel/drivers/mmc/card/block.c
static intmmc_blk_issue_rw_rq(structmmc_queue *mq,struct request *rqc)
sprintf (g_pid_logger[index].pid_buffer+i*37,"{%05d:%05d:%08d:%05d:%08d}",g_pid_logger[index].pid_logger[i],g_pid_logger[index].pid_logger_counter[i],g_pid_logger[index].pid_logger_length[i],g_pid_logger[index].pid_logger_r_counter[i],g_pid_logger[index].pid_logger_r_length[i]);
如 {26626:00000:00000000:00878:03596288}含义:pid为26626的进程500ms内read3512KB(03596288)的数据,write0KB的数据。
可以查看某段时间内,各个进程读写的情况,进而判断是哪个进程占用的worload比较高;
3. 当workload比较高的时候,log打印read、write也比较高,能否说明emmc是没有问题的?
<6>[16656.919474] (5)[142:mmcqd/0][BLOCK_TAG]mmcqd:142 Workload=63%, duty 317163907, period 500889000, req_cnt=1426
<6>[16656.919483] (5)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 WriteDiversity=5553653 sectors offset, req_cnt=12, break_cnt=0, tract_cnt=0,bit_cnt=0
<6>[16656.919534] (0)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 ReadDiversity=607567 sectors offset, req_cnt=1414, break_cnt=0, tract_cnt=0,bit_cnt=0
<6>[16656.919565] (0)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 WriteThroughput=69222 kB/s, size: 692224 bytes, time:10 ms
<6>[16656.919617](0)[142:mmcqd/0][BLOCK_TAG] mmcqd:142 Read Throughput=93819 kB/s, size:28708864 bytes, time:306 ms
是的。从log看,eMMC的performance还可以。
workload高不一定是eMMC性能差导致,最近发现内存泄漏也可能导致workload高!
qcom 平台也有类似机制,参考:CONFIG_MMC_PERF_PROFILING
mmc debug log 需要请打开CONFIG_MMC_DEBUG
九、eMMC ext_csd
root@:/sys/kernel/debug/mmc0/mmc0:0001# catext_csd
十、eMMC HS200 & HS400
AP CPU 和 eMMC 同时支持HS400 ,HS400 performance才能发挥出来!否则还是HS200 .
十一、eMMC cache
cache对emmc write performance影响很大,使能它。
十二、 eMMC Cmd Queue
选择支持Cmd Queue功能的eMMC极大地提供随机读写能力。
android emmc生产日期,碎碎念android eMMC【转】相关推荐
- android谷歌补丁日期,在谷歌日历Android中添加开始日期和结束日期之间所有日期的事件...
在谷歌日历 Android中添加开始日期和结束日期之间所有日期的事件.我希望每3个月剩余一次,直到结束日期. 这是我的功能 public void addEvent1(Context ctx, Str ...
- android怎么用edittext得到日期_minon蜜浓保湿乳液怎么用批号看生产日期?minon蜜浓保湿乳液保质期有多长时间?...
minon蜜浓是一个日系的开架化妆品牌,和经典的开架彩妆canmake一样,minon蜜浓是专门生产护肤品的品牌.主要是针对于干燥敏感肌,所以大部分的产品都是以滋润修护为主.minon蜜浓面膜有一段时 ...
- 每月碎碎念 | 2019.08
Hi,这里是新开辟的"碎碎念"的世界. 这个区域作为记录心情的地方,把每日的所思所想所感所悟记录在这里,当做一个写日记的地方,每个月底汇总成一篇文章,只给我的朋友看. 不知不觉一个 ...
- 一个谷粉和3年的Google Reader重度使用者的碎碎念
2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...
- 每月碎碎念 | 2019.6
Hi,这里是新开辟的"碎碎念"的板块. 这个区域作为记录心情的地方,把每日的所思所想所感所悟以及看到的比较有价值的文字记录在这里,当做一个写日记,分享价值的地方,每个月底汇总成一篇 ...
- 前端碎碎念 之 nextTick, setTimeout 以及 setImmediate 三者的执行顺序
『前端碎碎念』系列会记录我平时看书或者看文章遇到的问题,一般都是比较基础但是容易遗忘的知识点,你也可能会在面试中碰到. 我会查阅一些资料并可能加上自己的理解,来记录这些问题.更多文章请前往我的个人博客 ...
- 参加海峡两岸城市地理信息系统论坛2010 年会(一张图、规划信息化和空间句法的碎碎念)...
上周末去清华建筑学院开了个会,叫做海峡两岸城市地理信息系统论坛2010 年会,主题很大,但是内容比较集中一些,就是围绕着GIS与城市规划.一天下来听了20个报告,挺佩服主办方的时间控制,这么密集的报告 ...
- Jerry的碎碎念:SAPUI5, Angular, React和Vue
2019独角兽企业重金招聘Python工程师标准>>> 去年我去一个国内客户现场时,曾经和他们IT部门的一位架构师聊到关于在SAP平台上进行UI应用的二次开发时,UI框架是选用UI5 ...
- PMcaff写给大家的年终碎碎念 PMcaff | 记录
今天是大年三十,2014马上就要结束了,送上新春祝福之前,碎碎念的小希有话想跟大家说. 瞧这一年 小米在硬件行业继续如鱼得水,科幻片里的智能家居生慢慢变成生活. 阿里巴巴在纳克达斯扬眉吐气了一把,一夜 ...
最新文章
- 监控摄像头服务器维护要多久,监控摄像机如何维护 这几点要牢记
- 清除administrator密码 方法
- Ext.data.Connection
- Oracle数据类型Long需要注意的问题
- SAP UI5和微信小程序对比之我见
- scala List源码
- 如何实现C#.net图像处理
- Windows 7 卸载 IE10
- tp5 mysql异常捕获_tp5 ThinkPhp5 自定义异常处理类
- 转盘抽奖 canvas 抽奖 H5 源码
- 智能电话机器人--基于 UniMRCP 实现讯飞 TTS MRCP Server
- 计算机网络:随机访问介质访问控制之CSMA/CA协议
- python中test是什么意思_Python unittest 之一: 什么是单元测试
- 复旦大学python教学视频_B站资源推荐:复旦大学机器学习、深度学习公开课,附PDF课件下载...
- 微信小程序(登录、分享、支付)
- 征信衍生、信用卡数据场景如何做好分析,这一种时序特征方法得学学|金融信用分析师必学内容
- 惠普喷墨打印机Smart Tank 519打印错误的解决
- 无人驾驶技术——无损卡尔曼滤波(UKF)
- 【AdaBoost算法】
- OO ALV简单报表之DOCKING容器实现
热门文章
- 怎么用计算机求浮动额,2015计算机一级考试MSOFFICE上机综合训练(5)
- c语言脸型图案,[转载]各种脸型的分析及修饰
- arm linux dma_alloc_coherent 实现,dma_alloc_coherent (建立一致性 DMA 映射函数)
- python获取app信息的库_基于python3抓取pinpoint应用信息入库
- java 快速删除文件夹_如何用Java删除文件夹里的所有文件?
- java修改异常状态码_RxJava2 + Retrofit2 完全指南 之 统一状态码/Exception处理
- 小程序资源服务器,开发小程序没有服务器资源
- 计算机彻底删除删除后如何恢复,如何完全恢复从计算机删除的文件?
- Oracle 表的移动和索引的重建
- vim 删除,复制和粘贴