linux中的设备名称和设备号

看赵炯博士的《linux 0.11 源代码注释》已经两三周了,从今天起开始将一些个人总结和感悟分小标题写出来,聊作记忆以供后来查看。
在linux0.11源码的 /linux/boot/bootsect.s中,有一个标号定义ROOT_DEV

! ROOT_DEV: 0x000 - same type of floppy as boot.
! 0x301 - first partition on first drive etc
ROOT_DEV = 0x306

这里,ROOT_DEV是系统指定的根文件系统的设备号。大家都知道linux系统中“一切都是文件”,所以设备也是文件,这里的0x306就是根文件系统所在的设备对应的设备号。
这里要注意:Linux0.11中使用的设备号命名方式是老式命名规则,和今天的Linux系统设备号命名规则不同。下面分别进行说明。

1、老式Linux设备号命名规则:
设备号 = 主设备号 * 256 + 次设备号   (dev_no = (major << 8) + minor)。这里的主设备号是事先定义好的(1-内存,2-磁盘,3-硬盘,4-ttyx,5-tty,6-并行口,7-非命名管道),譬如对于硬盘,主设备号为3,因此3*256+0=0x300即为系统中第一个硬盘的设备号,依次有以下命名:
设备号 设备文件
对应的设备
0x300 /dev/hd0
系统中第一个硬盘
0x301 /dev/hd1
系统中第一个硬盘的第一分区
0x302 /dev/hd2
系统中第一个硬盘的第二分区
0x303 /dev/hd3
系统中第一个硬盘的第三分区
0x304 /dev/hd4
系统中第一个硬盘的第四分区

0x305 /dev/hd5
系统中第二个硬盘
0x306 /dev/hd6
系统中第二个硬盘的第一分区
······

2、现代Linux设备号命名规则:
现代Linux要管理的设备种类非常丰富,包括硬盘、U盘、打印机等各种设备。我们仍以硬盘为目标来说明设备命名规则。linux将硬盘分为两类:第一类是传统的IDE硬盘,使用hd标示;第二种是SATA、SCSI、USB硬盘、U盘(严格的说U盘不算硬盘)等,均用sd标示;(hd和sd即这两种硬盘的主设备名)。
因此,对于系统中的IDE硬盘,分别用hda,hdb,hdc,hdd来标示1号~4号硬盘(一般主要最多支持4个硬盘。而我们平时使用1块硬盘时,常将其装在主IDE上的主接口上因此单硬盘时硬盘设备名一般是hda)。hda后面的数字用来标示这块硬盘的各个分区,如下:

设备文件 对应的设备
/dev/hda  主IDE的主接口上的硬盘,即系统第一个硬盘
/dev/hda1  第一个硬盘的第一个主分区
/dev/hda2  第一个硬盘的第二个主分区
/dev/hda3  第一个硬盘的第三个主分区
/dev/hda4  第一个硬盘的第四个分区,即扩展分区
/dev/hda5  第一个硬盘的第一个逻辑分区
/dev/hda6  第一个硬盘的第二个逻辑分区
······
/dev/hdb  主IDE的从接口上的硬件,即系统第二个硬盘
/dev/hdb1  第二个硬盘的第一个主分区
······
对于SATA,SCSI,USB硬盘,U盘等,只要把hd改成sd就可以了。命名规则是相同的。

对比与总结:
1、老式命名方法中只有hd,估计是当时只有IDE硬盘的缘故吧。实际上现在IDE硬盘已经很少用了,查了下我的机子就是SATA硬盘的,用sd。
2、老式命名中没有考虑逻辑分区,所以每个硬盘需要占用5个数字标示(譬如第一个硬盘末尾从0~4)。而现代命名中硬盘代号改为abcd,后面的分区才用数字标示。并且有一个细节就是分区号是从1开始的,不是0(我猜这样设计是为了和之前老式命名兼容。因为老式命名中数字0代表整个硬盘,分区号也是从1开始的。因此即使现代命名硬盘名直接hda也没有hda0,然后第一个分区还是hda1)。
3、每个硬盘只能有四个主分区和扩展分区(三个主分区+一个扩展分区,或者四个主分区),这个是由硬盘本身决定的,跟操作系统没关系。
     每个硬盘最多只能有一个扩展分区,这个是由操作系统限制的。我的理解,扩展分区只是标志该分区处被再次分成多个逻辑分区了,因此扩展分区相当于逻辑分区的容器而已,没有必要多个,因此OS限制了扩展分区最多只能有一个。

