首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux设备驱动那点事儿之sd卡

在Linux系统中,SD卡驱动是连接硬件设备与操作系统内核的关键组件,它使得系统能够识别并管理SD卡,进行数据的读写操作。以下是关于Linux SD卡驱动的相关信息:

基本概念

  • SD卡:全称为Secure Digital卡,是一种广泛用于各种电子设备中的存储介质。它因其小巧的体积和大容量的存储能力而受到欢迎。
  • MMC卡:多媒体卡,是一种非易失性存储器件,广泛应用于消费类电子产品中。SD卡是在MMC卡的基础上发展而来,增加了数据的安全性和传输速度。
  • SDIO卡:SD输入输出卡,是一种集成了SD卡和IO接口的设备,除了存储功能外,还具有IO控制功能。

驱动结构

Linux中的SD卡驱动结构主要分为三层:

  • 块设备层:负责将操作的数据以块设备的处理方式写到内存上或从内存上读取。
  • MMC协议层:完成了不同协议和规范的实现,并为块设备层提供了接口函数。
  • SD驱动层:针对不同主机的驱动程序,需要根据自己的特点平台来完成。

应用场景

  • 数码相机和摄像机:用于存储高分辨率照片和视频。
  • 智能手机和平板设备:用于扩展设备的内置存储空间。
  • 无人机和智能家居设备:用于记录高清视频和实现其他嵌入式功能。

驱动问题及解决方案

  • 挂载失败:可能是由于设备文件名或分区名错误。使用lsblk命令查看设备名称,确保挂载命令中的路径正确。
  • 数据读取错误:可能是由于文件系统损坏或硬件故障。可以尝试使用chkdsk命令修复文件系统错误,或更换SD卡。

通过以上信息,您可以更好地理解Linux系统中SD卡驱动的工作原理、应用场景以及常见问题及其解决方案。希望这些信息对您的学习和实际工作有所帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Linux设备驱动之字符设备(一)

Linux中设备驱动的分类 从上图可以看到Linux系统将各异的设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本的内核设施和文件系统接口。...块设备: 是指可以从任意位置读取数据的设备,对这种设备读写是按块为单位读写的。它使用缓存区来暂存数据,等待条件成熟后,会一并将数据写入到设备或者从设备一次性读出到缓冲区。比较U盘,磁盘,SD卡等。...主设备号用来标识对于的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备。 设备号的表示 在linux系统中,设备号用dev_t表示。这是个32位的无符号整数。...随着Linux系统的演变,上述的主次设备号的分发可能在将来会发生变化,所以设备驱动程序开发者应该避免直接使用主次设备号所占的位宽来获得对于的主设备号或次设备号。...,第一个参数form表示一个设备号,第二个参数count表示次设备的个数,也就是当前驱动程序所管理的同类设备的个数,第三个参数name表示设备或者驱动的名称。

