devfs

简介: devfs

devfs

devfs(设备文件系统)是由Linux 2.4内核引入的,引入时被许多工程师给予了高度评价,它的出现使得设备驱动程序能自主地管理自己的设备文件。具体来说,devfs具有如下优点。

  • 1)可以通过程序在设备初始化时在/dev目录下创建设备文件,卸载设备时将它删除。
  • 2)设备驱动程序可以指定设备名、所有者和权限位,用户空间程序仍可以修改所有者和权限位。
  • 3)不再需要为设备驱动程序分配主设备号以及处理次设备号,在程序中可以直接给register_chrdev()传递0主设备号以获得可用的主设备号,并在devfs_register()中指定次设备号。、

驱动程序应调用下面这些函数来进行设备文件的创建和撤销工作。

/* 创建设备目录 */
devfs_handle_t devfs_mk_dir(devfs_handle_t dir, const char *name, void *info);
/* 创建设备文件 */
devfs_handle_t devfs_register(devfs_handle_t dir, const char *name, unsigned
   int flags, unsigned int major, unsigned int minor, umode_t mode, void *ops,
   void *info);
/* 撤销设备文件 */
void devfs_unregister(devfs_handle_t de);

在Linux 2.4的设备驱动编程中,分别在模块加载卸载函数中创建和撤销设备文件是被普遍采用并值得大力推荐的好方法。代码清单5.5给出了一个使用devfs的范例。

1 static devfs_handle_t devfs_handle;
 2 static int _ _init xxx_init(void)
 3 {
 4     int ret;
 5     int i;
 6     /* 在内核中注册设备 */
 7     ret = register_chrdev(XXX_MAJOR, DEVICE_NAME, &xxx_fops);
 8     if (ret < 0) {
 9         printk(DEVICE_NAME " can't register major number\n");
10         return ret;
11     }
12     /* 创建设备文件 */
13     devfs_handle =devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT,
14     XXX_MAJOR, 0, S_IFCHR | S_IRUSR | S_IWUSR, &xxx_fops, NULL);
15     ...
16     printk(DEVICE_NAME " initialized\n");
17     return 0;
18 }
19
20 static void _ _exit xxx_exit(void)
21 {
22     devfs_unregister(devfs_handle);             /* 撤销设备文件 */
23     unregister_chrdev(XXX_MAJOR, DEVICE_NAME);  /* 注销设备 */
24 }
25
26 module_init(xxx_init);
27 module_exit(xxx_exit);

代码中第7行和第23行分别用于注册和注销字符设备,使用的register_chrdev()和unregister_chrdev()在Linux 2.6以后的内核中仍被采用。

第13和22行分别用于创建和删除devfs文件节点,这些API已经被删除了。

目录
相关文章
|
22天前
|
JSON Java 数据处理
Unity 数据读取|(二)多种方式读取文本文件
Unity 数据读取|(二)多种方式读取文本文件
|
7月前
|
存储 缓存 Linux
深入了解Linux内核跟踪:ftrace基础教程
深入了解Linux内核跟踪:ftrace基础教程
深入了解Linux内核跟踪:ftrace基础教程
|
10月前
|
算法
【八大排序(五)】快排进阶篇-挖坑法+前后指针法
【八大排序(五)】快排进阶篇-挖坑法+前后指针法
|
Linux 数据安全/隐私保护 开发者
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
258 0
Linux驱动开发——(linux内核字符设备硬件操作接口之ioctl)gpio(3)
|
10月前
|
Kubernetes 负载均衡 网络协议
k8s之pod探针
k8s之pod探针
247 0
|
存储 Oracle NoSQL
阿里云存储系统盘或数据盘性能级别PL0、PL1、PL2和PL3什么意思?
阿里云块存储ESSD云盘性能级别PL0、PL1、PL2和PL3,性能级别PL不同云盘容量、单盘最大IOPS、吞吐量及使用业务场景也不同,阿里云百科分享ESSD云盘性能级别PL详解
489 0
阿里云存储系统盘或数据盘性能级别PL0、PL1、PL2和PL3什么意思?
|
监控 容器
第十三章--I/O体系结构和设备驱动程序
一、I/O体系结构         为了确保计算机能够正常工作,必须提供数据通路,让信息在连接到个人计算机的CPU、RAM和I/O设备之间流动。这些数据通路总称为总线,担当计算机内部主通信通道的作用。
1207 0