无论是哪种设备,在 /dev 目录下都有一个对应的文件(节点),并且每个设备文件都必须有主/次设备号,主设备号相同的设备是同类设备,使用同一个驱动程序(虽然目前的内核允许多个驱动共享一个主设备号,但绝大多数设备依然遵循一个驱动对应一个主设备号的原则)。
可以通过 cat /proc/devices 命令查看当前已经加载的设备驱动程序的主设备号。
crw------- 1 root root 500, 9 Oct 30 10:56 binder9 root@pcl-01:/home/pcl# ls -l /dev/ | grep binder crwxrwxrwx 1 root root 500, 1 Oct 30 10:56 binder1 crw------- 1 root root 500, 10 Oct 30 10:56 binder10 crw------- 1 root root 500, 11 Oct 30 10:56 binder11 crw------- 1 root root 500, 12 Oct 30 10:56 binder12 crw------- 1 root root 500, 13 Oct 30 10:56 binder13 crw------- 1 root root 500, 14 Oct 30 10:56 binder14 crw------- 1 root root 500, 15 Oct 30 10:56 binder15 crw------- 1 root root 500, 16 Oct 30 10:56 binder16 crw------- 1 root root 500, 17 Oct 30 10:56 binder17 crw------- 1 root root 500, 18 Oct 30 10:56 binder18 crw------- 1 root root 500, 19 Oct 30 10:56 binder19
# cat /proc/devices | grep 500 500 binder #
root@(none):/# mknod /dev/ashmem c 10 55 root@(none):/# ls /dev/ashmem /dev/ashmem root@(none):/# ls /dev/ashmem -l crw-r--r-- 1 root root 10, 55 Nov 11 03:56 /dev/ashmem root@(none):/#
root@(none):/# mknod /dev/nodetest misc 10 54 mknod: invalid device type 'misc' Try 'mknod --help' for more information. root@(none):/# mknod /dev/nodetest c 10 54 root@(none):/# rmnod /dev/nodetest bash: rmnod: command not found root@(none):/# mknod /dev/ashmem c 10 55 root@(none):/# ls /dev/ashmem /dev/ashmem root@(none):/# ls /dev/ashmem -l crw-r--r-- 1 root root 10, 55 Nov 11 03:56 /dev/ashmem root@(none):/#
- mknod命令
命令的格式是:
mknod /dev/设备名 设备类型(字符:c,块:b) 主设备号 从设备号
其中,主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。
因此,想要创建设备节点,需要知道设备类型,及其主从设备号。
例如:mknod /dev/nodetest c 244 10 就创建了一个nodetest的字符设备节点,主设备号是244,次设备号是10
手动创建设备节点的缺点是容易导致设备号冲突。