linux 的设备驱动程序文档

device driver documentation for linux

在 2017 年的“UNIX 和 Linux 系统管理”一书中,我阅读了以下文章:

现代系统自动管理它们的设备文件。然而,一些罕见的角落 案例可能仍然需要您使用 mknod 命令手动创建设备。 所以这是怎么做的:

mknod filename type major minor

这里filename为要创建的设备文件,type为c为字符设备或b 对于块设备,major 和 minor 是主要和次要设备号。 如果您正在创建一个设备文件,该文件引用您的设备中已经存在的驱动程序 内核,检查驱动程序的文档以找到合适的主要和 次要设备编号。

我在哪里可以找到这个文档以及如何找到设备驱动程序的主要和次要 ???

文档: https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch03s02.html

https://tldp.org/LDP/tlk/dd/drivers.html

how to find the appropriate minor & major number for a device number:
ls -l /dev/
cat /proc/devices  shows the same as lsblk

命令 cat /proc/devices 显示当前 运行 Linux 内核中驱动程序使用的字符和块主设备号,但不提供有关次设备号的信息。

Linux 内核用户和管理员指南中有一个预分配(保留)设备号列表:Linux allocated devices (4.x+ version)。 (相同的列表也出现在 Linux 内核源代码的“Documentation/admin-guide/devices.txt”中。)该列表显示了如何为每个预分配字符和块主设备号解释次设备号。

一些主要的设备号被保留用于本地或实验使用,或用于动态分配:

  60-63 char    LOCAL/EXPERIMENTAL USE

  60-63 block   LOCAL/EXPERIMENTAL USE
        Allocated for local/experimental use.  For devices not
        assigned official numbers, these ranges should be
        used in order to avoid conflicting with future assignments.
 120-127 char   LOCAL/EXPERIMENTAL USE

 120-127 block  LOCAL/EXPERIMENTAL USE
        Allocated for local/experimental use.  For devices not
        assigned official numbers, these ranges should be
        used in order to avoid conflicting with future assignments.
 234-254    char    RESERVED FOR DYNAMIC ASSIGNMENT
        Character devices that request a dynamic allocation of major number will
        take numbers starting from 254 and downward.

 240-254 block  LOCAL/EXPERIMENTAL USE
        Allocated for local/experimental use.  For devices not
        assigned official numbers, these ranges should be
        used in order to avoid conflicting with future assignments.
 384-511 char   RESERVED FOR DYNAMIC ASSIGNMENT
        Character devices that request a dynamic allocation of major
        number will take numbers starting from 511 and downward,
        once the 234-254 range is full.

调用 alloc_chrdev_region() 注册字符设备号范围的字符设备驱动程序将从动态范围中分配一个未使用的主设备号。对于调用 __register_chrdev() 且第一个参数 (major) 设置为 0 的字符设备驱动程序也是如此。

一些外部(“树外”)Linux 内核模块有一个模块参数,允许在模块加载时指定它们的默认主设备号。这对于不动态创建其“/dev”条目的驱动程序很有用,但希望系统管理员在使用 mknod.

手动创建设备文件时可以灵活地选择主设备号。