热门标签 | 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总线上。



推荐阅读
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
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社区 版权所有