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

Linux 总线设备驱动模型的探究

设备驱动模型的需求 总线设备驱动模型,如果把它们之间的关系比喻成生活中的例子是比较容易理解的。...没错,Linux 内核里就是运用了这种设计思想去对设备驱动进行适配隔离的,只不过在内核里我们不叫做适配层,而取名为总线,意为通过这个总线去把驱动和对应的设备绑定一起,如图: ?...基于这种设计思想,Linux设备驱动分为了总线设备驱动三个实体,这三个实体在内核里的职责分别如下: ?...看到这里,可能有些喜欢探究本质的读者又要问了,设备总线注册了板级信息,驱动也向总线注册了驱动模块,但总线是怎么做到驱动设备匹配的呢?接下来就讲下设备驱动是怎么通过总线进行“联姻”的。...最底层是不同板子的板级文件代码,中间层是内核的总线,最上层是对应的驱动,现在描述板级的代码已经和驱动解耦了,这也是 Linux 设备驱动模型最早的实现机制,但随着时代的发展,就像是人类的贪婪促进了社会的进步一样

6.4K41

Linux内核平台总线设备驱动模型浅析

复习总线设备驱动模型,做了一点小笔记,大牛略过。 一、Linux系统的驱动框架的基础很大一部分是围绕着总线设备驱动模型展开的。...  *bus;        // 该设备挂接在哪条总线上    struct device_driver*driver; //该设备所对应的驱动    void   *platform_data;    ... }; 任何建立在平台总线设备驱动模型基础上的驱动代码(如平台驱动,PCI驱动,USB驱动,I2C驱动,SPI驱动等),它们的设备结构体(如platform_device, pci_dev,usb_device...device *dev) {    device_initialize(dev);  //做各类初始化    //将设备挂接在对应的总线上,主要工作把设备(device)添加到总线       (bus_type...remove) (struct device*dev);// 指向设备移除函数    struct driver_private *p;  }; 同理,任何建立在平台总线设备驱动模型基础上的驱动代码(如平台驱动

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

Linux音频驱动-IIS总线标准

,这样就可以增加设备以及系统的可移植性。...为了此目的,就引入了I2S(inter-IC sound)数字总线协议接口。 I2S规范 I2S总线只能用来处理audio data,而别的信号比如控制信号,编码信号则交给别的模块处理。...SCK(continuous serial clock) WS(word select) SD(serial data) 对于系统而言,产生SCK和WS的信号端是主设备(Master)。...trams是主设备(播放音乐的过程) ? receive是主设备(录音的过程) ? SCK 可以理解为该I2S需要工作的时钟频率,如下是SCK的计算公式: SCK=2*采样频率*采样位数。...在从设备中,WS在时钟信号的上升沿改变。 3. WS总是在MSB传输前的一个时钟周期改变。这样有利于从发送设备提交建立下次传输,同时有利于从接受设备接受数据,为一下接受做准备工作。

2.7K11

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

前言 这一部分主要是用来介绍 Linux 设备驱动程序的一些基本概念,包括:Linux 设备驱动程序的作用、内核功能的划分、设备和模块的分类以及版本编号。...一、Linux 设备驱动程序的作用 设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。...另外,Linux 支持多个文件系统类型,就是说,物理介质上不同的数据组织方式。例如,磁盘可被格式化成标准 Linux 的 ext3 文件系统,普遍使用的 FAT 文件系统,或者其他几个文件系统。...三、设备和模块的分类 以 Linux 的方式看待设备可区分为 3 种基本设备类型,每个模块常常实现 3 种类型中的 1 种,因此可分类成字符模块,块模块,或者一个网络模块。...Linux,相反,允许应用程序读写一个块设备象一个字符设备一样 – 它允许一次传送任意数目的字节。结果就是,块和字符设备的区别仅仅在内核在内部管理数据的方式上,并且因此在内核/驱动的软件接口上不同。

77441

