热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

详解linux驱动编写(sd卡驱动)

这篇文章主要介绍了详解linux驱动编写(sd卡驱动),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随着sd卡的流行,sd卡在嵌入式设备上使用的场景也越来越多。那下面我们可以看一下,linux驱动框架上是怎么处理sd卡驱动的?

1、代码目录地址

drivers/mmc 

2、基本结构

从mmc的代码结构可以看得出,主要分为两个部分,其中core为协议部分,host为各个soc的适配部分

host是我们需要真正关心的代码

3、以s3c为例,观察makefile

obj-$(CONFIG_MMC_SDHCI_S3C) += sdhci-s3c.o 
...... 
obj-$(CONFIG_MMC_S3C)    += s3cmci.o 

4、根据s3c阅读Kconfig,确认s3c下的sd卡还依赖哪些文件

config MMC_SDHCI_S3C 
  tristate "SDHCI support on Samsung S3C SoC" 
  depends on MMC_SDHCI && PLAT_SAMSUNG 
  help 
   This selects the Secure Digital Host Controller Interface (SDHCI) 
   often referrered to as the HSMMC block in some of the Samsung S3C 
   range of SoC. 
 
   If you have a controller with this interface, say Y or M here. 
 
   If unsure, say N. 
 
config MMC_SDHCI_S3C_DMA 
  bool "DMA support on S3C SDHCI" 
  depends on MMC_SDHCI_S3C 
  help 
   Enable DMA support on the Samsung S3C SDHCI glue. The DMA 
   has proved to be problematic if the controller encounters 
   certain errors, and thus should be treated with care. 
 
   YMMV. 
 
config MMC_S3C 
  tristate "Samsung S3C SD/MMC Card Interface support" 
  depends on ARCH_S3C24XX 
  depends on S3C24XX_DMAC 
  help 
   This selects a driver for the MCI interface found in 
     Samsung's S3C2410, S3C2412, S3C2440, S3C2442 CPUs. 
   If you have a board based on one of those and a MMC/SD 
   slot, say Y or M here. 
 
   If unsure, say N. 

5、MMC_S3C和MMC_SDHCI_S3C是主要的macro,接着了解两个macro对应文件的数据结构

首先看一下s3cmci.c文件,

static const struct mmc_host_ops s3cmci_ops = { 
  .request  = s3cmci_request, 
  .set_ios  = s3cmci_set_ios, 
  .get_ro   = mmc_gpio_get_ro, 
  .get_cd   = mmc_gpio_get_cd, 
  .enable_sdio_irq = s3cmci_enable_sdio_irq, 
}; 

再看一下sdhci-s3c.c文件,

static struct sdhci_ops sdhci_s3c_ops = { 
  .get_max_clock   = sdhci_s3c_get_max_clk, 
  .set_clock   = sdhci_s3c_set_clock, 
  .get_min_clock   = sdhci_s3c_get_min_clock, 
  .set_bus_width   = sdhci_set_bus_width, 
  .reset     = sdhci_reset, 
  .set_uhs_signaling = sdhci_set_uhs_signaling, 
}; 

6 、从host角度来说,有了platform driver和上面的host driver,驱动流程就算搞清楚了。

但是如果深入下去的话,还是需要好好读一下sd协议,这里面花的时间最多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 题目Link题目学习link1题目学习link2题目学习link3%%%受益匪浅!-----&# ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • C++实现经典排序算法
    本文详细介绍了七种经典的排序算法及其性能分析。每种算法的平均、最坏和最好情况的时间复杂度、辅助空间需求以及稳定性都被列出,帮助读者全面了解这些排序方法的特点。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本报告涵盖了个人博客账号和码云账号的注册过程,以及对网络工程专业学习的反思与展望。通过回顾初入大学时的专业选择,分析当前的专业知识和技能水平,并对未来的职业规划进行了详细讨论。 ... [详细]
  • 本文详细介绍了 com.facebook.drawee.view.SimpleDraweeView 中的 setScaleType 方法,提供了多个实际代码示例,并解释了其在不同场景下的应用。 ... [详细]
author-avatar
my76572
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有