Linux MMC子系统(1)-- MMC Host层(2.6.28)

【MMC子系统】三、MMC子系统框架 MMC子系统的框架MMC子系统的文件结构MMC设备在Linux下的文件分布下章,我们来详细了解MMC子系统的代码实现部分。欢迎关注 公号&星球【嵌入式艺术】,董哥原创! 阅读详情


Linux 的 MMC驱动主要管理MMC卡/SD卡,从上到下分为了MMC设备层,MMC Core层,MMC Host层,Host层负责底层硬件:

如下:
        /dev下设备文件访问MMC/SD/SDIO
用户空间             |
---------------------|-----------------------------------------------------
内核空间            \ /
         MMC Card层(对应具体的设备驱动,如MMC/SD卡块设备驱动,SDIO UART)
                     |
                    \ /
          MMC core层(为上次设备驱动实现提供操作接口,和下层host注册提供机制)
                     |
                    \ /
           Host层(具体MMC/SD/SDIO控制器驱动层。如S3C2440 MMC/SD控制器驱动)
                     |
                    \ /
-----------------------------------------------------------------------------
                    硬件层


这节主要介绍MMC Host层,以S3C2440驱动为例,文件/drivers/mmc/host/s3cmci.c 文件实现的接口。


MMC Core与Host层的沟通桥梁为:

struct mmc_host {

         structdevice             *parent;

         structdevice             class_dev;

         int                       index;

         const  struct mmc_host_ops *ops;             //Host层需要实现的接口

         unsignedint              f_min;

         unsignedint              f_max;

         u32                     ocr_avail;

         unsignedlong           caps;                  /* Host capabilities */

         /*host specific block data */

         unsignedint              max_seg_size;         /* see blk_queue_max_segment_size */

         unsignedshort                   max_hw_segs;         /* see blk_queue_max_hw_segments */

         unsignedshort                   max_phys_segs;      /* see blk_queue_max_phys_segments */

         unsignedshort                   unused;

         unsignedint              max_req_size;          /* maximum number of bytes in one req*/

         unsignedint              max_blk_size; /* maximum size of one mmc block */

         unsignedint              max_blk_count;       /* maximum number of blocks in one req */

         /*private data */

         spinlock_t                  lock;          /* lock for claim and bus ops */

         structmmc_ios                 ios;            /* current io bus settings */

         u32                     ocr;           /* the current OCR setting */

         /*group bitfields together to minimize padding */

         unsignedint              use_spi_crc:1;

         unsignedint              claimed:1;        /* host exclusively claimed */

         unsignedint              bus_dead:1;     /* bus has been released */

         structmmc_card              *card;                /* device attached to this host*/

         wait_queue_head_t         wq;

         structdelayed_work        detect;

         conststruct mmc_bus_ops *bus_ops;   /* currentbus driver */

         unsignedint              bus_refs; /* reference counter */

         unsignedint              sdio_irqs;

         structtask_struct   *sdio_irq_thread;

         atomic_t           sdio_irq_thread_abort;

         structdentry             *debugfs_root;

         unsignedlong           private[0]____cacheline_aligned;

};

struct mmc_host_ops {
    /*使能和禁止HOST控制器*/
    int (*enable)(struct mmc_host *host);
    int (*disable)(struct mmc_host *host, int lazy);
    
