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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现