Home > Back-end >  device driver documentation for linux
device driver documentation for linux

Time:10-01

in the book 2017 " UNIX and Linux System Administration " i've read the article below :

Modern systems manage their device files automatically. However, a few rare corner cases may still require you to create devices manually with the mknod command. So here’s how to do it:

mknod filename type major minor

Here, filename is the device file to be created, type is c for a character device or b for a block device, and major and minor are the major and minor device numbers. If you are creating a device file that refers to a driver that’s already present in your kernel, check the documentation for the driver to find the appropriate major and minor device numbers.

where can i find this doc and how to find Major & Minor for a device driver ???

CodePudding user response:

docs: 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

CodePudding user response:

The command cat /proc/devices shows the character and block major device numbers in use by drivers in the currently running Linux kernel, but provides no information about minor device numbers.

There is a list of pre-assigned (reserved) device numbers in the Linux kernel user's and administrator's guide: Linux allocated devices (4.x version). (The same list also appears in "Documentation/admin-guide/devices.txt" in the Linux kernel sources.) The list shows how minor device numbers are interpreted for each pre-assigned character and block major device number.

Some major device numbers are reserved for local or experimental use, or for dynamic assignment:

  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.

Character device drivers that call alloc_chrdev_region() to register a range of character device numbers will be assigned an unused major device number from the dynamic range. The same is true for character device drivers that call __register_chrdev() with the first argument (major) set to 0.

Some external ("out-of-tree") Linux kernel modules have a module parameter to allow their default major device number to be specified at module load time. That is useful for drivers that do not create their "/dev" entries dynamically, but want some flexibility for the system administrator to choose a major device number when creating device files manually with mknod.

  • Related