【发布时间】:2011-03-10 09:00:55
【问题描述】:
如何将驱动器号分配给 USB/HDD 驱动器?我的意思是在代码级别。我查看了代码并注意到gendisk struct 具有disk_name。这给了sda/sdb/sdc....etc。但是如果磁盘被检测为sda1, sdc1...那么这些名称可以从结构/代码中获得吗?
【问题讨论】:
标签: linux-kernel usb kernel
如何将驱动器号分配给 USB/HDD 驱动器?我的意思是在代码级别。我查看了代码并注意到gendisk struct 具有disk_name。这给了sda/sdb/sdc....etc。但是如果磁盘被检测为sda1, sdc1...那么这些名称可以从结构/代码中获得吗?
【问题讨论】:
标签: linux-kernel usb kernel
sda/sdb 等是代表整个驱动器的块设备。当驱动器被分区时,您将看到 sda1、sdc1 等。这些块设备仅用于访问该分区。
我对代码并不特别熟悉,但希望这能帮助您指明正确的方向。
【讨论】:
一个有用的代码方面的调查起点是函数disk_name(),在block/partition-generic.c中定义:
/*
* disk_name() is used by partition check code and the genhd driver.
* It formats the devicename of the indicated disk into
* the supplied buffer (of size at least 32), and returns
* a pointer to that same buffer (for convenience).
*/
char *disk_name(struct gendisk *hd, int partno, char *buf)
{
if (!partno)
snprintf(buf, BDEVNAME_SIZE, "%s", hd->disk_name);
else if (isdigit(hd->disk_name[strlen(hd->disk_name)-1]))
snprintf(buf, BDEVNAME_SIZE, "%sp%d", hd->disk_name, partno);
else
snprintf(buf, BDEVNAME_SIZE, "%s%d", hd->disk_name, partno);
return buf;
}
【讨论】: