Today, when I visit tldr issue and I saw a talk about the command
lsblk, although I used a lot before, I really don’t understand the
MAJ:MIN in the result. Most time, I use it to check the harddrive disk and partitions.
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 260.7M 1 loop /snap/kde-frameworks-5-core18/32 loop1 7:1 0 253.5M 1 loop /snap/electronic-wechat/7 loop2 7:2 0 69M 1 loop /snap/telegram-desktop/1634 loop3 7:3 0 21.3M 1 loop /snap/communitheme/1987 loop4 7:4 0 55M 1 loop /snap/core18/1754 loop5 7:5 0 93.9M 1 loop /snap/core/9066 loop6 7:6 0 54.8M 1 loop /snap/gtk-common-themes/1502 loop7 7:7 0 93.8M 1 loop /snap/core/8935 loop8 7:8 0 373.5M 1 loop /snap/anbox/158 loop10 7:10 0 397.1M 1 loop /snap/redis-desktop-manager/335 loop11 7:11 0 160.2M 1 loop /snap/gnome-3-28-1804/116 loop12 7:12 0 32M 1 loop /snap/git-fame/15 loop13 7:13 0 149.2M 1 loop /snap/postman/109 loop14 7:14 0 16M 1 loop /snap/communitheme/1768 loop15 7:15 0 55M 1 loop /snap/core18/1705 loop16 7:16 0 374.9M 1 loop /snap/redis-desktop-manager/400 loop17 7:17 0 69M 1 loop /snap/telegram-desktop/1627 loop18 7:18 0 62.1M 1 loop /snap/gtk-common-themes/1506 loop19 7:19 0 32.1M 1 loop /snap/git-fame/23 loop20 7:20 0 310.8M 1 loop loop21 7:21 0 163.6M 1 loop /snap/postman/110 sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 214.9G 0 part ├─sda2 8:2 0 16.3G 0 part [SWAP] └─sda3 8:3 0 700.4G 0 part /media/Backup sdb 8:16 0 232.9G 0 disk ├─sdb1 8:17 0 232.9G 0 part / └─sdb2 8:18 0 2M 0 part
However, when I take a close look at the output, I can see only the disk device output, but also see the
snap package output. So I started to search informations about the
Major and minor device number
We all know that under linux, all devices are managed under
/dev folder. So lets check the special device first:
ls -al /dev/zero crw-rw-rw- 1 root root 1, 5 May 29 19:40 /dev/zero
We can see that,
ls output is a little bit different from normal output,
/dev/zero device’s major number is
1 and minor is
Then let’s check
This file contains the list of device drivers configured into the current running kernal(block and character).1
We can see that under
/proc/devices file, there are a list of number and strings. For example:
Character devices: 1 mem 5 /dev/tty 5 /dev/console 7 vcs Block devices: 8 sd
Each device node’s type (block or character) and numbers serve as identifiers for the kernel.
On Linux, the canonical list of devices, with a brief explanation of their function, is maintained in the kernel.
- major number: identify the driver associated with the device. For example
/dev/zeroare both managerd by driver 1, whereas virtual consoles and serial terminals are managed by driver 4. Kernal uses the major number at open time to dispatch execution to the appropriate driver.
- minor number: refers to an instance, which is used by the driver itself, specified by the major number. Minor number is used for driver to identify the difference between devices.
After version 2.4, the kernel introduced a new feature, the device file system or
devfs. But for now most distributions do not add these feature. Read more from here.
devfs is not being used, adding a new driver to the system means assigning a major number to it. The assignment should be made at driver (module) initialization by calling the following function, defined in
int register_chrdev(unsigned int major, const char* name, struct file_operations* fops);
Once the driver has been registered in the kernel table, its operations are associated with the given major number.
And a name must be inserted into the
/dev directory and associated with your driver’s major and minor numbers.
The command to create a device node on the filesystem is called
mknod /dev/scull0 c 254 0
cmeans: create a char device
- with major nubmer 254
- and minor number 0, minor number should be in the range 0 to 255
- 《Linux Device Drivers, Second Edition by Jonathan Corbet, Alessandro Rubini》