(一)添加分区代码调用流程
./drivers/mmc/card/block.c
mmc_blk_probe
/*Murphy.liu note: 为EMMC分配和设置mmc_blk_data */
md = mmc_blk_alloc(card);
/*Murphy.liu note:
* EMMC上有多个物理分区,这里用于为这些物理分区(例如rpmb分区)分配和设置mmc_blk_data
*/
mmc_blk_alloc_parts
/*Murphy.liu note:
* 将mmc_blk构造的gendisk注册到系统中,生成对应的块设备
*/
mmc_add_disk
add_disk
register_disk
blkdev_get
__blkdev_get
//Murphy.liu note:循环把所有分区都add
rescan_partitions
//Murphy.liu note:获取分区信息(起始扇区,总扇区数)
check_partition
/*Murphy.liu note:
* add_partition,是添加EMMC分区信息的函数,负责向EMMC数据结构添加一个新的分区
*/
add_partition
所以按照这个调用流程可以知道rescan_partitions这个函数是添加分区的关键性函数
而其中的add_partition更是重中之重
(二)rescan_partitions
int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
{