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

Linux驱动开发_块设备驱动开发(内存模拟存储)

一、前言 块设备驱动块是Linux3大设备驱动框架之一,块设备主要是针对存储类型设备设计驱动,配合文件系统完成数据存储。...所以大致总结下:块设备驱动目的是给Linux文件系统提供底层接口。 二、编写块设备驱动思路 既然学到了驱动开发,了解到块设备开发。...在Linux下完成块设备驱动编写,主要是要完成来至文件系统存储请求,文件系统让你把数据存到那个扇区,你驱动就去存,文件系统让你从那个扇区读取输出来,驱动就去读取。...没有依赖于硬件,所以:可以在任何Linux编译安装测试,完成块设备驱动了解学习。...看懂块设备框架,使用模拟内存。 2.​ 加入SD卡驱动,配合块设备框架,完成完整设备驱动编写。

4.5K30

Linux设备驱动程序(一)——设备驱动简介

前言 这一部分主要是用来介绍 Linux 设备驱动程序一些基本概念,包括:Linux 设备驱动程序作用、内核功能划分、设备和模块分类以及版本编号。...一、Linux 设备驱动程序作用 设备驱动程序就像一个个“黑盒子”,使某个特定硬件响应一个定义良好内部编程接口,这些操作完全隐藏了设备工作细节。...三、设备和模块分类 以 Linux 方式看待设备可区分为 3 种基本设备类型,每个模块常常实现 3 种类型中 1 种,因此可分类成字符模块,块模块,或者一个网络模块。...Linux,相反,允许应用程序读写一个块设备象一个字符设备一样 – 它允许一次传送任意数目的字节。结果就是,块和字符设备区别仅仅在内核在内部管理数据方式上,并且因此在内核/驱动软件接口上不同。...一个网络接口负责发送和接收数据报文,在内核网络子系统驱动,不必知道单个事务是如何映射到实际被发送报文上

81241
您找到你想要的搜索结果了吗?
是的
没有找到

linux 字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样设备设备驱动程序是操作系统内核和机器硬件之间接口,系统调用是操作系统内核和应用程序之间接口。...Linux设备属性 设备类型:字符设备、块设备、网络设备; 主设备号:标识设备对应驱动程序。...一般“一个主设备号对应一个驱动程序” 次设备号:每个驱动程序负责管理它所驱动几个硬件实例,这些硬件实例则由次设备号来表示。同一驱动实例编号,用于确定设备文件所指设备。 文件名:设备文件名字。...一些重要数据结构 大部分驱动程序涉及三个重要内核数据结构: 文件操作file_operations结构体 - 结构体file_operations在头文件 linux/fs.h中定义,用来存储驱动内核模块提供设备进行各种操作函数指针...应用测试程序如图: 在开发板上执行测试程序效果如下 简单总结一驱动开发流程 字符设备驱动程序编写框架是: 编写底层硬件操作函数,将这些函数集合在一个file_operations结构中;

9.6K45

linux字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样设备设备驱动程序是操作系统内核和机器硬件之间接口,系统调用是操作系统内核和应用程序之间接口。...Linux设备属性 设备类型:字符设备、块设备、网络设备; 主设备号:标识设备对应驱动程序。...一般“一个主设备号对应一个驱动程序” 次设备号:每个驱动程序负责管理它所驱动几个硬件实例,这些硬件实例则由次设备号来表示。同一驱动实例编号,用于确定设备文件所指设备。 文件名:设备文件名字。...一些重要数据结构 大部分驱动程序涉及三个重要内核数据结构: 文件操作file_operations结构体 - 结构体file_operations在头文件 linux/fs.h中定义,用来存储驱动内核模块提供设备进行各种操作函数指针...应用测试程序如图: 在开发板上执行测试程序效果如下 简单总结一驱动开发流程 字符设备驱动程序编写框架是: 编写底层硬件操作函数,将这些函数集合在一个file_operations结构中;

10.6K65

sdio 驱动_usb接口安装驱动失败

