linux驱动之设备号与创建设备节点
设备号:
1、自己主动分配
major = register_chrdev(0,"first_drv",&first_sdv_fops);//注冊
注冊设备时给设备号写0,则内核会自己主动分配一个主设备号返回。
2、手动指定
到 proc/devices 文件下查找都有哪些主设备号。假设没有被使用的我们就可以拿过来使用它。
应用程序设备节点:
我们会使用open这个函数带开一个设备,那么open("dev/xxx")中dev/xxx 这个设备节点怎么来?
1、用 mknod /dev/xxx c 主设备号 次设备号
2、自己主动创建:
提示:
mdev: 依据系统信息 创建设备节点
方法:
定义两个变量:
static struct class *firstdrv_class;
static struct class_devices *firstdrv_class_dev;
在入口函数中加入:
firstdrv_class = class_create(THIS_MODULE,"first_drv");
if(IS_ERR(firstdrv_class))
return PTR_ERR(firstdrv_class);
firstdrv_class_dev = device_create(firstdrv_class,NULL,MKDEV(major,0),NULL,"wq_device");
if(unlikely(IS_ERR(firstdrv_class_dev)))
return PTR_ERR(firstdrv_class_dev);
在出口函数中加入:
device_unregister(firstdrv_class_dev);
class_destroy(firstdrv_class);
这样在 /dev下就会生成一个 wq_device 设备。而且会在 /sys/class/first_drv 文件夹下找到一个 wq_device设备,
在/sys/class/first_drv/wq_device 会有一个 dev的文件 文件的内容是: “252:0”
mdev就会依据这些信息创建设备节点。
为什么sys文件夹一更改,mdev就会依据这些信息创建设备节点呢?
原因是 在我们的/etc/init.d/ 文件夹中的rcS文件里 有例如以下内容:
echo /sbin/mdev > /proc/sys/kernel/hotplug
内核一旦有载入或者卸载时 就会调用/proc/sys/kernel/hotplug 所指示的应用程序。
linux驱动之设备号与创建设备节点的更多相关文章
- linux设备管理之主设备号与次设备号
主设备号和次设备号 一个字符设备或者块设备都有一个主设备号和次设备号.主设备号和次设备号统称为设备号.主设备号用来表示一个特定的驱动程序.次设备号用来表示使用该驱动程序的其他设备.(主设备号和控制这类 ...
- linux驱动开发学习一:创建一个字符设备
首先是内核初始化函数.代码如下.主要是三个步骤.1 生成设备号. 2 注册设备号.3 创建设备. #include <linux/module.h> #include <linux/ ...
- linux驱动开发(四) 字符设备驱动框架(自动创建设备节点)
代码如下 #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> # ...
- 嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
首先贴上代码: 字符设备驱动代码: /** *file name: led.c */#include <linux/sched.h> #include <linux/signal.h ...
- linux驱动开发(三) 字符设备驱动框架
还是老规矩先上代码 demo.c #include <linux/init.h> #include <linux/module.h> #include <linux/ke ...
- 嵌入式Linux驱动学习之路(八)创建最小的根文件系统
busybox 在配置busybox,在是否选择要静态链接库时,在静态下,busybox中的工具不需要动态链接库,能够直接运行.而用户自己编写的程序如果需要动态链接库,还是依然需要有. 如果是动态链接 ...
- linux驱动开发学习二:创建一个阻塞型的字符设备
在Linux 驱动程序中,可以使用等待队列来实现阻塞进程的唤醒.等待队列的头部定义如下,是一个双向列表. struct list_head { struct list_head *next, *pre ...
- mknod创建设备(加载新的设备驱动时候,通常会用到此命令)
mknod - make block or character special filesmknod [OPTION]... NAME TYPE [MAJOR MINOR] option 有用的就是- ...
- Linux内核分析(五)----字符设备驱动实现
原文:Linux内核分析(五)----字符设备驱动实现 Linux内核分析(五) 昨天我们对linux内核的子系统进行简单的认识,今天我们正式进入驱动的开发,我们今后的学习为了避免大家没有硬件的缺陷, ...
随机推荐
- redis源码(一):为redis添加自己的列表类型
本文档分为三大部分: 环境介绍与效果演示 redis接收命令到返回数据的执行逻辑 代码实现 文档的重点和难点在第三部分,完全阅读本文档需要读者具备基本的c语言和数据结构知识. 环境介绍和效果演示环境介 ...
- 15Oracle Database 索引
Oracle Database 索引 索引 索引的目的是加快查询速度,就像一本数据的目录一样.建立索引的原则:非常少的DML操作:经常出现在where语句中的字段 2.20.1.建立索引 l 对t_ ...
- 荷兰国旗问题、快排以及BFPRT算法
荷兰国旗问题 给定一个数组arr,和一个数num,请把小于num的数放数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边.要求额外空间复杂度O(1),时间复杂度O(N). 这个问题 ...
- Linux—Ubuntu14.0.5配置JAVA环境
1. 前往ORACLE官网下载最新版本的Java JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html,默认下载 ...
- buf.readDoubleBE()
buf.readDoubleBE(offset[, noAssert]) buf.readDoubleLE(offset[, noAssert]) offset {Number} 0 <= of ...
- PAT 1121 Damn Single
"Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are suppo ...
- Spring使用DriverManagerDataSource和C3P0分别配置MySql6.0.6数据源
首先,看一下项目路径 先说spring配置文件吧,这个比较重要 <?xml version="1.0" encoding="UTF-8"?> < ...
- vue 刷新当前页面的时候重新调用新的cookie
data() { return{ AdminToken: this.getCookie('token'), } }, updated() { //刷新当前页面的时候重新调用新的cookie this. ...
- 【Codeforces 522B】Photo to Remember
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 模拟题.用set模拟下就好 [代码] import java.io.*; import java.util.*; public class M ...
- Leetcode 95.不同的二叉搜索树II
不同的二叉搜索树2 给定一个整数 n,生成所有由 1 ... n 为节点所组成的二叉搜索树. 示例: 输入: 3 输出: [ [1,null,3,2], [3,2,null,1], [3,1,null ...