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

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

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

77441

linux字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备:标识设备对应的驱动程序。...一般“一个主设备对应一个驱动程序” 次设备:每个驱动程序负责管理它所驱动的几个硬件实例,这些硬件实例则由次设备来表示。同一驱动下的实例编号,用于确定设备文件所指的设备。 文件名:设备文件名字。...但是对于描述设备文件的inode,跟设备驱动有关的成员只有两个。 dev_t i_rdev; 包含真正的设备。...在模块的入口函数中,申请设备,初始化并注册一个cdev结构; 在模块的出口函数中,注销cdev结构,注销设备; 可以通过文件 /proc/devices 查看设备信息,找到动态分配的主设备 手动建立设备文件通过

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

linux 字符设备驱动

Linux设备驱动概述 操作系统内核是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备设备驱动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。...Linux设备的属性 设备的类型:字符设备、块设备、网络设备; 主设备:标识设备对应的驱动程序。...一般“一个主设备对应一个驱动程序” 次设备:每个驱动程序负责管理它所驱动的几个硬件实例,这些硬件实例则由次设备来表示。同一驱动下的实例编号,用于确定设备文件所指的设备。 文件名:设备文件名字。...但是对于描述设备文件的inode,跟设备驱动有关的成员只有两个。 dev_t i_rdev; 包含真正的设备。...在模块的入口函数中,申请设备,初始化并注册一个cdev结构; 在模块的出口函数中,注销cdev结构,注销设备; 可以通过文件 /proc/devices 查看设备信息,找到动态分配的主设备 手动建立设备文件通过

9.6K45

Linux 常见主设备设备清单

Linux 常见主设备设备清单# 在Linux系统中,设备通常通过主设备和次设备来标识。主设备用于区分设备的大类,例如硬盘、字符设备等;次设备用于在同一大类设备中区分不同的设备。...14 音频设备,如 /dev/dsp(数字音频)、/dev/mixer(混音器) 请注意,不同的Linux发行版和不同的设备驱动可能会有所不同,上述设备只是在大部分系统中的常见设定。...NVMe 设备的主设备是在设备驱动程序注册到内核时由内核动态分配的,因此,不同的系统,内核版本或配置可能会有所不同。在许多现代 Linux 系统中,NVMe 设备的主设备可能是 259。...函数的返回值就是分配给设备的主设备。 然而,查看驱动程序的源代码并不能直接告诉你在特定系统上的设备是什么,因为这取决于内核在运行时的动态分配。...如果你需要知道特定设备设备,最准确的方式是在运行中的系统上查看 /dev 目录下的设备文件,例如使用 ls -l 命令。

35210

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

通过上一节Linux设备驱动字符设备(一)了解了Linux设备驱动的分类,设备的构成,设备的申请以及设备的释放。 在Linux内核中使用struct cdev结构来代码字符设备。...struct kobject kobj 内核的内嵌对象,是Linux设备驱动模型的重要成员。...struct list_head 用来将系统中字符设备形成的链表 dev_t dev 字符设备设备,由主次设备组成 unsigned int count 次设备的个数,用于表示驱动程序管理的同类设备的个数...该部分在后面Linux字符设备框架一节会详细分析,目前只要明白主要流程即可。 字符设备的注销 当驱动程序需要从系统卸载的时候,就需要使用cdev_del释放字符设备占用的内存。...目前为止,已经了解了设备设备的构成,字符设备分配,字符设备的初始化,字符设备的注册以及字符设备的注销。将在下一节通过一个简单的字符设备驱动程序来再次熟悉整个流程,然后总结字符设备驱动的编写模型。

6K20

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

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

7.1K52

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

设备是与字符设备并列的概念, 这两类设备Linux驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...在Linux中,驱动对块设备的输入或输出(I/O)操作,都会向块设备发出一个请求,在驱动中用request结构体描述。...编写块设备驱动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块设备硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对设备而言) 2....如果major = 0,表示尝试分配未使用的主设备,返回值就表示分配成功的主设备。 @name:新块设备的名称。 注意: 名称必须保证在系统中是唯一的(不能与设备名称重名)。...undefined .owner = THIS_MODULE, }; 驱动安装之后,查看的节点信息: 设置磁盘的容量 /*注意: 块设备的大小使用扇区作为单位设置

31.8K30

Linux设备驱动模型-Bus

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

3.8K20

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 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_device usb_device 被"drivers\usb\core\generic.c" 驱动认领后,会选择、设置某个配置 这个配置下面的接口,都会分配、设置、注册一个 usb_interface...接口函数 在 USB 设备驱动程序中,能使用的 USB 函数都在这个头文件里:include\linux\usb.h。...2.1 pipe 使用这些接口函数的主要目的是传输数据,传输数据的对象是 USB 设备里的某个 endpoint,这被称为 pipe: /* Create various pipes... */ #define

39840

Linux 常见固定主次设备设备清单

Linux 常见固定主次设备设备清单# 在 Unix 或 Linux 系统中,一些设备的主次设备是固定的。...下面是一些常见的设备及其固定的主次设备设备前缀 设备路径 设备描述 主设备设备 c /dev/null 空设备,接收且丢弃所有输入,读取时立即返回EOF 1 3 c /dev/zero 零设备...5 0 c /dev/tty0 当前虚拟控制台 4 0 c /dev/console 系统主控制台 5 1 c /dev/ptmx 伪终端主设备 5 2 c /dev/mem 物理内存访问设备 1 1...c /dev/kmem 内核虚拟内存访问设备 1 2 c /dev/full 写入总是返回磁盘已满错误,读取返回null字节 1 7 请注意,上述设备在大多数Unix和Linux系统上是固定的,但这是由内核源代码中的设备注册逻辑决定的...此外,设备文件是否存在以及其权限设置也可能会因系统配置和安全策略的不同而变化。 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

17140

Linux通过设备找到设备的方法

设备用来区分不同种类的设备,而次设备用来区分同一类型的多个设备。对于常用设备Linux有约定俗成的编号。 一个字符设备或者块设备都有一个主设备和次设备。主设备和次设备统称为设备。...主设备用来表示一个特定的驱动程序。次设备用来表示使用该驱动程序的各设备。...因为这个设备是一个VG,所以上述命令无法找到设备,不过可以通过命令dmsetup查看。...1、区分设备驱动程序控制的实际设备; 2、区分不同用途的设备 (misc 系列设备) 3、区分块设备的分区 (partition) 通常,为了使应用程序区分所控制设备的类型,内核使用主设备。...而存在多台同类设备时,为了选择其中的一种,设备驱动程序就使用次设备

6.2K11
领券