时间: 2024-08-26 02:18:59

linux中的设备名称和设备号的相关文章

linux 中am3359芯片作为从设备接收

问题描述 linux 中am3359芯片作为从设备接收 急等:请问有做过AM3359芯片中linux系统spi作为从设备的朋友吗?现在遇到了一些问题,从设备一直接收不到主设备发来的数据.谢谢! 解决方案 linux课上作业-who am i改编版<who am i>-linux命令五分钟系列之十六

c# 根据设备名称获取设备管理器中指定设备的设备描述问题.请教各位~谢啦~

问题描述 设备管理器中某一设备名称和设备描述不一样,怎么通过设备名称获取到设备描述?试过用setupAPI,要么获取到全部设备的设备描述,好像不能通过设备名称来获取设备描述图中就是设备名称和设备属性里面的设备描述...图中就是一个网卡设备的名称和这个设备-属性-详细信息中的设备描述,就是想根据这个设备名称之类的获得指定设备描述..

Linux中的设备文件与设备号

设备文件与设备号   在Linux下,一切皆文件,设备也不例外,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号.主设备号用来区分不同类型的设备,而次设备号用来区分同一类型内的多个设备(及其设备分区).一个Linux系统,当前所有注册设备的主设备号可以通过/proc接口查看: [root@localhost lenky]# cat /proc/devices Character devices: 1 mem 4 /dev/vc/0 4 tty 4 ttyS 5 /d

浅谈Linux 中字符设备的注册

Linux中字符设备的注册过程是比较简单的.我们通常可以调用misc_register()函数来注册一个字符设备.Misc设备是一种字符设备,通过该设备可以将fops请求转发给注册的misc设备,从而实现字符设备的功能.用户调用该接口注册Misc字符设备时,可以动态分配设备Minor号,当获取Minor号之后调用class_simple_device_add()或者device_create()函数完成字符设备的创建.Misc字符设备注册函数如下所示: int misc_register(str

linux驱动开发--字符设备:动态分配设备号

设备号的动态分配 int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name);dev:保存分配到的设备号baseminor:希望分配的起始次设备号count:需要分配的设备号数目name:设备名称(出现在/proc/devices)         返回:成功返回0, 失败返回负值 请求内核动态分配count个设备号,且次设备号从baseminor开始 /** *Copyrig

在 Linux 中管理设备

探索 /dev 目录可以让您知道如何直接访问到 Linux 中的设备. Linux 目录结构中有很多有趣的功能,这次我会讲到 /dev 目录一些迷人之处.在继续阅读这篇文章之前,建议你看看我前面的文章.Linux 文件系统,一切皆为文件,这两篇文章介绍了一些有趣的 Linux 文件系统概念.请先看看 - 我会等你看完再回来. -- 太好了 !欢迎回来.现在我们可以继续更详尽地探讨 /dev 目录. 设备文件 设备文件也称为设备特定文件.设备文件用来为操作系统和用户提供它们代表的设备接口.所有的 

内核-linux下一类字符设备使用同一个主设备号进行注册的一点疑惑?

问题描述 linux下一类字符设备使用同一个主设备号进行注册的一点疑惑? 最近在看framebuffer的内核源码: 在fbmem.c中有 register_chrdev(FB_MAJOR,"fb",&fb_fops) 这里的fb_fops应该就是上层访问的接口(write.read.mmap等操作). 在注册一个frambuffer设备的时候,会使用register_framebuffer,追踪可以看到 fb_info->dev = device_create(fb_c

如何在Linux中永久修改USB设备权限

提问:当我尝试在 Linux 中运行 USB GPS 接收器时我遇到了下面来自 gpsd 的错误. gpsd[377]: gpsd:ERROR: read-only device open failed: Permission denied  gpsd[377]: gpsd:ERROR: /dev/ttyUSB0: device activation failed.  gpsd[377]: gpsd:ERROR: device open failed: Permission denied - r

Linux 有问必答:如何在 Linux 中永久修改 USB 设备权限

提问:当我尝试在 Linux 中运行 USB GPS 接收器时我遇到了下面来自 gpsd 的错误. gpsd[377]: gpsd:ERROR: read-only device open failed: Permission denied gpsd[377]: gpsd:ERROR: /dev/ttyUSB0: device activation failed. gpsd[377]: gpsd:ERROR: device open failed: Permission denied - ret