002_linux驱动之_register_chrdev注册字符设备

(一)解析:register_chrdev函数和unregister_chrdev函数

(二)register_chrdev函数原型

int register_chrdev(unsigned int major, const char *name,const struct file_operations *fops)

* register_chrdev() -为字符设备注册一个主号码。

* @major:用于动态分配的主要设备号或0

* @name:这一系列设备的名称

* @fops:与此设备相关联的文件操作

*

*如果@major == 0,这个函数将动态分配一个main并返回它的号码。

*如果@major > 0,此函数将尝试使用给定的设备保留设备,主要数字,将返回零成功。

1. 从上面函数原型中我们可知使用register_chrdev函数我们需要设备号,名字,还有相关文件操作就行了

2. 由于能力有限,看不懂register_chrdev里面的程序,故不粘贴全部代码出来,先知道怎么用

3. 使用示例:

major = register_chrdev(0, "first_drv", &first_drv_fops);

解析:第一个参数0则为系统自动分配设备号,并返回,使用major 变量接收

第二个参数设置这个系列设备的名称为first_drv

第三个参数first_drv_fops在003_linux驱动之_file_operations函数

(三)unregister_chrdev函数原型

int unregister_chrdev(unsigned int major, const char *name)

1. 同第二点可知,卸载一个字符设备只需要设备号和名自就行了

2. 使用示例:

unregister_chrdev(major, "first_drv");

(四)注:

1. register_chrdev函数当然是在insmod时候应该调用了,看001_linux驱动之_驱动的加载和卸载

2. unregister_chrdev函数当然是在rmmod时候调用了。

原文地址:https://www.cnblogs.com/luxiaoguogege/p/9690199.html

时间: 2024-08-30 02:46:16

002_linux驱动之_register_chrdev注册字符设备的相关文章

register_chrdev_region/alloc_chrdev_region和cdev注册字符设备驱动

内核提供了三个函数来注册一组字符设备编号,这三个函数分别是 register_chrdev_region().alloc_chrdev_region() 和 register_chrdev(). (1)register_chrdev  比较老的内核注册的形式   早期的驱动(2)register_chrdev_region/alloc_chrdev_region + cdev  新的驱动形式 (3)register_chrdev()函数是老版本里面的设备号注册函数,可以实现静态和动态注册两种方法

Linux设备驱动(2)字符设备

设备号 设备号由主设备号和次设备号组成.linux下,一切设备皆文件,所有的设备都能在/dev目录下找到相应的文件.这些文件除了名字不一样以外,还每个设备文件都有不一样的设备号: 一般地,主设备号对应一个类型的驱动设备,之所以有次设备号,它是用来驱动同类型的设备.如串口,所有的串口共用一个主设备号,每个串口有不同的次设备号. dev_t类型用来保存设备编号(包含主设备号和次设备号),实际上是一个32位整数,12位用来表示主设备号,后20位表示次设备号. #define MINORBITS 20

arm-linux字符设备驱动开发之---简单字符设备驱动

一.linux系统将设备分为3类:字符设备.块设备.网络设备.使用驱动程序: 1.字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据.字符设备是面向流的设备,常见的字符设备有鼠标.键盘.串口.控制台和LED设备等.2.块设备:是指可以从设备的任意位置读取一定长度数据的设备.块设备包括硬盘.磁盘.U盘和SD卡等. 每一个字符设备或块设备都在/dev目录下对应一个设备文件.linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备和

注册字符设备接口

老接口:register_chrdev//注册设备驱动(实现注册设备号和相应的file_operation操作结构体)//缺点:只有主设备号,没有(不支持)次设备号新接口:register_chrdev_region(注册设备号)/alloc_chrdev_region(自动分配设备号) + cdev cdev结构体及相关函数 结构体: struct cdev { struct kobject kobj; struct module *owner; const struct file_opera

使用register_chrdev注册字符设备

1.2.2  使用register_chrdev注册字符设备 注册字符设备可以使用register_chrdev函数. int register_chrdev (unsigned int major, const  char *name, struct file_operations*fops); register_chrdev函数的major参数如果等于0,则表示采用系统动态分配的主设备号. 注销字符设备可以使用unregister_chrdev函数. int unregister_chrde

(57)Linux驱动开发之三Linux字符设备驱动

1.一般情况下,对每一种设备驱动都会定义一个软件模块,这个工程模块包含.h和.c文件,前者定义该设备驱动的数据结构并声明外部函数,后者进行设备驱动的具体实现. 2.典型的无操作系统下的逻辑开发程序是:这种三层的裸机驱动模型是足够满足低耦合.高内聚的特点的. 3.当有操作系统存在时,设备驱动成为了连接硬件和内核的桥梁,这时候的设备驱动对外表现为操作系统的API,与直接裸机开发不同,裸机开发时的设备驱动是应用工程师的API.如果设备驱动都按照操作系统给出的独立于设备的接口而设计,应用程序将可以使用统

Linux设备驱动基本框架(字符设备)

Linux设备驱动都是以内核模块的形式出现的,但模块不一定是驱动.驱动可以编译进内核,在配置内核时,如果把某个配置项设为m,那么它将会随着内核编译时被编译成一个模块,但是这样向内核添加驱动程序会使得内核变得很大,而且在增加.修改.删除驱动程序时需要再一次编译内核,这样做极为麻烦.所以一般的驱动程序都是采用模块化装载,在需要使用时候通过insmod装载进内核,不需要使用时用rmmod卸载驱动模块. 内核模块的主要相关命令: lsmod:查看当前内核装载有哪些模块 insmod:加载模块 rmmod

Linux嵌入式驱动学习之路⑩字符设备驱动-my_led

首先贴上代码: 字符设备驱动代码: /** *file name: led.c */#include <linux/sched.h> #include <linux/signal.h> #include <linux/spinlock.h> #include <linux/errno.h> #include <linux/random.h> #include <linux/poll.h> #include <linux/init

linux驱动之字符设备

第一部分:字符设备工作过程1.系统调用和驱动程序的关联关键结构体:struct file_operation:file_operation结构体的每一个成员的名字都对应着一个系统调用.用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数.这是linux的设备驱动程序工作的基本原理.编写设备驱动程序的主要工作就是编写子函数,并填充file_operations的各个域.