MMC总线

mmc子系统统一管理mmc(比如emmc,sd(比如sd卡),sdio(强调接口,另一端可是蓝牙,wifi等)等设备

核心层

/dricer/mmc/core.csd卡,mmc卡的共性抽象出来,特性则由struct mmc_bus_ops类型的mmc_sd_opsmmc_opsmmc_sdio_ops来实现;通过检测端口连接的设备,来给控制器绑定不同的总线操作,而不是像i2c的总线操作是固定的

 

主机控制器层

会向核心层注册控制器mmc_hos被封装成platform_devicestruct 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_drivermmc_driver注册到对应总线,当matchmmc_card上时,会执行mmc_blk_porbe,其包含了对块设备的其他注册操作:blk_init_queue()/blk_alloc_queue()初始化请求队列 ;alloc_disk()分配gendisk结构,并进行初始化;add_disk()添加gendisk 

 

 

posted on 2022-03-08 21:56  lzd626  阅读(208)  评论(0编辑  收藏  举报