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。