7.2K52
  • Linux设备驱动之字符设备(二)

    通过上一节Linux设备驱动字符设备(一)了解了Linux设备驱动的分类,设备号的构成,设备号的申请以及设备号的释放。 在Linux内核中使用struct cdev结构来代码字符设备。...struct kobject kobj 内核的内嵌对象,是Linux设备驱动模型的重要成员。...struct module *owner 字符设备驱动程序所在的内核模块指针 struct file_operations *ops 字符设备驱动程序文件操作函数集,是应用程序通过文件系统访问驱动的桥梁...该部分在后面Linux字符设备框架一节会详细分析,目前只要明白主要流程即可。 字符设备的注销 当驱动程序需要从系统卸载的时候,就需要使用cdev_del释放字符设备占用的内存。...目前为止,已经了解了设备号,设备号的构成,字符设备分配,字符设备的初始化,字符设备的注册以及字符设备的注销。将在下一节通过一个简单的字符设备驱动程序来再次熟悉整个流程,然后总结字符设备驱动的编写模型。

    6.1K20

    Linux 内核之字符设备驱动

    本篇介绍 本篇介绍下如何写字符设备的驱动程序。...支持阻塞IO的驱动demo Linux 上的设备类型可以大概分为以下几种: 字符设备:以字节为单位传输,传输率低,不支持随机访问,常见的设备有鼠标,键盘,触摸屏等 块设备: 以块位单位传输,常见的就是磁盘...先看下字符设备的结构 struct cdev { struct kobject kobj; // 用于linux设备驱动模型 struct module *owner; // 字符设备驱动所在的内核模块对象指针...const struct file_operations *ops; // 字符设备驱动中最关键的一个操作函数,在和应用程序交互的过程中起枢纽作用 struct list_head list...再介绍下misc 设备,linux 内核将一些不符合预先确定的字符设备划分为杂项设备,使用的数据结构如下; struct miscdevice { int minor; const char

    4.9K40

    Linux系统驱动之编写设备驱动之i2c_driver

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 编写设备驱动之i2c_driver 参考资料: Linux内核文档: Documentation\i2c\instantiating-devices.rst Documentation...\i2c\writing-clients.rst Linux内核驱动程序示例: drivers/eeprom/at24.c 本节代码:GIT仓库中 框架: IMX6ULL\source...套路 1.1 I2C总线-设备-驱动模型 1.2 示例 分配、设置、注册一个i2c_driver结构体,类似drivers/eeprom/at24.c: 在probe_new函数中,分配、设置、注册...0x4 使能:往寄存器0写入0x3 读红外:读寄存器0xA、0xB得到2字节的红外数据 读光强:读寄存器0xC、0xD得到2字节的光强 读距离:读寄存器0xE、0xF得到2字节的距离值 AP3216C的设备地址是

    87620

    Linux系统驱动之LCD驱动程序框架_使用设备树

    资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 编程_LCD驱动程序框架_使用设备树 参考资料,GIT仓库里: 基于这个程序修改: IMX6ULL\source\03_LCD\03_lcd_drv_qemu_ok STM32MP157...\source\A7\03_LCD\03_lcd_drv_qemu_ok 参考:内核自带的示例驱动程序 Linux驱动源码:drivers/video/fbdev/simplefb.c 设备树:...说明 Linux驱动程序 = 驱动程序框架 + 硬件编程。 在前面已经基于QEMU编写了LCD驱动程序,对LCD驱动程序的框架已经分析清楚。...核心就是: 分配fb_info 设置fb_info 注册fb_info 硬件相关的设置 本节课程我们基于设备树来编写驱动程序。 2. 入口函数注册platform_driver 3.

    2.5K30

    (转载非原创)linux驱动之获取设备树信息

    上一篇文章学习了字符设备的注册,操作过的小伙伴都知道上一篇文章中测试驱动时是通过手动创建设备节点的,现在开始学习怎么自动挂载设备节点和设备树信息的获取,这篇文章中的源码将会是我以后编写字符驱动的模板...驱动,对设备树不是很理解的小伙伴,所系这里就不对设备树进行详细的介绍。...我在驱动中读取设备树的主要函数有以下几个,想了解更多of函数的小伙伴可以了解linux设备树常用of操作函数。...\r\n", filename); } return 0; } 五、测试 将驱动文件和应用文件进行编译 make arm-linux-gnueabihf-gcc 将编译后的驱动文件可应用文件拷贝到开发板中...,然后加载驱动,结果如下图所示: 02.png 将读取的信息和设备树文件中的信息对比,说明读取成功。

    1.5K00

    Linux ALSA声卡驱动之四:Control设备的创建

    ,例如HWDEP,PCMRAWMIDI,TIMER等,这时需要在device和subdevice字段中指出卡的设备逻辑编号。...index字段用于保存该control的在该卡中的编号。如果声卡中有不止一个codec,每个codec中有相同名字的control,这时我们可以通过index来区分这些controls。...Control设备的创建过程大体上和PCM设备的创建过程相同。详细的创建过程可以参考本博的另一篇文章:Linux音频驱动之三:PCM设备的创建。下面我们只讨论有区别的地方。...我们需要在我们的驱动程序初始化时主动调用snd_pcm_new()函数创建pcm设备,而control设备则在snd_card_create()内被创建,snd_card_create()通过调用snd_ctl_create...注册完成后的数据结构关系可以用下图进行表述: control设备的操作函数入口 用户程序需要打开control设备时,驱动程序通过snd_minors[]全局数组和此设备号,可以获得snd_ctl_f_ops

    39610

    【专业技术】Linux设备驱动第八篇:高级字符驱动操作之设备存取控制

    上一篇中介绍了阻塞IO等的一些用法,本来这一篇准备介绍一下poll/select等的一些高级IO操作,后来想想,在实际工作中开发驱动的时候很少会使用到poll/select这些操作,就不再介绍,有兴趣的可以自己查找资料学习一下...这一篇会介绍下相对比较实用的设备文件的存取控制的一些内容。 存取控制主要用于设备的使用控制,只有授权的用户才能访问设备或者同时只有一个进程访问设备。这也是存取控制使用最广的地方。下面分别简单说明。...单open设备 单open设备就是同时只有一个进程允许打开一次所要访问的设备。此种方法是最简单方便的访问控制策略,可以防止多进程的竞争问题,但是这样也造成了其局限性。不能同时被多个进程多个用户访问。...open 调用递减并测试 scull_s_available 并拒绝存取如果其他人已经使设备打开。 release调用,标识设备不再忙。...这种方式在第一次打开设备是会记住设备拥有着,当下一次同一个用户打开设备时也会得到允许。

    1.1K130

    Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)

    一、ASoC的由来: ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。...在ASoc出现之前,内核对于SoC中的音频已经有部分的支持,不过会有一些局限性: Codec驱动与SoC CPU的底层耦合过于紧密,这种不理想会导致代码的重复,例如,仅是wm8731的驱动,当时Linux...当进行播放或录音时,驱动会让整个codec处于上电状态,这对于PC没问题,但对于移动设备来说,这意味着浪费大量的电量。同时也不支持通过改变过取样频率和偏置电流来达到省电的目的。...Machine为CPU、Codec、输入输出设备提供了一个载体。...Machine驱动 Machine驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作

    65510

    【专业技术】Linux设备驱动第六篇:高级字符驱动操作之iotcl

    在之前我们介绍了如何实现一个简单的字符设备驱动,并介绍了简单的open,close,read,write等驱动提供的基本功能。但是一个真正的设备驱动往往提供了比简单读写更高级的功能。...这一篇我们就来介绍一些驱动动中使用的一些高级的操作的实现。...大部分驱动除了提供对设备的读写操作外,还需要提供对硬件控制的接口,比如查询一个framebuffer设备能提供多大的分辨率,读取一个RTC设备的时间,设置一个gpio的高低电平等等。...Linux中把ioctl cmd划分成几个位段来帮助创建唯一的cmd。这几个位段一般是:type(模数),序号,传输方向和参数大小。...数据传送是从应用程序的观点来看待的; _IOC_READ 意思是从设备读, 因此设备必须写到用户空间.

    1.5K80

    Linux下编写ENC28J60网卡驱动,完善网络设备框架

    一、框架模型 linux下设备驱动都有一套标准的结构,字符设备,块设备,网络设备都是自己的一套框架。...对于网络设备而言,主要目的就是网络数据的收发,编写驱动时将linux网络设备驱动里的接口与实际网卡硬件的操作接口对应上,应用层就可以操作网卡完成网络通信了。底层驱动里编写网卡驱动与单片机一样。...与开发板的硬件连接: 二、驱动代码 2.1 ENC28J60网卡驱动+网络设备框架+中断接收数据.c #include linux/init.h> #include linux/module.h...irq.h> #include linux/timer.h> /* 以下是ENC28J60驱动移植接口: SPI0接口: GPB_0--SCK GPB_1--CS GPB_2--MISO GPB...ENC28J60网卡初始化*/ u8 stat=ENC28J60_Init(ENC28J60_MacAddr); if(stat) { printk("ENC28J60网卡初始化失败!

    4.2K20

    深入浅出:Linux设备驱动之异步通知和异步IO

    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问。因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代。...1、异步通知的概念和作用 影响:阻塞–应用程序无需轮询设备是否可以访问 非阻塞–中断进行通知 即:由驱动发起,主动通知应用程序 2、linux异步通知编程 2.1 linux信号 作用:linux系统中...不过此项工作已由内核完成,设备驱动无须处理。 (2)、支持F_SETFL命令处理,每当FASYNC标志改变时,驱动函数中的fasync()函数得以执行。...因此,驱动中应该实现fasync()函数 (3)、在设备资源中可获得,调用kill_fasync()函数激发相应的信号 设备驱动中异步通知编程: (1)、fasync_struct加入设备结构体模板中...块设备和网络设备:本身是异步的 字符设备:必须明确应支持AIO(极少数是异步I/O操作) 字符设备驱动程序中file_operations 包含 3 个与 AIO 相关的成员函数,如下所示: ssize_t

    1.9K71

    22.Linux-块设备驱动之框架详细分析(详解)

    本节目的:     通过分析块设备驱动的框架,知道如何来写驱动 1.之前我们学的都是字符设备驱动,先来回忆一下 字符设备驱动: 当我们的应用层读写(read()/write())字符设备驱动时,是按字节.../字符来读写数据的,期间没有任何缓存区,因为数据量小,不能随机读取数据,例如:按键、LED、鼠标、键盘等 2.接下来本节开始学习块设备驱动 块设备: 块设备是i/o设备中的一类, 当我们的应用层对该设备读写时...,是按扇区大小来读写数据的,若读写的数据小于扇区的大小,就会需要缓存区, 可以随机读写设备的任意位置处的数据,例如 普通文件(*.txt,*.c等),硬盘,U盘,SD卡, 3.块设备结构: 段(Segments...是Linux内存管理机制中一个内存页或者内存页的一部分。 块  (Blocks):   由Linux制定对内核或文件系统等数据处理的基本单位。通常由1个或多个扇区组成。...(对Linux操作系统而言) 扇区(Sectors):块设备的基本单位。

    2.2K62

    【专业技术】Linux设备驱动第七篇:高级字符驱动操作之阻塞IO

    我们之前介绍过简单的read,write操作,那么会有一个问题:当驱动无法立即响应请求该怎么办?...比如一个进程调用read读取数据,当没有数据可读时该怎么办,是立即返回还是等到有数据的时候;另一种情况是进程调用write向设备写数据,如果缓冲区满了或者设备正忙的时候怎么办,是立即返回还是继续等待直到设备可写...在驱动里面很容易使一个进程进入睡眠状态,但是这里有几个规则需要特别注意。 原子上下文不能睡眠。这意味着驱动在持有一个自旋锁, seqlock, 或者 RCU 锁时不能睡眠。 关闭中断的情况下不能睡眠。...非阻塞的IO由 filp->f_flags 中的 O_NONBLOCK 标志来指示,这个标志位于linux/fcntl.h>, 被 linux/fs.h>自动包含。...这两句话都假设有输入和输出缓冲,实际上也是这样,几乎每个设备驱动都有输入输出缓冲。缓冲提高了访问效率,防止了数据的丢失。 如果指定O_NONBLOCK,即非阻塞的访问。

    1.4K70

    WiFi模块 driver驱动框架(sdio接口、pcie接口)「建议收藏」

    card SD卡与SDIO卡的异同 1.SD卡使用的是SD卡协议,而SDIO卡使用的是SDIO协议;协议不一样,初始化/读写方式都不一样 2.ARK1600控制器既支持SD卡也支持SDIO卡,在驱动上完全可以做到同一个卡槽既支持...4、MMC子系统框架 这里的MMC子系统框架包含了Linux的SDIO驱动架构,所以姑且将其看作SDIO的驱动架构。...Linux MMC子系统主要分成三个部分: MMC核心层:完成不同协议和规范的实现,为host层和设备驱动层提供接口函数。...MMC核心层由三个部分组成:MMC,SD和SDIO,分别为三类设备驱动提供接口函数; Host 驱动层:针对不同主机端的SDHC、MMC控制器的驱动; Client 驱动层:针对不同客户端的设备驱动程序...如SD卡、T-flash卡、SDIO接口的GPS和wi-fi等设备驱动。 wifi驱动怎么知道使用那个sdio控制器?

    4.4K31

    USB总线-Linux内核USB3.0设备控制器之UDC驱动分析(六)

    USB Function驱动通过调用这些接口匹配及访问USB设备控制器,而底层USB控制器驱动要实现这些接口定义的功能。下面分析一下主要的UDC驱动接口调用流程。 2....前者通过UDC设备的名称匹配,通常是configfs配置的USB Function驱动使用,后者直接匹配udc_list链表中的第一个UDC驱动,通常是legacy类型的USB Function驱动使用...2.2.3.端点0描述符 端点0的端点描述符定义在dwc3的设备控制器驱动中,Function驱动无需定义,具体如下。...清除端点的DWC3_EP_STALL和DWC3_EP_WEDGE标志,DWC3_EP_WEDGE标志设置时主机无法清除设备端点的stall状态,但设备驱动可以自己清除。...Function驱动和UDC驱动绑定的时候,实质上是通过usb_udc_connect_control函数控制设备和主机连接和断开。

    9.6K20

    SDMMC卡介绍

    在数据传输和物理规范上,SD卡(24mm*32mm*2.1mm,比MMC卡更厚一点),向前兼容了MMC卡.所有支持SD卡的设备也支持MMC卡。SD卡和2.11版的MMC卡完全兼容。...MCI这个术语在驱动程序中经常使用,很多文件,函数名字都包括”mci”. 1.5.MMC/SD/SDIO卡的区别 二.SD/MMC协议与命令 1.SD/MMC卡相关寄存器 SD卡内部有7个寄存器...四.Linux中SD/MMC设备驱动流程 4.1.MMC子系统的基本框架 4.1.1.MMC子系统的代码在kernel/driver/MMC下面,目前MMC子系统支持一些形式的记忆卡:SD,SDIO...4.1.4.CARD:因为这些记忆卡都是块设备,当然需要提供块设备的驱动程序,这部分就是实现了将SD卡如何实现为块设备的。...4.2.2.struct mmc_card 用来描述卡位于kernel/include/linux/mmc/card.h下面 4.2.3.struct mmc_driver 用来描述mmc卡驱动在kernel

    2.6K21

    Linux驱动开发: 块设备驱动开发

    块设备是与字符设备并列的概念, 这两类设备在 Linux 中驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2....SD卡、Flash等设备,就可以用此函数分配请求队列。...卡编写块设备(不使用IO调度器) SD卡采用SPI协议通信,底层采用模拟的SPI系统,没有使用SPI子系统。

    32.4K30
    领券