这些外围设备,我们称为 SDIO 设备,常见有: Wi-Fi card(无线网络卡) CMOS sensor card(照相模块) GPS card GSM/GPRS modem card Bluetooth...其它脚位功能和通信协定与SD记忆卡标准规范一样。在SDIO总线定义中,DAT1信号线复用为中断线。在SDIO1BIT模式DAT0用来传输数据,DAT1用作中断线。...在SDIO4BIT模式DAT0-DAT3用来传输数据,其中DAT1复用作中断线 2....Linux SDIO WIFI驱动 SDIO 接口 wifi,首先,它是一个 sdio 卡 设备,然后具备了 wifi 功能,所以 SDIO 接口 WiFi 驱动就是在 wifi 驱动外面套上了一个...SDIO 驱动 外壳 SDIO驱动代码目录:drivers/mmc 下有 mmc卡、sd卡、sdio 卡驱动 驱动分层:主机驱动层(实现SDIO驱动) => 核心层(向上向下接供接口) => 设备驱动

4.1K50

Linux 设备驱动相遇

一个开发板 上一节最后我们讲到设备三大作用,其最后一个作用也是最重要作用:设备信息集合。这一节结合设备信息集合详细讲解来认识一设备驱动是如何绑定。...我们看到一个开发板有很多设备,这些设备是如何一层一层展开呢?设备驱动又是如何绑定呢?我们带着这些疑问进入本节主题。...第一节中讲了总线、设备驱动模型原理,即任何驱动都是通过对应总线和设备发生联系,故虽然 soc 内部没有具体总线,但是内核通过 platform 这条虚拟总线,把控制器一个一个找到,一样遵循了内核高内聚...of_i2c_register_devices()函数中会遍历控制器节点,然后通过of_i2c_register_device()函数把 i2c 控制器设备注册进去。...3.展开 spi 设备 spi 设备注册和 i2c 设备一样,在 spi 控制器遍历 spi 节点设备,然后通过相应注册函数进行注册,只是和 i2c 注册 api 接口不一样,下面看一具体代码

2.4K40

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

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

6K20

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

Linux设备驱动分类 从上图可以看到Linux系统将各异设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本内核设施和文件系统接口。...设备构成 主设备号与次设备号 关于设备号,我们先通过如下图来了解一 从上图可以看出,c代表是字符设备,d代码是块设备。...主设备号用来标识对于设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理若干同类设备设备表示 在linux系统中,设备号用dev_t表示。这是个32位无符号整数。...随着Linux系统演变,上述主次设备分发可能在将来会发生变化,所以设备驱动程序开发者应该避免直接使用主次设备号所占位宽来获得对于设备号或次设备号。...,是在主设备号不知情情况,让系统给分配设备号。

7.1K52

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

