linux驱动开发之自动创建设备节点
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
在有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);
加载结果
[root@localhost node]# insmod node.ko
[root@localhost node]# dmesg | tail -3
[23503.365316] create node success:
[23503.365319] ls -l /dev/noddev*
[23503.365321] ls -l /sys/class/noddev
[root@localhost node]# ls -l /dev/noddev*
crw------- 1 root root 66, 0 11月 26 15:02 /dev/noddev0
crw------- 1 root root 66, 20 11月 26 15:02 /dev/noddev20
[root@localhost node]# ls -l /sys/class/noddev
总用量 0
lrwxrwxrwx 1 root root 0 11月 26 15:02 noddev0 -> ../../devices/virtual/noddev/noddev0
lrwxrwxrwx 1 root root 0 11月 26 15:02 noddev20 -> ../../devices/virtual/noddev/noddev20
rmmod node后创建的文件自动被删除
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:2 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献3条内容
所有评论(0)