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



推荐阅读
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
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社区 版权所有