设备是与字符设备并列概念, 这两类设备Linux驱动结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关概念...在Linux中,驱动对块设备输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...编写块设备驱动时,使用一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理基本单位。通常,1个扇区大小为512字节。(对设备而言) 2....,而不是这写一,那写一然后再回来,IO调度就是将上层发下来IO请求顺序进行重新排序以及对多个请求进行合并,这样就可以实现上述提高效率、节约磁盘目的。...undefined .owner = THIS_MODULE, }; 驱动安装之后,查看节点信息: 设置磁盘容量 /*注意: 块设备大小使用扇区作为单位设置

31.8K30

Linux音频驱动-PCM设备

图1-1 声音录音和播放过程 数据结构 在ALSA架构,pcm也被称为设备,所谓逻辑设备。在linux系统中使用snd_pcm结构表示一个pcm设备。...PCM设备节点创建 当调用snd_card_register时候,就会依次调用card列表每个设备dev_register回调函数,对pcm设备来说就是在_snd_pcm_new函数中 static....card_number: 所属card。 .device: 当前设备类型设备编号。 .f_ops: 具体设备文件操作集合。 .private_data: open函数私有数据。....card_ptr: 所属card。 此结构体是用来保存当前设备上下文信息,该card所有逻辑设备都存在此结构。...应用到驱动过程 当应用程序在通过open系统调用打开/dev/pcmC0D0c过程 1.

8.7K33

Linux设备驱动详解

Linux系统一次读取磁盘大小是一个块,而不是一个扇区,块设备驱动由此得名。 二、块设备处理过程 1、linux 内核中,块设备将数据存储与固定大小块中,每个块都有自己固定地址。...Linux内核中块设备和其他模块关系如下。 ? 1、块设备处理过程涉及Linux内核中很多模块,下面简单描述之间处理过过程。   ... ?...(Linux系统中,对块设备IO请求,都会向块设备驱动发出一个请求,在驱动中用request结构体描述) 内核结构如下:. struct request { struct list_head queuelist...(也可以不用注册设备驱动一样可以工作,该函数和字符设备register_chrdev()函数相对应,对于大多数设备,第一个工作就是相内核注册自己,但是在Linux2.6以后,register_blkdev

5.3K30

Linux设备驱动模型-Driver

前言 linux将所有的驱动抽象为struct device_driver结构。这样设计可以方便驱动程序更好编写,在编写驱动时候只需要将此结构嵌入到具体驱动中即可。...bus: 设备驱动所属总线 owner: 设备驱动owner,通常为THIS_MODULE suppress_bind_attrs: 通过sysfs操作设备驱动bind/unbind,...probe,remove: 当设备匹配/移除时候,会调用设备驱动probe/remove函数。 shutdown,suspend, resume: 代表设备驱动在调用管理时候回调函数。...groups: 设备驱动属性。 p: 设备驱动私有数据结构,通常可以将驱动信息放入此结构中。...和设备一样,内核也为设备驱动定义了一些驱动宏属性,方便定义驱动属性。

4.3K30

Linux设备驱动模型-Kobject

而目前456_test目录下是不存在任何文件,那是因为我们没有添加该obj属性,此测试case将在下解完善。 Kobject是linux设备驱动模型基础,也是设备模型中抽象一部分。...如果想了解设备驱动模型就需要明白Kobject构成或原理。linux内核为了兼容各种形形色色设备,就需要对各种设备共性进行抽象,抽象出一个基类,其余设备只需要继承此基类就可以了。...而此基类就是kobject,但是C语言没有面向对象语法,这时候就需要将此基类(Kobject)嵌入到具体结构体中,从而就可以访问控制此设备操作。...通常驱动程序员很少使用到kobject结构及其相关接口,而是使用封装之后更高层接口函数。 Kobject结构体 内核使用kobject来表示内核一个对象。...init_name; /* initial name of the device */ const struct device_type *type; Kobject相关操作函数 kobject相关操作函数一般驱动程序员是不会直接操作

5.3K32

Linux USB 设备驱动模型

Linux 内核源码:include\linux\usb.h Linux 内核源码:drivers\hid\usbhid\usbmouse.c 1....BUS/DEV/DRV 模型 "USB 接口"是逻辑上 USB 设备,编写 usb_driver 驱动程序,支持是"USB 接口": USB 控制器或 Hub 识别出 USB 设备后,会创建、...接口函数 在 USB 设备驱动程序中,能使用 USB 函数都在这个头文件里:include\linux\usb.h。...2.1 pipe 使用这些接口函数主要目的是传输数据,传输数据对象是 USB 设备某个 endpoint,这被称为 pipe: /* Create various pipes... */ #define...:这是一个同步函数,它会等待 URB 结束 usb_unlink_urb:这是一个异步函数,它不会等待 URB 结束,USB 控制器驱动会调用它回调函数 void usb_kill_urb(struct

40540

Linux设备驱动模型-Uevent

前言 当一个设备动态加入到系统时候(比如常见将U盘插入到PC机器上), 设备驱动程序就需要动态检测到有设备插入了系统,就需要将此事件通知到用户层,然后用户层对这一事件做响应处理,比如加载USB驱动...Linux系统对uevent机制具体实现是建立在设备模型基础上,通过kobject_uevent函数实现。 在前面的kset小节中提到了注册一个kset接口,可以在这里习复。...而kobject和kset主要区别就是,将一个kset注册到系统时候,就需要将此事件通过kobject_uevent发送到用户空间,而kobject如果是单独,没有依赖kset,则无法通过uevent...filter: 当上报uevent时候,kset会通过filter接口去过滤,阻止不希望上报uevent。...如果是嵌入式设备,会在etc目录下看到这样配置: echo /sbin/mdev >/proc/sys/kernel/hotplug /sbin/mdev -s 也就是说uevent_helper最终调用到

4K41
领券