[gala@Arch ~]$ Sudo !!
Sudo hdparm -i /dev/sda
/dev/sda:
Model=Kingston SHFS37A120G, FwRev=603ABBF0, SerialNo=50026B725B0A1515
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=unknown, MaxMultSect=1, MultSect=1
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234441648
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6
AdvancedPM=yes: unknown setting WriteCache=enabled
Drive conforms to: unknown: ATA/ATAPI-2,3,4,5,6,7
* signifies the current active mode
HdparmはどこからModel
フィールドを読み取りますか? sysfs
のどこか?どこから?
_# strace hdparm -i /dev/sda
…
ioctl(3, HDIO_GET_IDENTITY, 0x7fffa930c320) = 0
brk(0) = 0x1c42000
brk(0x1c63000) = 0x1c63000
write(1, "\n", 1
) = 1
write(1, " Model=…
_
したがって、hdparm
は、sysfsからではなく、_HDIO_GET_IDENTITY
_ ioctl から情報を取得します。もちろん、sysfsから情報にアクセスできないという意味ではありません。
次に、カーネルソースで_HDIO_GET_IDENTITY
_を検索できます。 [〜#〜] lxr [〜#〜] そのために便利です。関連するヒットは _ata_get_identity
_ への呼び出しを示しています。この関数 モデルを検索します デバイスの説明のオフセット_ATA_ID_PROD
_にあるデバイスの説明。
他に_ATA_ID_PROD
_が使用されている場所を見ると、sysfsを念頭に置いて、_ide-sysfs.c
_という関数で _model_show
_ にヒットが見つかります。この関数は、すぐ下のマクロ呼び出しによって参照されます DEVICE_ATTR_RO(model)
したがって、ataドライバーがIDEインターフェイスを公開している場合、model
というファイルがあります。この情報を含むデバイスのsysfsディレクトリにあります。
AtaドライバーがSCSIインターフェイスを公開している場合、コードはハードウェアから情報を抽出するさまざまな方法を使用するため、カーネルソースのトレースははるかに複雑になります。しかし、結局のところ、デバイスのsysfsディレクトリには model
フィールド もあります。
デバイスのsysfsディレクトリがどこにあるかについては、それにアクセスするいくつかの方法があります。 カーネルドキュメントの_sysfs.txt
_ファイル これを文書化していますが、あまりよくありません。アクセスする最も簡単な方法は、各ブロックデバイスのエントリを含む_/sys/block
_を使用することです。
_$ cat /sys/block/sda/device/model
_
_/sys
_には多くのシンボリックリンクがあります。そのディレクトリの「物理的な」場所は、ディスクがシステムに接続されている方法によって異なります。たとえば、PCIバスに接続されたSCSIインターフェイスを備えたATAデバイスの場合は_/sys/devices/pci…/…/ata…/Host…/target…/…
_の形式になります。
1時間掘った後にそれを見つけました:
gala@Arch /sys/bus/scsi/devices/2:0:0:0 % pwd
/sys/bus/scsi/devices/2:0:0:0
gala@Arch /sys/bus/scsi/devices/2:0:0:0 % cat model
Kingston SHFS37A
したがって、モデルの場合:
/sys/bus/scsi/devices/<device>/model
そしてベンダー:
/sys/bus/scsi/devices/<device>/vendor