linux scsi sd设备文件名的生成

scsi sd设备的设备文件名,如sda等,是在sd驱动加载时自动生成的。他在生成设备文件时,有一套文件名的生成规则。具体生成算法总的来说就是首先向系统申请一个ida,也就是唯一id。然后把id映射成设备文件名sdxxx。在设备释放时,该ida会被释放,以便以后使用。由于ida是由系统维护的全局量,所以可以保证生成的设备名的唯一性。
具体生成是在scsi sd设备被探测到后,调用sd_probe函数时进行的。首先获得一个可用的ida(sd驱动维护一个自己全局ida:static DEFINE_IDA(sd_index_ida)):
error = ida_get_new(&sd_index_ida, &index);
scsi sd设备的名称格式规定为sdxxx,sd后面的3个xxx表示26个小写字母的排列组合。也就是设备文件名最多只能有26+26*26+26*26*26种。因此如果获得的ida大于这个数字,就无法为设备生成设备文件名。
有了ida后,就可以根据ida来生成具体的设备文件名:
if (index < 26) {
  sprintf(gd->disk_name, "sd%c", 'a' + index % 26);
 } else if (index < (26 + 1) * 26) {
  sprintf(gd->disk_name, "sd%c%c",
   'a' + index / 26 - 1,'a' + index % 26);
 } else {
  const unsigned int m1 = (index / 26 - 1) / 26 - 1;
  const unsigned int m2 = (index / 26 - 1) % 26;
  const unsigned int m3 =  index % 26;
  sprintf(gd->disk_name, "sd%c%c%c",
   'a' + m1, 'a' + m2, 'a' + m3);
 }


同时,该ida会被存放在代表该sd块设备的scsi_disk结构的index字段中,以便以后使用。
当一个sd设备被释放后,会释放设备的ida,以便sd驱动能重复使用这些ida和设备文件名。ida的释放具体是在scsi_disk_release中调用的。当一个设备被释放时,会调用该函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值