hdparm -i
0neg
0neg w poczta.gazeta.pl
Nie, 5 Maj 2002, 23:14:02 CEST
Michal Kochanowicz wrote:
> On Sun, May 05, 2002 at 10:18:44PM +0200, 0neg wrote:
>
>>Sprawdziłem w kodzie. ata_minor_str to 32 zdefiniowane na sztywno
>>stringi. Więc id->minor_rev_num może mieć wartości od 0 do 31.
>
> Też właśnie na to patrzę:
> if ((id->minor_rev_num) || (id->major_rev_num)) {
> printf("\n Drive Supports : ");
> printf("%s", ata_minor_str[id->minor_rev_num]);
> for (i=0; i<=15; i++) {
> if (id->major_rev_num & (1<<i))
> printf("%s", ata_major_str[i]);
> }
> }
> Dla mnie to jest wyjątkowo posrane.
Nieco. id->major_rev_num jak rozumiem, to jakaś maska bitowa,
z której wynika co dysk potrafi. A minor to jakiś podtyp
interfejsu ATA. Obie tablice ata_major_str i ata_minor_str
są zdefinowane na początku hdparm.c (linia 131)
> Żadnego sprawdzania, czy nie
> wyjeżdża się poza tablice. Inna sprawa, że ja chyba jakiś
> niedorozwinięty jestem bo nigdzie nie mogę znaleźć deklraracji
> minor_rev_num...
<linux/hdreg.h>
struct hd_driveid {
[...]
unsigned short major_rev_num; /* */
unsigned short minor_rev_num; /* */
Nie ma to jak wiele mówiący komentarz ;-)
A wartości do tej struktury są brane w hdpram.c z ioctl (linia 1222):
#ifdef HDIO_OBSOLETE_IDENTITY
if (!(old_identity = ioctl(fd, HDIO_GET_IDENTITY, &id))
|| !ioctl(fd, HDIO_OBSOLETE_IDENTITY)) {
#else
if (!ioctl(fd, HDIO_GET_IDENTITY, &id)) {
old_identity = 1;
#endif
I odnoszę nieodparte wrażenie, że w przypadku tego dysku wartości
id->minor_rev_num i id->major_rev_num zwrócone przez ioctl są bez
sensu. id->minor_rev_num == 0xFFFFFF, id->major_rev_num = 7
(a major MSZ, powinno być parzyste, bo bit jedności odpowiada
napisowi 'reserved')
hdparm -I też daje ciekawe rezultaty.. m.in. coś takiego
DMA: mdma0 mdma1 mdma2 udma0 udma1 *udma2 udma10
^^^^^^(WTF?)
bart
--
AK-47: *** No targets. Stop.
bart @bart.w-wa.pl || http://bart.w-wa.pl || http://faq.pl/php/
Więcej informacji o liście dyskusyjnej pld-users-pl