在有2.6系列版本中支持udev管理设备文件可以方便的创建设备节点,不必使用mknod来创建

  1. //主要用到的四个方法在linux/device.h定义:
  2. //创建类和释放类的函数  创建成后将创建/sys/class/name文件夹
  3. extern struct class *class_create(struct module *owner, const char *name);
  4. extern void class_destroy(struct class *cls);
  5. //在低版本的内核提供class_device_create来创建设备节点 和 删除设备的方法
  6. extern struct class_device *class_device_create(struct class *cls,
  7. struct class_device *parent,
  8. dev_t devt,
  9. struct device *device,
  10. const char *fmt, ...)
  11. __attribute__((format(printf,5,6)));
  12. extern void class_device_destroy(struct class *cls, dev_t devt);
  13. //在高版本的内核提供device_create来创建设备节点 和 删除设备的方法
  14. extern struct device *device_create(struct class *cls,
  15. struct device *parent,
  16. dev_t devt, void *drvdata,
  17. const char *fmt, ...)
  18. __attribute__((format(printf, 5, 6)));
  19. extern void device_destroy(struct class *cls, dev_t devt);
  20. //如果你不知道你的到底哪个函数,可以直接到内核头文件目录下找device.h,搜索一下定义的是哪个函数

##########################举例说明################################

  1. #include <linux/module.h>
  2. #include <linux/errno.h>
  3. #include <linux/kernel.h>
  4. #include <linux/device.h>
  5. #include <linux/kdev_t.h>
  6. #include <linux/err.h>
  7. MODULE_AUTHOR("my name");
  8. MODULE_LICENSE("Dual BSD/GPL");
  9. static int major_i=66;
  10. static int minor_i=0;
  11. struct class* mclass;
  12. static int node_init(void)
  13. {
  14. /*class_create 成后在/sys/class创建noddev文件夹*/
  15. mclass=class_create(THIS_MODULE,"noddev");
  16. if(IS_ERR(mclass))
  17. {
  18. printk(KERN_ALERT "fail to create class\n");
  19. return -1;
  20. }
  21. /*class_device_create 在/dev下创建 noddev0设备*/
  22. device_create(mclass,NULL,MKDEV(major_i,minor_i),NULL,"noddev0");
  23. /*这里最后一个参数可以用格式化参数 const char *fmt, ...*/
  24. device_create(mclass,NULL,MKDEV(major_i,minor_i+20),NULL,"noddev%d",minor_i+20);
  25. printk(KERN_ALERT "create node success:\n");
  26. printk(KERN_ALERT "  ls -l /dev/noddev*\n");
  27. printk(KERN_ALERT "  ls -l /sys/class/noddev\n");
  28. return 0;
  29. }
  30. static void node_exit(void)
  31. {
  32. /*删除创建的设备文件*/
  33. device_destroy(mclass,MKDEV(major_i,minor_i));
  34. device_destroy(mclass,MKDEV(major_i,minor_i+20));
  35. class_destroy(mclass); /*删除类*/
  36. printk(KERN_ALERT "goodbye\n");
  37. }
  38. module_init(node_init);
  39. module_exit(node_exit);

################也可动态申请设备号###################

#include<linux/fs.h>

  1. static int major;
  2. static int minor;

alloc_chrdev_region(&dev_num,0,1,"moddev");     //(number,frist minor,count ,"name")
        major=MAJOR(dev_num);
        minor=MINOR(dev_num);

linux自动创建设备节点相关推荐

  1. linux驱动:自动创建设备节点

    在加载驱动模块后,就要自己使用mknod创建设备节点,这样虽然是可行的,但是比较麻烦.我们可以在__init()函数里面添加一些函数,自动创建设备节点.创建设备节点使用了两个函数 class_crea ...

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

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

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

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

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

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

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

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

  6. linux内核创建字符节点,Tiny6410学习ing—(四)、嵌入式Linux内核驱动进阶—(7)、高级字符设备驱动(自动创建节点)—#931...

    按照国嵌的视频教程上来说的,最后就是-自动创建设备文件! 其实我感觉以前完全可以直接是手动创建了设备文件,然后就可以直接讲述自动创建设备文件,为啥非要拖到最后来讲述,我也就不清楚了!! 不管了,写完收 ...

  7. linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点

    1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...

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

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

  9. 《Linux驱动:设备节点文件的创建过程》

    文章目录 一.前言 二.uevent机制 2.1 Sysfs文件系统 2.2 Kobject的事件类型 三.mdev应用程序 3.1 mdev的配置文件 四.实例分析 4.1 uevent机制 4.2 ...

最新文章

  1. 从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附代码)
  2. 重磅直播|中科慧眼崔峰博士详解深度相机原理及其应用
  3. peleenet v2不好
  4. Linux之设置http代理
  5. 让你的网页达到最好的视觉效果
  6. Intel Realsense D435 Tensorlfow-yolov3 测试摄像头识别坐标转换成实际空间坐标的准确程度
  7. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结
  8. Django学习笔记之——Forms
  9. Orion Network Performance Monitor 软件在网络管理中的应用
  10. 初探System.Threading.Channels
  11. 关于“幽灵架构”的补充说明5:改造控制器
  12. SVG 教程 (三)圆形,椭圆,直线
  13. DevOps交付模式下,软件测试的那些事
  14. Tensorflow学习笔记 (用 tf.data 加载图片)
  15. 小甲鱼c语言_Tip:一起做一个平平无奇的程序小天才吧
  16. 英雄连2一直显示连接relic服务器,英雄连2联机时出现PleaseWait问题的解决方法_英雄连2PleaseWait问题的解决方法_牛游戏网...
  17. js将字符串倒叙的方法
  18. 雷军博客分享-日本的电饭煲到底好在哪?
  19. MinGW与Clion下载安装及使用详解
  20. chrome版本更新后,chromedriver对应版本更新

热门文章

  1. 来,我教你怎么优雅删除数据
  2. pfamscan 的使用_【HMMSCAN】使用pfam数据库对多序列文件进行结构域注释
  3. 狂神RabbitMQ
  4. 香港城大计算机学院xutaowei,2018年3月20日学术报告(徐宏,香港城市大学)
  5. Unity-托管代码剥离(link.xml使用)
  6. 微信or支付宝交易限额
  7. Froont!在线可视化响应式网页设计工具
  8. 超详细的 MySQL 学习教程二(多实例、附练习、视频讲解持续更新)
  9. Google天气Xml文件
  10. css的论文,css