在加载驱动模块后,就要自己使用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驱动:自动创建设备节点相关推荐

  1. linux内核创建节点,Linux内核驱动自动创建设备节点文件

    Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...

  2. linux字符驱动之自动创建设备节点

    上一节中,我们是手工创建设备节点,大家肯定也会觉得这样做太麻烦了. 上一节文章链接:https://blog.csdn.net/qq_37659294/article/details/10430270 ...

  3. Linux 字符设备驱动结构(二)—— 自动创建设备节点

    上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号. 第一种是使用mknod手工创建:mknod filename type major minor ...

  4. Linux模块(2) - 创建设备节点

    今天计划将之前写的模块Linux模块(1) - 加载与卸载填充一下,达到设备节点创建的功能. 1. 全局数据 模块中有许多数据结构是要动态申请和释放的,就少不了一些全局数据来标记这些信息,这里通过宏M ...

  5. linux 设备节点 驱动,【Linux驱动】自动创建设备节点

    开始学习驱动的时候,是将驱动程序编译成模块然后用mknod命令手动建立设备节点以提供给应用程序调用.这对于刚开始调试驱动程序的时候常用的一种方法.但是,当有种需要必须在系统启动的时候就将驱动程序就绪, ...

  6. linux自动创建设备节点

    在有2.6系列版本中支持udev管理设备文件可以方便的创建设备节点,不必使用mknod来创建 //主要用到的四个方法在linux/device.h定义: //创建类和释放类的函数  创建成后将创建/s ...

  7. Linux驱动(11)--生成设备节点

    生成设备节点 1. 生成设备节点 1.1 杂项设备 1.2 注册文件 1.3 生成设备节点源代码 1.4 生成设备节点步骤 1.5 需要注意的问题 2. 调用设备节点 1. 生成设备节点 1.1 杂项 ...

  8. linux使用DEVICE_ATTR创建设备节点(常用)

    DEVICE_ATTR是一个宏,其定义在include/linux/device.h文件: #define DEVICE_ATTR(_name, _mode, _show, _store) \ str ...

  9. 怎样在Linux驱动中创建proc节点(示例)

    一.定义proc节点的读.写函数 static int tp_switch_writeproc(struct file *file,const char *buffer, unsigned long ...

最新文章

  1. python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!
  2. C及C++中typedef的简单使用指南
  3. 西部数据 MyCloud 网络存储存在 RCE 漏洞
  4. SSM-SpringMVC-07:SpringMVC中处理器映射器
  5. 美团脱颖而出的经验_使数据科学项目脱颖而出的6种方法
  6. 测试Maven版本插件自动递增版本号
  7. 百度任务型对话系统小记
  8. composer 下载包慢的解决方法
  9. Redis的两种持久化介绍与对比
  10. 手动修改Sublime Text2 边栏Sidebar的样式
  11. 腾讯看点基于 Flink 的实时数仓及多维实时数据分析实践
  12. aix 查看防火墙状态_AIX系统自带防火墙
  13. 网络运维工程师面试题分享
  14. cscd期刊计算机排名,计算机CSCD核心期刊.pdf
  15. 用友U9V28应用中设置sa密码问题
  16. QT中文字体显示以及字体大小不能改变的问题
  17. 本地笔记本连接sqlserver数据库连接失败 证书链是由不受信任的颁发机构颁发的
  18. 计算机研究生毕业论文提纲,计算机硕士毕业论文提纲范文
  19. 福岛第一核电站的辐射水平已明显下降
  20. 外贸ERP系统的操作有什么特点?中小企业适合选择吗?

热门文章

  1. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.8节本章小结
  2. Kafka学习-入门
  3. android列表【android开发记录片】android下实现圆角列表布局控件
  4. javascript数组中数字和非数字下标的区别
  5. 为mysql cluster添加sql节点
  6. PHP 全局变量global详解
  7. 女人 这20种男人你永远不必等
  8. html图片往左,如何用js把一张图片由右向左展开?
  9. 正则基础之 NFA引擎匹配原理
  10. uniny 物体运动到一个点停止_人教版高中英语必修五Unit 5 单词详解