Linux major minor devices

knowing a device special file major and minor numbers in linux

All files in /dev are special files. they represent devices of the computer. They were created with the mknod syscall. My question is: How can I know the minor and major numbers that were used to create this special file?

5 Answers 5

The list is called the LANANA Linux Device List, and it is administered by Alan Cox.

You can find the latest copy online (direct link), or in the Linux source. Its filename in the kernel tree is Documentation/devices.txt .

To see the major and minor numbers that created a node in /dev (or any device node for that matter), simply use ls with the -l option:

22:26 jsmith@undertow% ls -l /dev/xvd? brw-rw---- 1 root disk 202, 0 Nov 1 20:31 /dev/xvda brw-rw---- 1 root disk 202, 16 Nov 1 20:31 /dev/xvdb brw-rw---- 1 root disk 202, 32 Nov 1 20:31 /dev/xvdc 

In this example, 202 is the three devices’ major number, and 0 , 16 , and 32 are minors. The b at left indicates that the node is a block device. The alternative is c , a character device:

crw-rw-rw- 1 root tty 5, 0 Nov 22 00:29 /dev/tty 

Looks like the lanana.org domain has expired («lanana.org expired on 04/10/2012 and is pending renewal or deletion»). I hope that gets fixed — looks like it might be a bit of a recurring problem: wiki.linuxfoundation.org/en/Minutes_Apr_27_2011

$ ls -l /dev/fd0 /dev/null brw-rw---- 1 root floppy 2, 0 Nov 22 19:48 /dev/fd0 crw-rw-rw- 1 root root 1, 3 Nov 22 19:48 /dev/null $ stat -c '%n: %F, major %t minor %T' /dev/fd0 /dev/null /dev/fd0: block special file, major 2 minor 0 /dev/null: character special file, major 1 minor 3

Most device numbers are fixed (i.e. /dev/null will always be character device 1:3 ) but on Linux, some are dynamically allocated.

$ cat /proc/devices Character devices: . 10 misc . Block devices: . 253 mdp 254 device-mapper $ cat /proc/misc . 57 device-mapper .

