Linux如何创建设备节点?

摘要:创建设备节点 在 Linux 系统中,所有硬件设备都会被当作文件来管理。这些设备对应的特殊文件叫做设备节点,都存放在dev文件夹里。它们的作用就像桥梁:一边连接着系统内部识别的硬件设备,另一边让应用程序能像操作普通文件一样读写设备数据。这
创建设备节点 在 Linux 系统中,所有硬件设备都会被当作文件来管理。这些设备对应的特殊文件叫做设备节点,都存放在/dev文件夹里。它们的作用就像桥梁:一边连接着系统内部识别的硬件设备,另一边让应用程序能像操作普通文件一样读写设备数据。这样程序就能通过访问这些特殊文件,间接控制硬件完成操作。 一、SYSFS 文件系统 sysfs 是 Linux 内核提供的一个虚拟文件系统,通常挂载在 /sys 目录。它以目录和属性文件的形式,展示了系统中各类设备、内核模块、内核参数等信息。 像一扇窗口,让你不用深入内核代码即可直观看到所有硬件和驱动的情况。驱动注册时,如果用 class_create 等接口,会自动在 /sys/class/ 下生成相关的 class 目录(比如 /sys/class/myclass/),方便查看和自动生成 /dev/ 设备节点。 二、自动创建设备文件的工具 Linux 新内核中,设备节点的创建主要借助于 udev(User Device),它是一种用户空间的设备管理工具。udev 能自动监控内核发出的硬件变化事件(如插入或移除设备),并智能地在 /dev/ 目录下为所有类型的设备创建设备节点文件。 udev的优点: 自动识别设备,自动创建设备文件; 支持对设备文件命名和权限进行自定义规则设置; 不必手动用 mknod 创建节点,方便又安全。 手动创建(使用命令) 可以使用命令: sudo mknod /dev/设备名 [c|b] 主设备号 次设备号 设备名:自己定义,比如 mydev c:表示字符设备(b 表示块设备) 主设备号、次设备号:与驱动程序中注册时保持一致 示例: 创建一个 mydev ,设定为主设备号为 240,次设备号为 0: mknod /dev/mydev c 240 0 chmod 666 /dev/mydev ls -l /dev/mydev 危险操作:删除设备节点使用 sudo rm /dev/mydev 四、自动创建设备节点 推荐使用自动创建设备节点的方法。只需在驱动代码里调用内核提供的 class_create 和 device_create 函数,就能让内核自动在 /dev/ 下生成设备文件,并配合 udev 正确识别。 例子(与驱动注册部分配合): struct class *cls; cls = class_create(THIS_MODULE, "myclass"); device_create(cls, NULL, devno, NULL, "mydev"); 这样会自动生成 /dev/mydev。 卸载驱动时记得清理: device_destroy(cls, devno); class_destroy(cls); 五、创建设备节点实验 1、源码编写 写一个简单的字符设备驱动,它在加载时自动创建设备节点 /dev/mydev。
阅读全文