
この/proc/devices
ファイルには、キーリビジョン番号と名前でデバイスが一覧表示されます。私のシステムでは(部分的に)次のように表示されます。
Block devices:
259 blkext
7 loop
8 sd
9 md
11 sr
65 sd
66 sd
67 sd
68 sd
69 sd
70 sd
71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd
253 device-mapper
254 mdp
この「sd」デバイスは何ですか?最初のバージョン(バージョン番号8)はありますが、/dev/sda
残りは存在しません/dev
。これらのメジャーバージョン番号を持つデバイスはありません。
私するデバイスのリストを見る:
crw-rw---- 1 root tty 7, 128 Jul 29 14:15 vcsa
crw-rw---- 1 root tty 7, 129 Jul 29 14:15 vcsa1
crw-rw---- 1 root tty 7, 130 Jul 29 14:15 vcsa2
crw-rw---- 1 root tty 7, 131 Jul 29 14:15 vcsa3
crw-rw---- 1 root tty 7, 132 Jul 29 14:15 vcsa4
crw-rw---- 1 root tty 7, 133 Jul 29 14:15 vcsa5
crw-rw---- 1 root tty 7, 134 Jul 29 14:15 vcsa6
どこ未成年者数字が一致する可能性があります。 - / procが表示されます。未成年者改訂番号とその名前がついた理由はsd
とにかく、それがないデバイスは見えません。135
。
誰かが私にこれを説明できますか?
答え1
最初のディスク/dev/sda
は8:0
(major:minor)ですが、メジャー番号8には次の15個のディスクも含まれます(Documentation/devices.txt
カーネルソースコードから):
8 block SCSI disk devices (0-15)
0 = /dev/sda First SCSI disk whole disk
16 = /dev/sdb Second SCSI disk whole disk
32 = /dev/sdc Third SCSI disk whole disk
...
240 = /dev/sdp Sixteenth SCSI disk whole disk
Partitions are handled in the same way as for IDE
disks (see major number 3) except that the limit on
partitions is 15.
残りはドライブの残りの部分のためのものです(メイン番号66-71と128-134は同様であり、すべてのパーティションスキームは同じです)。
65 block SCSI disk devices (16-31)
0 = /dev/sdq 17th SCSI disk whole disk
16 = /dev/sdr 18th SCSI disk whole disk
...
135 block SCSI disk devices (240-255)
0 = /dev/sdig 241st SCSI disk whole disk
...
240 = /dev/sdiv 256th SCSI disk whole disk
まあ、おそらくそれほど多くのディスクがなく、システムは実際に持っているデバイスに必要なノードだけを作成するので、sda
.txtとそのパーティション以外には何も表示されません/dev
。
友達の場合、vcsa
Virtual Consoleに関連するタスクは次のとおりです。
7 char Virtual console capture devices
0 = /dev/vcs Current vc text contents
1 = /dev/vcs1 tty1 text contents
...
128 = /dev/vcsa Current vc text/attribute contents
129 = /dev/vcsa1 tty1 text/attribute contents
...
また、これは/dev/vcs*
ブロックデバイスではなく文字デバイスであることに注意してください。出力の最初の文字は、ls
その文字が何であるかを示します。
答え2
ブロックsd
デバイスのみが最大16 * 1048576を持つことができます(dev_tが16ビットの場合は16 * 256ブロックデバイスのみがあります)。
コードは次のとおりです
for (i = 0; i < SD_MAJORS; i++) {
if (register_blkdev(sd_major(i), "sd") != 0)
continue;
majors++;
blk_register_region(sd_major(i), SD_MINORS, NULL,
sd_default_probe, NULL, NULL);
}
この16個の基本番号を登録してください。
そして:
/*
* More than enough for everybody ;) The huge number of majors
* is a leftover from 16bit dev_t days, we don't really need that
* much numberspace.
*/
#define SD_MAJORS 16
どこ:
/*
* Device no to disk mapping:
*
* major disc2 disc p1
* |............|.............|....|....| <- dev_t
* 31 20 19 8 7 4 3 0
*
* Inside a major, we have 16k disks, however mapped non-
* contiguously. The first 16 disks are for major0, the next
* ones with major1, ... Disk 256 is for major0 again, disk 272
* for major1, ...
* As we stay compatible with our numbering scheme, we can reuse
* the well-know SCSI majors 8, 65--71, 136--143.
*/
static int sd_major(int major_idx)
{
switch (major_idx) {
case 0:
return SCSI_DISK0_MAJOR;
case 1 ... 7:
return SCSI_DISK1_MAJOR + major_idx - 1;
case 8 ... 15:
return SCSI_DISK8_MAJOR + major_idx - 8;
default:
BUG();
return 0; /* shut up gcc */
}
}
専攻と不専攻がどのように割り当てられるかを示します。