        /*这个是关键的函数,所有对MMC/SD的操作,包括发命令和读数据,都通过该接口来实现,所以实现该接口时要处理是命令还是数据操作,另外要考虑是否使用DMA来进行数据传输。/用于命令和数据的发送接收    */
    void    (*request)(struct mmc_host *host, struct mmc_request *req);
        /*用来设置MMC/SD的时钟,电压等操作IO,初始化的操作*/
    void    (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
        /*检查MMC/SD是否写保护了    */
    int    (*get_ro)(struct mmc_host *host);
        /*检查mmc/sd的插入和拔出    */
    int    (*get_cd)(struct mmc_host *host);
    void    (*enable_sdio_irq)(struct mmc_host *host, int enable);
    /* optional callback for HC quirks */
    void    (*init_card)(struct mmc_host *host, struct mmc_card *card);
};

那么在s3cmci.c文件中 根据以上接口分别进行了实现,以上的mm_host通过Core层的mmc_add_host函数添加下面一节介绍Core层

mmc子系统分析(一) 本文主要是分析Linux系统中,mmc子系统的框架和实现示。 阅读详情

相关推荐

Linux MMC 驱动子系统详解

Linux SD/SDIO/MMC 驱动是一种基于 SDMMC 和 SD SPI 主机驱动的协议级驱动程序,目前已支持 SD 存储器、SDIO 卡和 eMMC 芯片。文章介绍了MMC子系统的结构和部分代码。

weixin_45668903的博客 7405

MMC子系统分析

MMC子系统从协议到源码分析

gy794627991的博客 4506

mmc子系统框架

Linux kernel把mmc,sd以及sdio三者的驱动代码整合在一起,俗称mmc子系统。源码位于drivers/mmc下。其下有三个子目录,分别是:card、core、host,其中,card用于构建一个块设备作为上层与mmc子系统沟通的桥梁;core抽象了mmc,sd,sdio三者的通用操作;host则是各类平台上的host驱动代码,包括如TI Omap的omap_hsmmc,三星的s3cmci等。具体的SOC,会根据实际情况再次封装(比如rk3288采用新思designwave的IP),就重新封装

赶紧十八丶 3052

mmc子系统

MMC(Multi-Media Card)子系统是Linux内核中的一个模块,主要用于管理SD卡和eMMC等可移动存储设备。块层(Block layer):负责处理SD卡等存储设备的块层操作,如读写,分区,格式化等。在块层中,SD卡和eMMC设备以MMC块设备的形式被表示。SDIO子系统:负责管理SDIO卡设备,SDIO卡可以提供不同类型的接口,如WiFi,蓝牙等。

qq_31057589的博客 969

Linux MMC驱动架构浅析

Linux MMC驱动架构浅析 MMC驱动模型 Linux内核设计了MMC子系统,用于管理MMC/SD等设备,MMC/SD存储设备是一种典型的块设备。MMC子系统的框架结构如下图所示。 块设备(MMC_BLOCK) 块设备的相关驱动,即实现块设备的驱动程序,负责驱动MMC core抽象出来的虚拟的card设备,并对接内核其它的framework(例如块设备、TTY、wifi)等实现具体的功能。如MMC/SD卡设备驱动按照 linux块设备驱动程序的框架实现一个MMC/SD卡的块设备驱动,在 block.c

li的博客 4515

Linux下mmc开发与子系统源码分析

sdio_bus_type不仅针对mmc,还支持其他种类设备例如网卡等,不在本文分析范围内,mmc_rpmb_bus_type为emmc里的一个rpmb分区注册所需,rpmb生成时将注册到该总线。本文目的是从软件角度,帮助读者理解mmc分区的建立以及使用、mmc的bsp开发流程和帮助读者理解mmc的基础概念,对于mmc深入的硬件知识,以及bsp硬件驱动没有深入,mmc涉及的知识较多,希望本文能带读者理解Linux mmc子系统的使用,为有意深入研究和开发emmc的读者建立初步的认识。

tang_vincent的博客 1326

Linux MMC子系统2

Linux MMC子系统2(基于Linux6.6)---驱动模型介绍

ListQ的博客 1027

Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇

回顾一下前面的知识,MMC 子系统范围三个部分: HOST 部分是针对不同主机的驱动程序,这一部是驱动程序工程师需要根据自己的特点平台来完成的。 CORE 部分: 这是整个MMC 的核心存,这部分完成了不同协议和规范的实现,并为HOST 层的驱动提供了接口函数。 CARD 部分:因为这些记忆卡都是块设备,当然需要提供块设备的驱动程序,这部分就是实现了将你的SD 卡如何实现为块设备的。 它们

知秋一叶 2万+

linux2.6.28块设备mmc_sd卡mmc子系统核心初始化

linux2.6.28块设备mmc_sd卡mmc子系统核心初始化

开阳-英飞凌-小华 1151

Linux驱动——深入解析MMC子系统架构与核心组件

本文深入解析了Linux内核中MMC子系统的核心架构与工作原理。MMC子系统作为管理SD卡、eMMC等存储设备的关键框架,通过Host(主机控制器)、Bus(总线)和Card(卡设备)三大核心组件协同工作,实现了设备的即插即用与高效数据传输。文章详细拆解了各组件职责、交互流程,并提供了源码追踪与实用调试方法,是深入理解Linux存储驱动开发的必备指南。

weixin_29232121的博客 601

EMC(6)——电磁场的屏蔽

假如,机箱没有开口缝隙,比如篮球这种壳体,屏蔽效能都能达到100dB,100dB,基本上把电磁场强度能衰减万倍的关系,所以,这种方式屏蔽效能非常高。一般,钣金机箱,缝隙很大,大家目视就可以看到,铝铣的机箱,比较平整,但实际情况,表面其实也是坑坑洼洼,只是,大家肉眼看不出来而已!这种安装方式,是直接在缝隙增加导电材料,存在一个问题,就是,手法温柔点,压缩度会不够,手法粗暴点,过度压缩。所以,不是说,用金属机箱就能起到屏蔽效果,重要的是,要做好机箱孔缝电磁兼容设计,否则,是金属机箱,也是摆设。

qq_39825125的博客 2181

Linux MMC子系统4

Linux MMC子系统4(基于Linux6.6)---MMC host模块介绍

ListQ的博客 1222

逆概率加权法(Inverse Probability Weighting, IPW)的原理及R实现

逆概率加权(IPW)是一种用于解释由于非随机选择观测值或人群信息的非随机缺失而造成的缺失和选择偏差的方法。原理:这种方法可以通过对观察值的加权来修正分析,使其具有被选中的概率。IPW是基于这样一个假设,即整个研究人群都有可以预测纳入概率(非遗漏)的个体信息,因此,在考虑到这些信息后,我们可以仅从非遗漏的观察值开始对整个目标人群进行推断。计算的程序如下:首先,我们考虑整个研究人群,用逻辑回归模型计算非失访信息的概率,其中响应是非失访,协变量是其可能的预测因素。每个受试者的权重是由预测概率的倒数给出的。然后使用

Christina 5万+

linux2.6.28块设备mmc_sd卡mmc控制器平台驱动注册

linux2.6.28块设备mmc_sd卡mmc控制器平台驱动注册

开阳-英飞凌-小华 1109

SAP SD模块进阶:VA31和VA01底层竟是同一个BAPI?揭秘销售单据创建的统一逻辑

本文深入解析SAP SD模块中VA31和VA01的底层统一架构设计,揭示两者如何通过同一个BAPI `SD_SALESDOCUMENT_CREATE`实现销售单据创建。通过ABAP调试和参数化设计分析,展示了SAP如何利用单据类型(doc_type)等关键字段实现业务逻辑复用,为开发者提供配置化设计的重要启示。

weixin_30561177的博客 244

ArcGISPro小白必看:5分钟搞定3D地形图制作(附免费数据源)

本文为ArcGISPro初学者提供5步制作专业3D地形图的完整指南,涵盖免费数据获取、项目初始化、数据预处理、3D场景构建和成果输出等关键步骤。特别推荐使用NASA的SRTM高程数据和吉林一号卫星影像,帮助用户快速掌握3D地形图制作技巧,适用于教学演示和科研分析。

weixin_28314575的博客 240

Linxu MMC 驱动子系统(一)

结构体定义位于core\bus.c// 总线名称// match接口用于实现mmc card与mmc driver的匹配检测,返回值均为1;// 应用层通知接口,用于添加该mmc bus的uevent参数(在调用device_add时,会调用kobject_uevent向应用层发送设备添加相关的事件,而kobject_uevent会调用该device所属bus和class的uevent接口,添加需要发送到应用的event参数。

l00102795的博客 1246

Matlab之App Designer 一键自动生成带有表格的报告

本文采用案例讲解的方式介绍了采用Matlab中的App Designer开发可视化GUI分析界面后,实现一键自动导出带有表格报告的方法和步骤。可以实现从报告编制等繁琐的工作中解脱出来。

m0_59012156的博客 355

【Linux驱动开发】Linux MMC 子系统深度解析

Linux MMC子系统架构解析与开发指南 本文深入剖析Linux MMC(MultiMediaCard)子系统的技术架构和开发要点。系统采用三层设计:Host层负责硬件控制,Core层实现协议逻辑,Card层提供设备接口。重点介绍了主机控制器驱动开发流程,包括mmc_host结构体注册、mmc_host_ops回调实现以及性能优化方法。文章还对比了MMC、SD和SDIO协议差异,并提供了调试技巧。通过命令传输时序图、响应格式解析和代码示例,全面展示了Linux下MMC设备的驱动开发与优化实践。

love131452098的博客 1435

SAP ABAP CDS View 里的日期函数

摘要:本文系统介绍了ABAP CDS日期函数在企业级应用中的关键作用,包括账龄计算、合同续期等业务场景。重点解析了DATS_IS_VALID、DATS_DAYS_BETWEEN等核心函数的语义和使用边界,特别强调on_error四种异常处理策略的选择逻辑。针对系统日期获取,对比了经典CDS的参数注入和View Entity会话变量两种方式。文章还提供了完整可运行的示例代码(包含CDS视图和ABAP程序),帮助开发者快速验证不同版本下的函数行为差异,确保在实际项目中正确应用这些日期处理函数。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 379

基于STM32设计的猪舍养殖的监控系统_325

本课题基于STM32单片机,设计一款能够实时监测猪舍环境的智能监控系统。该系统能够通过温湿度、空气质量、光照强度等传感器实时监测猪舍的环境,并能够通过自动化控制设备(如风扇、照明灯、消毒喷雾等)调节环境参数,确保养殖环境的适宜性。同时,系统还支持通过ESP8266模块实现数据上传与远程控制,使养殖管理者能够通过手机APP或计算机远程监控和控制猪舍环境。

408

mmc子系统总结

mmc总结学习mmc部分的kernel代码,看了相关bug的处理,进行总结。文章分为以下部分。 1.mmc结构总结 2.mmc host controller 3.sd卡插入后的注册过程。 4.card层 5.数据传输流程 6.相关bug处理1.mmc结构总结mmc子系统按照连接对象的不同,分为emmc, sd, sdio三种类型。如果嵌入式系统中需要使用sd卡,emmc, sdio w

helloyizhou的博客 5401

[xboard-real6410]39 real6410中的BL1和BL2实验及流程分析

文章目录uboot控制uboot 流程uboot加载kernel uboot控制 uboot 流程 uboot加载kernel

鹰之翔 298

linux 查看mmc分区_Linux MMC介绍

1. 介绍Linux中,将包括MMC、SD、SDIO统称为MMC子系统MMC子系统从功能上可分为三个层次-card层: Card驱动, 或称client驱动-core层: MMC的核心层, 完成不同协议和规范的实现, 为host层和设备驱动层提供接口函数- host层: Host驱动, 针对不同主机端的SDHC、MMC控制器的驱动2. 数据结构MMC中包含的主要数据结构如下-mmc_host...

weixin_42509708的博客 2225

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux mmc 子系统,linux2.6.28块设备mmc_sd卡mmc子系统核心初始化

参考http://blog.csdn.net/wavemcu/article/details/7366852//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////...

weixin_36265980的博客 493

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

linux2.6.28块设备mmc_sd卡结构体框架

linux2.6.28块设备mmc_sd卡结构体框架

开阳-英飞凌-小华 1338

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: VS1003音频解码芯片MP3播放器实现的问题-转载
下一篇: Linux TTY驱动--Uart_driver底层
shareCode
博客等级 码龄15年 125粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值