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
.
手动创建设备文件时可以灵活地选择主设备号。
在 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
.