[笔记分享] [eMMC] 内核eMMC分区及对应名字读取

Chipset: msm8926
OS: Android4.4
Kernel: 3.4.0

在N久之前的会议上留下了两个问题:
1. 内核在加载emmc驱动时是如何知道当前有几个分区的?
2. 如何知道/dev/mmcblkXpX对应的是哪个分区呢?

读取分区

加载sd/emmc驱动的时候,有如下流程:
[笔记分享] [eMMC] 内核eMMC分区及对应名字读取_第1张图片
来看看Check_partition():
[笔记分享] [eMMC] 内核eMMC分区及对应名字读取_第2张图片

核心的部分是check_part这个结构体,里面放的都是对应的解析分区的算法:
[笔记分享] [eMMC] 内核eMMC分区及对应名字读取_第3张图片
算法不是我们需要关注的,解析哪一块区域等小弟看了partition再给大家解释吧。
解析完成之后放到struct parsed_partitions也就是这里的state变量的parts元素里:
[笔记分享] [eMMC] 内核eMMC分区及对应名字读取_第4张图片
然后通过add_partition()将这些part信息添加到disk里去。

有多少分区可以从开机Log看到:
这里写图片描述
确实我们在8926平台上定义的分区个数是34个:
[non_hlos\common\build\partition_f5.xml]
[笔记分享] [eMMC] 内核eMMC分区及对应名字读取_第5张图片

分区对应label

其实Linux已经在/dev/block下提供了查看方法:
[笔记分享] [eMMC] 内核eMMC分区及对应名字读取_第6张图片

从本质上来说,这些信息是从解析出来的struct parsed_partitions中的info变量获取的:
这里写图片描述
对应的volname存的就是分区的label name.

                                                    Kris.Fei
                                                    2014/09/11

你可能感兴趣的:(子类_Kernel)