热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LinuxMMCFramework解析:Host对象的核心要素

本文深入探讨了LinuxMMC框架中的Host对象,详细介绍了其核心数据结构和API,旨在为理解和开发MMC设备驱动提供指导。

声明:本文部分资料和观点借鉴自http://www.wowotech.net/comm/mmc_host_driver.html,特此感谢原作者的贡献。



本文作为Linux MMC框架系列文章的第二篇,聚焦于Host对象的基础架构及其操作机制。


1. 核心数据结构与API

1.1 struct mmc_host

























元素名称struct mmc_host
路径include/linux/mmc/host.h
职责

在Linux内核中,struct mmc_host用于抽象表示MMC主机控制器。


属性

  • parent: 指向父设备的指针,通常是注册此mmc_host的平台设备。

  • class_dev: 表示MMC主机在设备模型中的设备实例,隶属于mmc_host_class类。

  • index: 主机控制器的索引号,用于区分系统中的多个主机控制器。

  • ops: 指向包含所有主机操作函数的结构体struct mmc_host_ops的指针。

  • f_min/f_max/f_init: 主机支持的最小、最大及初始时钟频率。

  • ocr_avail/ocr_avail_sdio/ocr_avail_sd/ocr_avail_mmc: 各种类型卡支持的电压范围。

  • pm_notify: 电源管理相关的通知块。

  • max_current_330/max_current_300/max_current_180: 支持的最大电流。

  • caps/caps2: 主机具备的能力和其他功能。

  • pm_caps: 支持的电源管理特性。

  • ... (其他属性省略)


操作

  • mmc_alloc_host: 分配并初始化一个mmc_host结构体。

  • mmc_add_host: 将主机设备注册到设备驱动模型中,并初始化硬件。

  • mmc_remove_host: 从设备驱动模型中移除主机设备,并断开所有卡与总线的连接。

  • mmc_free_host: 释放mmc_host结构体。

  • mmc_power_save_host: 对主机进行掉电处理。

  • mmc_power_restore_host: 恢复主机的上电状态。

  • mmc_detect_change: 检测MMC卡的状态变化。

  • mmc_request_done: 处理完一次请求后的回调函数。

  • ... (其他操作省略)




1.2 struct mmc_host_ops

























元素名称struct mmc_host_ops
路径include/linux/mmc/host.h
职责

该结构体定义了主机控制器必须实现的操作。


属性

  • post_req/pre_req: 支持双缓冲请求处理。

  • request: 处理一次传输请求。

  • set_ios: 设置I/O总线参数。

  • get_ro: 获取卡的读写状态。

  • get_cd: 检查卡是否插入。

  • enable_sdio_irq: 管理SDIO中断。

  • init_card: 初始化卡。

  • start_signal_voltage_switch: 开始信号电压切换。

  • card_busy: 检查卡是否忙。

  • execute_tuning: 执行调谐操作。

  • select_drive_strength: 设置驱动强度。

  • hw_reset: 硬件重置设备。

  • ... (其他属性省略)


操作

...




1.3 struct mmc_ios

























元素名称struct mmc_ios
路径include/linux/mmc/host.h
职责

该结构体定义了当前的I/O总线设置。


属性

  • clock: 当前时钟频率。

  • vdd: 供电电压。

  • bus_mode: 命令输出模式(开漏或推挽)。

  • chip_select: SPI片选模式。

  • power_mode: 电源模式。

  • bus_width: 总线宽度。

  • timing: 时序模式。

  • signal_voltage: 信号电压。

  • drv_type: 驱动类型。


操作

...




2. 关键流程

2.1 mmc_add_host



mmc_add_host ->
mmc_start_host ->
mmc_detect_change ->
mmc_rescan ->
mmc_rescan_try_freq ->
mmc_attach_mmc





  • mmc_add_host: 通常在驱动程序的probe函数中调用,用于注册并初始化SD/MMC设备。

  • mmc_start_host: 调用mmc_detect_change启动卡检测工作线程。

  • mmc_rescan: 处理边界情况,如卡检测禁用、不可移除卡等,然后调用mmc_rescan_try_freq进行卡扫描。

  • mmc_rescan_try_freq: 按照预设频率列表尝试卡的检测,最终调用mmc_attach_mmc。

  • mmc_attach_mmc: 完成卡的初始化,并将其注册到MMC总线上。



推荐阅读
author-avatar
袁冠芳彦源
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有