MMC总线
用mmc子系统统一管理mmc(比如emmc),sd(比如sd卡),sdio(强调接口,另一端可是蓝牙,wifi等)等设备
核心层
/dricer/mmc/core.c将sd卡,mmc卡的共性抽象出来,特性则由struct mmc_bus_ops类型的mmc_sd_ops和mmc_ops和mmc_sdio_ops来实现;通过检测端口连接的设备,来给控制器绑定不同的总线操作,而不是像i2c的总线操作是固定的
主机控制器层
会向核心层注册控制器mmc_hos被封装成platform_device;struct mmc_host_ops用来描述控制器操作集,并向核心层注册操作集;利用 bus_register() 注册 mmc_bus_type 。对应sysfs下的 /sys/bus/mmc/ 目录;利用 class_register() 注册 mmc_host_class 。对应sysfs下的 /sys/class/mmc_host 目录;当控制器匹配到控制器驱动会调用其.probe生成其端口上的mmc_card
设备驱动注册
Bus_type mmc_driver mmc_card
mmc_bus_type
sdio_bus_type
drivers/mmc/core/block.c 是一个块设备驱动,它将 mmc_driver 注册到 mmc_bus 对应的总线系统里;通过 register_blkdev() 向内核注册块设备号;通过mmc_register_driver将mmc_driver注册到对应总线,当match上mmc_card上时,会执行mmc_blk_porbe,其包含了对块设备的其他注册操作:blk_init_queue()/blk_alloc_queue()初始化请求队列 ;alloc_disk()分配gendisk结构,并进行初始化;add_disk()添加gendisk