linux字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...linux如何管理文件 Linux设备纳入文件系统的范畴来管理。 每个设备Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"设备节点"。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...模块初始化函数注册设备;卸载函数注销设备 编译模块; 在ARM板上插入模块 # insmod first_drv.ko 插入模块之后,可以通过文件/proc/devices 查看设备信息 # cat /...在模块的入口函数中,申请设备号,初始化并注册一个cdev结构; 在模块的出口函数中,注销cdev结构,注销设备号; 可以通过文件 /proc/devices 查看设备信息,找到动态分配的主设备号 手动建立设备文件通过

10.6K65

linux 字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...linux如何管理文件 Linux设备纳入文件系统的范畴来管理。 每个设备Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"设备节点"。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备号:标识设备对应的驱动程序。...模块初始化函数注册设备;卸载函数注销设备 编译模块; 在ARM板上插入模块 # insmod first_drv.ko 插入模块之后,可以通过文件/proc/devices 查看设备信息 # cat /...在模块的入口函数中,申请设备号,初始化并注册一个cdev结构; 在模块的出口函数中,注销cdev结构,注销设备号; 可以通过文件 /proc/devices 查看设备信息,找到动态分配的主设备号 手动建立设备文件通过

9.6K45

I2C总线架构 之 设备驱动

添加硬件信息(设备树) b. 搭建驱动框架 c. 构建i2c_driver,并注册到linux i2c中 d. 注册字符设备 e. 向应用层提供i2c设备操作接口 f....添加硬件信息设备树(设备树) 首先观察硬件i2c设备挂载到哪个i2c总线上,然后在设备树文件找到该总线设备节点,在节点下创建子节点描述i2c设备硬件信息即可。...通读文章大致了解,会发现本篇i2c设备驱动与虚拟总线platform架构类似。不同的是platform是软件实现的虚拟总线,在soc上并不存在;而i2c总线,在soc上是实际存在的。...由于Linux内部的实现较为复杂,本篇主要以设备驱动的角度来分析整个驱动的代码走向,涉及到内部API的实现,本篇只大概介绍其功能,剩余部分会放在i2c核心继续分析。...参考: 《Linux设备驱动开发详解》 《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.4》 https://blog.csdn.net/Egean/article/details/81085077

1.8K70

Linux笔记(21)| platform总线驱动分析

//本文主要参考《野火Linux实战开发指南》 上次跟大家分享了设备模型的一些东西,包括总线设备驱动等的一些概念,还有他们之间的联系。...因为在Linux当中,对于I2C、SPI、USB这些常见类型的物理总线来说,Linux内核会自动创建与之相应的驱动总线,因此I2C设备、SPI设备、 USB设备自然是注册挂载在相应的总线上。...但是,实际项目开发中还有很多结构简单的设备,对它们进行控制并不需要特殊的时序。它们也就没有相应的物理总线,比如led、rtc时钟、蜂鸣器、按键等等,Linux内核将不会为它们创建相应的驱动总线。...为了使这部分设备驱动开发也能够遵循设备驱动模型,Linux内核引入了一种虚拟的总线——平台总线(platform bus)。...平台总线用于管理、挂载那些没有相应物理总线设备,这些设备被称为平台设备,对应的设备驱动则被称为平台驱动

2.2K40

19.Linux-USB总线驱动分析

是因为windows自带了USB总线驱动程序, USB总线驱动程序负责: 识别USB设备,给USB设备找到对应的驱动程序 新接入的USB设备的默认地址(编号)是0,在未分配新编号前,PC主机使用0地址和它通信...然后USB总线驱动程序都会给它分配一个地址(编号) PC机想访问USB总线上某个USB设备时,发出的命令都含有对应的地址(编号) USB是一种主从结构。..., 比如:鼠标的数据是从鼠标传到PC机, 对应的端点称为"中断输入端点" 其中端点0是设备的默认控制端点, 既能输出也能输入,用于USB设备的识别过程 同样linux内核也自带了USB总线驱动程序,框架如下...其中usb_bus_type是一个全局变量, 它和我们之前学的platform平台总线相似,属于USB总线, 是Linux中bus的一种....如下图所示,每当创建一个USB设备,或者USB设备驱动时,USB总线都会调用match成员来匹配一次,使USB设备和USB设备驱动联系起来.

8.5K91

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

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

6K20

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

