linux驱动:自动创建设备节点
在加载驱动模块后,就要自己使用mknod创建设备节点,这样虽然是可行的,但是比较麻烦。我们可以在__init()函数里面添加一些函数,自动创建设备节点。创建设备节点使用了两个函数 class_create()和device_create(),当然在__exit()函数里,要使用class_destory()和device_desotry()注销创建的设备节点。
1. 函数说明
struct device *device_create(struct class *class, struct device *parent,
dev_t devt, const char *fmt, ...)struct device *device_create(struct class *class, struct device *parent,
dev_t devt, void *drvdata, const char *fmt, ...)
在驱动用加入对udev的支持主要做的就是:在驱动初始化的代码里调用class_create(...)为该设备创建一个class,再为每个设备调用device_create(...)( 在2.6较早的内核中用class_device_create)创建对应的设备。
内核中定义的struct class结构体,顾名思义,一个struct class结构体类型变量对应一个类,内核同时提供了class_create(…)函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建好了这个类,再调用 device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应 device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。
2. 具体用法
需要包含头文件 #include <linux/device.h>
static int led_init()
{major = register_chrdev(0, "led_drv", &led_fops);led_drv_class = class_create("THIS_MODULE", "led_drv");device_create(led_drv_class, NULL, MKDEV(major, 0), NULL, "myled");return 0;}static void led_exit()
{unregister_chrdev(major, "led_drv");device_destroy(led_drv_class, MKDEV(major, 0));class_destroy(led_drv_class);}
在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 device_create创建对应的设备。
加载模块后,会自动在/dev/下创建myled设备文件。
linux驱动:自动创建设备节点相关推荐
- linux内核创建节点,Linux内核驱动自动创建设备节点文件
Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...
- linux字符驱动之自动创建设备节点
上一节中,我们是手工创建设备节点,大家肯定也会觉得这样做太麻烦了. 上一节文章链接:https://blog.csdn.net/qq_37659294/article/details/10430270 ...
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号. 第一种是使用mknod手工创建:mknod filename type major minor ...
- Linux模块(2) - 创建设备节点
今天计划将之前写的模块Linux模块(1) - 加载与卸载填充一下,达到设备节点创建的功能. 1. 全局数据 模块中有许多数据结构是要动态申请和释放的,就少不了一些全局数据来标记这些信息,这里通过宏M ...
- linux 设备节点 驱动,【Linux驱动】自动创建设备节点
开始学习驱动的时候,是将驱动程序编译成模块然后用mknod命令手动建立设备节点以提供给应用程序调用.这对于刚开始调试驱动程序的时候常用的一种方法.但是,当有种需要必须在系统启动的时候就将驱动程序就绪, ...
- linux自动创建设备节点
在有2.6系列版本中支持udev管理设备文件可以方便的创建设备节点,不必使用mknod来创建 //主要用到的四个方法在linux/device.h定义: //创建类和释放类的函数 创建成后将创建/s ...
- Linux驱动(11)--生成设备节点
生成设备节点 1. 生成设备节点 1.1 杂项设备 1.2 注册文件 1.3 生成设备节点源代码 1.4 生成设备节点步骤 1.5 需要注意的问题 2. 调用设备节点 1. 生成设备节点 1.1 杂项 ...
- linux使用DEVICE_ATTR创建设备节点(常用)
DEVICE_ATTR是一个宏,其定义在include/linux/device.h文件: #define DEVICE_ATTR(_name, _mode, _show, _store) \ str ...
- 怎样在Linux驱动中创建proc节点(示例)
一.定义proc节点的读.写函数 static int tp_switch_writeproc(struct file *file,const char *buffer, unsigned long ...
最新文章
- python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!
- C及C++中typedef的简单使用指南
- 西部数据 MyCloud 网络存储存在 RCE 漏洞
- SSM-SpringMVC-07:SpringMVC中处理器映射器
- 美团脱颖而出的经验_使数据科学项目脱颖而出的6种方法
- 测试Maven版本插件自动递增版本号
- 百度任务型对话系统小记
- composer 下载包慢的解决方法
- Redis的两种持久化介绍与对比
- 手动修改Sublime Text2 边栏Sidebar的样式
- 腾讯看点基于 Flink 的实时数仓及多维实时数据分析实践
- aix 查看防火墙状态_AIX系统自带防火墙
- 网络运维工程师面试题分享
- cscd期刊计算机排名,计算机CSCD核心期刊.pdf
- 用友U9V28应用中设置sa密码问题
- QT中文字体显示以及字体大小不能改变的问题
- 本地笔记本连接sqlserver数据库连接失败 证书链是由不受信任的颁发机构颁发的
- 计算机研究生毕业论文提纲,计算机硕士毕业论文提纲范文
- 福岛第一核电站的辐射水平已明显下降
- 外贸ERP系统的操作有什么特点?中小企业适合选择吗?