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已经被删除了。

目录
相关文章
|
10月前
|
Linux Go SoC
关于S3学习所涉及到的知识(二):Linux设备驱动suspend/resume的顺序
关于S3学习所涉及到的知识(二):Linux设备驱动suspend/resume的顺序
420 0
|
移动开发 NoSQL 网络协议
掌握GDB调试工具,轻松排除bug(下)
掌握GDB调试工具,轻松排除bug
|
3月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
700 81
高效搭建Nacos:实现微服务的服务注册与配置中心
|
6月前
|
机器学习/深度学习 存储 人工智能
压缩大型语言模型(LLMs):缩小10倍、性能保持不变
尽管大规模语言模型(LLMs)在多种应用场景中表现出色,但其庞大的规模也带来了实际部署难题。本文探讨了通过模型压缩技术解决这些问题的方法,介绍了量化、剪枝和知识蒸馏三种主要压缩技术,并通过具体Python代码示例展示了如何将一个100M参数的文本分类模型压缩至52.8M参数,再通过4位量化进一步减小至原来的1/7,同时保持甚至提升性能。示例代码展示了从数据预处理、模型训练到评估的完整流程,证明了压缩技术的有效性。
273 6
|
7月前
|
Linux Shell 数据安全/隐私保护
Linux用户账户管理精髓:创建、删除、密码与会话管理全攻略
本文档介绍了Linux系统中用户账户管理的关键操作,包括创建与删除用户、设置及修改密码、用户切换与会话管理等内容。通过理论说明与具体命令示例,如使用`useradd`、`userdel`、`passwd`和`su`等命令,帮助系统管理员更好地掌握这些基本技能,从而有效提升系统的安全性和管理效率。此外,还介绍了如何利用`screen`等工具进行会话管理,确保即便在网络中断的情况下也能维持会话的持续运行。
191 3
|
7月前
|
监控 Linux Shell
但凡我早点知道这个Linux批量ping的脚本,也不至于现在还单身!
但凡我早点知道这个Linux批量ping的脚本,也不至于现在还单身!
155 1
|
10月前
|
存储 缓存 网络协议
深入理解Linux网络——内核是如何发送网络包的
一、相关实际问题 1. 查看内核发送数据消耗的CPU时应该看sy还是si 2. 在服务器上查看/proc/softirqs,为什么NET_RX要比NET_TX大得多 3. 发送网络数据的时候都涉及那些内存拷贝操作 4. 零拷贝到底是怎么回事 5. 为什么Kafka的网络性能很突出
|
10月前
|
运维 监控 Unix
htop命令详解
`htop`是Unix-like系统的一款增强版进程查看器,基于ncurses,提供实时系统监控、交互式导航、彩色界面和多核支持。用户可通过键盘或鼠标操作,如排序、搜索、过滤进程,直接发送信号(如`F9`杀进程)等。常用快捷键包括`P`(按CPU排序)、`F3`(搜索进程)、`F2`(设置)和`F10`(退出)。它是`top`的现代替代品,提升资源管理和故障排查效率。
404 2
|
10月前
|
Ubuntu 搜索推荐 Linux
【专栏】8款适合学生的Linux发行版,看看有没有你喜欢的!
【4月更文挑战第28天】本文介绍了8款适合学生的Linux发行版:Ubuntu(用户友好,稳定且有教育资源)、Linux Mint(优化用户体验)、Fedora(创新前沿)、openSUSE(强大稳定)、Elementary OS(简洁设计)、Manjaro(Arch Linux的易用版)、Zorin OS(类似Windows)和Kubuntu(KDE桌面环境)。选择时需考虑易用性、软件资源、社区支持和稳定性。这些发行版各具特色,适合不同需求的学生,有助于提升技术能力和探索精神。建议学生亲自尝试,找到最适合自己的Linux发行版,以适应不断发展的技术环境。
309 0
|
10月前
|
Linux
Linux(23) Linux 4G模块不能获取IP排查思路
Linux(23) Linux 4G模块不能获取IP排查思路
458 0