在Linux系统中,一切皆文件,字符设备也不例外。字符设备是指那些只能按字节顺序进行读写、不支持随机访问的设备,比如键盘、鼠标、串口等。它们的设备文件都集中存放在一个固定的位置,方便用户和应用程序统一访问。

字符设备存放在哪里
Linux字符设备文件统一放在根文件系统中的 /dev 目录下。这个目录由系统自动维护,设备驱动加载后通常会在 /dev 中创建对应的设备节点。例如,第一个串口常常是 /dev/ttyS0,鼠标可能是 /dev/input/mouse0。
为什么放在/dev目录
/dev 是 device 的缩写,专门用来容纳设备文件。Linux 通过虚拟文件系统(如 devtmpfs)在系统启动时挂载该目录,让内核中的设备驱动以文件接口暴露给用户空间。
如何查看字符设备
我们可以使用 ls -l 命令查看 /dev 中的文件类型。字符设备文件在权限列的第一个字符显示为 c。
# 查看/dev下的字符设备示例 ls -l /dev | grep "^c" # 查看某个具体设备 ls -l /dev/ttyS0
如果想看系统当前注册的字符设备主设备号,可以阅读 /proc/devices 文件:
cat /proc/devices | grep -A 20 "Character devices"
字符设备命名规律
不同类的字符设备在 /dev 下有约定俗成的名称前缀,下面列出常见示例:
| 设备类型 | 常见路径 | 说明 |
|---|---|---|
| 串口 | /dev/ttyS0 | 物理串口设备 |
| 虚拟终端 | /dev/tty1 | 本地控制台终端 |
| 输入设备 | /dev/input/event0 | 键盘鼠标等输入 |
| 空设备 | /dev/null | 丢弃所有写入数据 |
设备文件的主次设备号
每个字符设备文件都由主设备号和次设备号标识,前者代表驱动,后者代表具体实例。可用 stat 查看:
stat -c "%t %T" /dev/ttyS0
自己创建字符设备节点
在编写字符设备驱动并加载后,若系统未自动创建设备文件,可使用 mknod 手动建立。下面代码演示创建一个主设备号为 240、次设备号为 0 的字符设备:
# 创建字符设备节点 mychar,主设备号240,次设备号0 mknod /dev/mychar c 240 0 # 设置权限 chmod 666 /dev/mychar
需要注意,现代Linux多使用 udev 机制在驱动注册时自动在 /dev 创建节点,手动 mknod 一般只在调试或特殊场景使用。
总结
Linux字符设备文件固定存放于 /dev 目录,通过 c 类型文件对外暴露。理解其存放路径、查看方式和命名规则,有助于我们进行驱动开发或日常排障。只要记住设备皆文件、字符在dev,就能快速定位系统中的字符设备。