网站大量收购独家精品文档,联系QQ:2885784924

Linux盘符绑定实现原理.PDF

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux盘符绑定实现原理

Linux盘符绑定实现原理 正一 2016.7.25 目 录  Linux盘符的分配  Linux内核IDR机制  Linux盘符绑定 Linux盘符的分配 sd_probe ()函数 系统中有新的SCSI磁盘(包括USB硬盘)插入,就会调用sd_probe ()函数。 哪里决定盘符? 01438: spin_lock(sd_index_lock ); 01439: error = idr_get_new(sd_index_idr, NULL, index); 01440: spin_unlock(sd_index_lock ); 01441: index的值决定了盘符。 若index=0 ,则分配给此块SCSI硬盘的盘符为sda ; 若index=1 ,则分配给此块SCSI硬盘的盘符为sdb ; …… 若index=25 ,则分配给此块SCSI硬盘的盘符为sdz ; Linux盘符的分配 01408: static int sd_probe(struct device *dev) 01409: { ... ... 01435: if (! idr_pre_get(sd_index_idr, GFP_KERNEL)) 01436: goto ↓out_put; 01437: 01438: spin_lock(sd_index_lock ); 01439: error = idr_get_new(sd_index_idr, NULL, index); 01440: spin_unlock(sd_index_lock ); 01441: 01442: if (index = SD_MAX_DISKS) 01443: error = - EBUSY; 01444: if (error) 01445: goto ↓out_put; ... ... 01465: if (index 26) { 01466: sprintf(gd- disk_name, sd%c, a + index % 26); 01467: } else if (index (26 + 1) * 26) { 01468: sprintf(gd- disk_name, sd%c%c, 01469: ‘a + index / 26 - 1,a + index % 26); 01470: } else { 01471: const unsigned int m1 = (index / 26 - 1) / 26 - 1; 01472: const unsigned int m2 = (index / 26 - 1) % 26; 01473: const unsigned int m3 = index % 26; 01474: sprintf(gd- disk_name, sd%c%c%c, 01475: a + m1, a + m2, a + m3); 01476: } ... ... 01506: } ? end sd_probe ? Linux盘符的分配 index值的由来 01435: if (! idr_pre_get(sd_index_idr, GFP_KERNEL)) 01436: goto ↓out_put; 01437: 01438: spin_lock(sd_i

文档评论(0)

l215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档