Linux设备驱动的分类 从上图可以看到Linux系统将各异的设备分为三大类:字符设备,块设备和网络设备。内核针对每一类设备都提供了对应驱动模型架构,包括基本的内核设施和文件系统接口。...主设备号用来标识对于的设备驱动程序,而次设备号则由驱动程序使用,用来标识它所管理的若干同类设备设备号的表示 在linux系统中,设备号用dev_t表示。这是个32位的无符号整数。...随着Linux系统的演变,上述的主次设备号的分发可能在将来会发生变化,所以设备驱动程序开发者应该避免直接使用主次设备号所占的位宽来获得对于的主设备号或次设备号。...假设在内核版本之后对主次设备号所占的位数发生了变化,MINORBITS修改为18位,只要驱动是使用MAJOR和MINOR宏来操作设备号,就不需要修改驱动代码也可以在新内核中使用。...,第一个参数form表示一个设备号,第二个参数count表示次设备的个数,也就是当前驱动程序所管理的同类设备的个数,第三个参数name表示设备或者驱动的名称。

7.1K52

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

设备是与字符设备并列的概念, 这两类设备Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...但对于一些磁盘设备而言请求的速度很慢,这时候内核就提供一种队列的机制把这些I/O请求添加到队列中(即:请求队列),在驱动中用request_queue结构体描述。...编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2....undefined .owner = THIS_MODULE, }; 驱动安装之后,查看的节点信息: 设置磁盘的容量 /*注意: 块设备的大小使用扇区作为单位设置

31.8K30

USB总线-Linux内核USB3.0设备控制器驱动框架分析(四)

最上层的是Gadget Function驱动,代表了具体设备驱动,如大容量存储设备驱动(U盘、移动硬盘等)、通讯类设备驱动(USB串口、USB虚拟网卡等)、UAC驱动(USB麦克风、USB声卡等USB...2.Gadget Function驱动 Linux内核的USB Gadget Function驱动都在drivers/usb/gadget/function/目录下,有通讯设备类(Communication...如USB音频设备驱动文件audio.c,USB虚拟以太网设备驱动文件ether.c,HID设备驱动文件hid.c。...Linux 3.11版本引入了USB Gadget Configfs。在用户层可以通过暴漏出来的API定义USB Gadget设备的任意功能和配置,极大的方便了USB复合设备的配置和使用。...usb总线,usb主机会枚举usb设备 int (*pullup) (struct usb_gadget *, int is_on); int (*ioctl)(struct usb_gadget

9.4K20

Linux设备驱动模型-Bus

前言 在linux设备驱动模型中,总线可以看作是linux设备模型的核心,系统中的其他设备以及驱动都是以总线为核心围绕。不过驱动程序员在系统中创建一条总线的机会并不多。...驱动模型中的总线可以是真是存在的物理总线(USB总线,I2C总线,PCI总线),也可以是为了驱动模型架构设计出的虚拟总线(Platform总线)。...为此linux设备驱动模型都将围绕"总线--设备--驱动"来展开,因为符合linux设备驱动模型的设备驱动都是必须挂载在一个总线上的,无论是实际存在的或者虚拟的。....match: 当一个设备或者驱动添加到此总线上的时候,bus就会调用match对设备驱动一一匹配的。...p: 一个用来管理总线设备驱动的数据结构。

3.8K20

设备驱动外传 – 虚拟总线和platform device「建议收藏」

驱动程序使用 platform device 1. 总论 Linux-2.6.11引入了设备模型的概念,将大部分设备驱动挂载到虚拟总线上。...其目的在于: 1) 提供友好的用户接口,用户可以在sys/bus/platform/下找到相应的驱动设备。 2) 更有利于电源管理。 2....,驱动通过匹配该名字找到设备 .id = 0, .dev = { .dma_mask = &pxamci_dmamask, .coherent_dma_mask = 0xffffffff...驱动程序使用 platform device 驱动程序通过platform_driver_register()找到与该驱动对应的设备,完成驱动设备的绑定,并且挂载到虚拟总线上。...error) fn(dev, data); //fn即__driver_attach,完成设备驱动的绑定 … … } static void driver_bound(struct device

47430

Linux设备驱动详解

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

5.3K30
领券