For example, on this system, it just so happens that /dev/mapper/control will be c:10:57 while the rest of /dev/mapper/* will be b:254:* , and this could differ from one boot cycle to another — or even as modules are loaded/unloaded and devices are added/removed.

Читайте также:  System halted linux mint

You can explore these device registrations further in /sys .

$ readlink /sys/dev/block/2:0 ../../devices/platform/floppy.0/block/fd0 $ cat /sys/devices/platform/floppy.0/block/fd0/dev 2:0 $ readlink /sys/dev/char/1:3 ../../devices/virtual/mem/null $ cat /sys/devices/virtual/mem/null/dev 1:3

Источник

Linux major minor devices

Библиотека сайта rus-linux.net

Ранее (вплоть до ядра 2.4) каждый старший номер использовался в качестве указания на отдельный драйвер, а младший номер использовался для указания на конкретное подмножество функциональных возможностей драйвера. В ядре 2.6 такое использование номеров не является обязательным; с одним и тем же старшим номером может быть несколько драйверов, но, очевидно, с различными диапазонами младших номеров.

Однако, такое использование больше характерно для незарезервированных старших номеров, а стандартные старшие номера обычно резервируются для вполне определенных конкретных драйверов. Например, 4 — для последовательных интерфейсов, 13 — для мышей, 14 — для аудио-устройств и так далее. С помощью следующей команды можно будет выдать список файлов различных символьных устройств, имеющихся в вашей системе:

Использование чисел в ядре 2.6

Тип (определен в заголовке ядра linux/types.h ):

Макрос (определен в заголовке ядра linux/kdev_t.h ):

  • MAJOR(dev_t dev) — из dev извлекается старший номер
  • MINOR(dev_t dev ) — из dev извлекается младший номер
  • MKDEV(int major, int minor) — из старшего и младшего номеров создается dev

Подключение файла устройства к драйверу устройства осуществляется за два шага:

  1. Выполняется регистрация файлов устройств для диапазона
  2. Подключение операций, выполняемых над файлом устройства, к функциям драйвера устройства.

Первый шаг выполняется с помощью одного из следующих двух API, определенных в заголовке ядра linux/fs.h :

+ int register_chrdev_region(dev_t first, unsigned int cnt, char *name); + int alloc_chrdev_region(dev_t *first, unsigned int firstminor, unsigned int cnt, char *name);

С помощью первого API число cnt регистрируется как среди номеров файлов устройств, которые начинаются с first и именем файла name . С помощью второго API динамически определяется свободный старший номер и регистрируется число cnt среди номеров файлов устройств, начинающиеся с , с заданным именем файла name. В любом случае в директории /proc/devices указывается список имен с зарегистрированным старшим номером. Имея эту информацию, Светлана добавила в код первого драйвера следующее:

#include #include #include static dev_t first; // Global variable for the first device number

В конструктор она добавила:

В деструктор она добавила:

unregister_chrdev_region(first, 3);

И собрала все это вместе следующим образом:

#include #include #include #include #include #include static dev_t first; // Global variable for the first device number static int __init ofcd_init(void) /* Constructor */ < printk(KERN_INFO "Namaskar: ofcd registered"); if (alloc_chrdev_region(&first, 0, 3, "Shweta") < 0) < return -1; >printk(KERN_INFO ": \n", MAJOR(first), MINOR(first)); return 0; > static void __exit ofcd_exit(void) /* Destructor */ < unregister_chrdev_region(first, 3); printk(KERN_INFO "Alvida: ofcd unregistered"); >module_init(ofcd_init); module_exit(ofcd_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Anil Kumar Pugalia "); MODULE_DESCRIPTION("Our First Character Driver");

Затем Светлана повторила обычные шаги, которые она узнала при изучении первого драйвера:

  • Собрала драйвер (файл .ko ), выполнив команду make .
  • Загрузила драйвер с помощью команды insmod .
  • Выдала список загруженных модулей с помощью команды lsmod .
  • Выгрузила драйвер с помощью команды rmmod .
Читайте также:  Посмотреть название системы linux

Подведем итог

Кроме того, перед выгрузкой драйвера она заглянула в директорий /proc/devices для того, чтобы с помощью команды cat /proc/devices найти зарегистрированный старший номер с именем «Shweta». Он там был. Тем не менее, она не смогла в директории /dev найти ни одного файла устройств с таким же старшим номером, т.к. она создала этот номер вручную с помощью команды mknod , а затем пыталась выполнить операции чтения и записи. Все эти действия показаны на рис.2.

Рис.2: Эксперименты с файлом символьного устройства

Обратите внимание, что в зависимости от номеров, уже используемых в системе, старший номер 250 может варьироваться от системы к системе. На рис.2 также показаны результаты, которые получила Светлана при чтении и записи одного из файлов устройств. Это напомнило ей, что все еще не сделан второй шаг подключения файла устройства к драйверу устройства, при котором операции над файлом устройства связываются с функциями драйвера устройства. Она поняла, что ей для того, чтобы завершить этот шаг, нужно поискать дополнительную информацию, а также выяснить причины отсутствия файлов устройств в директории /dev .

Источник

Linux : Major and Minor device numbers

What types of devices fall under the major device number category and what types of devices fall under the minor device number category. What is the real difference between the two categories?

3 Answers 3

All devices have a major, minor number pair. The major number is a larger, more generic category (e.g. hard disks, input/output devices etc. ) while the minor number is more specific (i.e. tells what bus the device is connected to).

The list of device numbers is no longer at that location in the Linux kernel source tree. Do you know where it moved to?

Читайте также:  Lib linux user so

A common major device number is 7 (near «Loopback devices»), e.g. /dev/loop0 , /dev/loop1 , . /dev/loop34 (e.g., as used in lsblk -e7 to reduce the output).

The major device number identifies the driver (e.g. IDE disk drive, floppy disk, parallel port, serial port, . ) or sometimes a peripheral card (first IDE card, second IDE card of the PC) and the minor number identifies the specific device (i.e., the first floppy would have minor 0, the second would be 1, . ).

If we had a hard disk, floppy disk, and a parallel port, would the hard disk be minor 0, floppy disk minor 1, and parallel port minor 2?

No. Major numbers are fixed. E.g. SCSI drives at major 8. The first SCSI drive is (8,0), the second drive (8,1), the third (8,2) etc etc. Even if you have no other major devices that will still stay fixed at 8. Same with every other device. The M coded into the drivers and will always be the same.

@Referential, no. The first IDE controller has major number 3, on it the master is block minor 0 and the slave 1; floppy major is block 2, parallel port is char 6, minor identifies the port. The number belongs to the driver, independent of a device being present (or even if the driver is compiled into the kernel at all). LANANA (Linux Assigned Names And Numbers Authority) is in charge of allocating them.

Which types of devices would specifically fall under the minor device number category? I thought that the minor device number category mirrors the major device number (eg: hard disk 1 has a major device number and the minor number identifies it as a hard drive). If someone can please give me a few more examples. Thanks

@Referential There are a few devices that can only exist in one copy, they don’t have minor device numbers. Each time a device can be present seveal times, they are numbered by a minor number. Major is device type (driver), minor is device number (instance).

Источник

Оцените статью
Adblock
detector