linux自动创建设备节点
在有2.6系列版本中支持udev管理设备文件可以方便的创建设备节点,不必使用mknod来创建
- //主要用到的四个方法在linux/device.h定义:
- //创建类和释放类的函数 创建成后将创建/sys/class/name文件夹
- extern struct class *class_create(struct module *owner, const char *name);
- extern void class_destroy(struct class *cls);
- //在低版本的内核提供class_device_create来创建设备节点 和 删除设备的方法
- extern struct class_device *class_device_create(struct class *cls,
- struct class_device *parent,
- dev_t devt,
- struct device *device,
- const char *fmt, ...)
- __attribute__((format(printf,5,6)));
- extern void class_device_destroy(struct class *cls, dev_t devt);
- //在高版本的内核提供device_create来创建设备节点 和 删除设备的方法
- extern struct device *device_create(struct class *cls,
- struct device *parent,
- dev_t devt, void *drvdata,
- const char *fmt, ...)
- __attribute__((format(printf, 5, 6)));
- extern void device_destroy(struct class *cls, dev_t devt);
- //如果你不知道你的到底哪个函数,可以直接到内核头文件目录下找device.h,搜索一下定义的是哪个函数
##########################举例说明################################
- #include <linux/module.h>
- #include <linux/errno.h>
- #include <linux/kernel.h>
- #include <linux/device.h>
- #include <linux/kdev_t.h>
- #include <linux/err.h>
- MODULE_AUTHOR("my name");
- MODULE_LICENSE("Dual BSD/GPL");
- static int major_i=66;
- static int minor_i=0;
- struct class* mclass;
- static int node_init(void)
- {
- /*class_create 成后在/sys/class创建noddev文件夹*/
- mclass=class_create(THIS_MODULE,"noddev");
- if(IS_ERR(mclass))
- {
- printk(KERN_ALERT "fail to create class\n");
- return -1;
- }
- /*class_device_create 在/dev下创建 noddev0设备*/
- device_create(mclass,NULL,MKDEV(major_i,minor_i),NULL,"noddev0");
- /*这里最后一个参数可以用格式化参数 const char *fmt, ...*/
- device_create(mclass,NULL,MKDEV(major_i,minor_i+20),NULL,"noddev%d",minor_i+20);
- printk(KERN_ALERT "create node success:\n");
- printk(KERN_ALERT " ls -l /dev/noddev*\n");
- printk(KERN_ALERT " ls -l /sys/class/noddev\n");
- return 0;
- }
- static void node_exit(void)
- {
- /*删除创建的设备文件*/
- device_destroy(mclass,MKDEV(major_i,minor_i));
- device_destroy(mclass,MKDEV(major_i,minor_i+20));
- class_destroy(mclass); /*删除类*/
- printk(KERN_ALERT "goodbye\n");
- }
- module_init(node_init);
- module_exit(node_exit);
################也可动态申请设备号###################
#include<linux/fs.h>
- static int major;
- 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自动创建设备节点相关推荐
- linux驱动:自动创建设备节点
在加载驱动模块后,就要自己使用mknod创建设备节点,这样虽然是可行的,但是比较麻烦.我们可以在__init()函数里面添加一些函数,自动创建设备节点.创建设备节点使用了两个函数 class_crea ...
- linux字符驱动之自动创建设备节点
上一节中,我们是手工创建设备节点,大家肯定也会觉得这样做太麻烦了. 上一节文章链接:https://blog.csdn.net/qq_37659294/article/details/10430270 ...
- Linux 字符设备驱动结构(二)—— 自动创建设备节点
上一篇我们介绍到创建设备文件的方法,利用cat /proc/devices查看申请到的设备名,设备号. 第一种是使用mknod手工创建:mknod filename type major minor ...
- linux内核创建节点,Linux内核驱动自动创建设备节点文件
Linux下生成驱动设备节点文件的方法有3个:1.手动mknod:2.利用devfs:3.利用udev 在刚开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点,实际上L ...
- linux 设备节点 驱动,【Linux驱动】自动创建设备节点
开始学习驱动的时候,是将驱动程序编译成模块然后用mknod命令手动建立设备节点以提供给应用程序调用.这对于刚开始调试驱动程序的时候常用的一种方法.但是,当有种需要必须在系统启动的时候就将驱动程序就绪, ...
- linux内核创建字符节点,Tiny6410学习ing—(四)、嵌入式Linux内核驱动进阶—(7)、高级字符设备驱动(自动创建节点)—#931...
按照国嵌的视频教程上来说的,最后就是-自动创建设备文件! 其实我感觉以前完全可以直接是手动创建了设备文件,然后就可以直接讲述自动创建设备文件,为啥非要拖到最后来讲述,我也就不清楚了!! 不管了,写完收 ...
- linux mdev 命令,linux设备驱动----利用mdev(udev)自动创建设备文件节点
1.mdev的使用方法和原理: mdev是busybox 自带的一个简化版的udev,适合于嵌入式的应用埸合.其具有使用简单的特点.它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程 ...
- Linux模块(2) - 创建设备节点
今天计划将之前写的模块Linux模块(1) - 加载与卸载填充一下,达到设备节点创建的功能. 1. 全局数据 模块中有许多数据结构是要动态申请和释放的,就少不了一些全局数据来标记这些信息,这里通过宏M ...
- 《Linux驱动:设备节点文件的创建过程》
文章目录 一.前言 二.uevent机制 2.1 Sysfs文件系统 2.2 Kobject的事件类型 三.mdev应用程序 3.1 mdev的配置文件 四.实例分析 4.1 uevent机制 4.2 ...
最新文章
- 从零开始学习Deep SORT+YOLO V3进行多目标跟踪(附代码)
- 重磅直播|中科慧眼崔峰博士详解深度相机原理及其应用
- peleenet v2不好
- Linux之设置http代理
- 让你的网页达到最好的视觉效果
- Intel Realsense D435 Tensorlfow-yolov3 测试摄像头识别坐标转换成实际空间坐标的准确程度
- 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结
- Django学习笔记之——Forms
- Orion Network Performance Monitor 软件在网络管理中的应用
- 初探System.Threading.Channels
- 关于“幽灵架构”的补充说明5:改造控制器
- SVG 教程 (三)圆形,椭圆,直线
- DevOps交付模式下,软件测试的那些事
- Tensorflow学习笔记 (用 tf.data 加载图片)
- 小甲鱼c语言_Tip:一起做一个平平无奇的程序小天才吧
- 英雄连2一直显示连接relic服务器,英雄连2联机时出现PleaseWait问题的解决方法_英雄连2PleaseWait问题的解决方法_牛游戏网...
- js将字符串倒叙的方法
- 雷军博客分享-日本的电饭煲到底好在哪?
- MinGW与Clion下载安装及使用详解
- chrome版本更新后,chromedriver对应版本更新