Oppure

Loading
23/05/13 17:53
LittleHacker
Salve a tutti, nel mio ultimo topic ho chiesto come fare ad implementare un filesystem senza l'uso del floppy(perché non ho questo dispositivo a disposizione)...ma poi mi sono ricordato che posso usare la macchina virtuale che mi mette a disposizione un floppy drive virtuale, e così ho fatto, sono riuscito ad implementare un driver in C per dialogare con il floppy drive, e dopo di che ho implementato anche il filesystem FAT, grazie a: brokenthorn.com/Resources/…, ma come mi capita sempre :_doubt: il fs non funziona...cioè se io nella mia img inserisco un file di testo "fil.txt" con contenuto "ciao :D", dopo di che vado ad avviare la macchina, ed inserisco il nome del file(anche con /…), il programma mi ritorna a video "0@P`p", ed è da 3 giorni che continuo a rovellarmi il cervello senza uscirne fuori, ho provato anche a stampare la dimensione del settore letto, e mi ritorna 4096bit(cioè 512byte a settore, che è giusto)! E quindi ho cercato nel codice del FAT, e tutti i valori della struct _BIOS_PARAMATER_BLOCK:
p_bs_t bootsector = (p_bs_t)flp_read_sector(0);

_MountInfo.numSectors     = bootsector->Bpb.NumSectors; // Questo
_MountInfo.fatOffset      = 1;
_MountInfo.fatSize        = bootsector->Bpb.SectorsPerFat; // Questo
_MountInfo.fatEntrySize   = 8;
_MountInfo.numRootEntries = bootsector->Bpb.NumDirEntries; // Questo
_MountInfo.rootOffset     = (bootsector->Bpb.NumberOfFats * bootsector->Bpb.SectorsPerFat) + 1; // Questo
_MountInfo.rootSize       = ( bootsector->Bpb.NumDirEntries * 32 ) / bootsector->Bpb.BytesPerSector; // Questo


Mi ritornano tutti 0! Ma non capisco, ho seguito la guida, ho cambiato solo:
unsigned -> size_t
unsigned char -> uint8_t
unsigned short -> uint16_t
unsigned long -> unit32_t


Come mai?
Grazie :k:
P.S: Ho usato anche VirtualBox. E mentre "leggo" il file, lampeggia la lucina verde, che vuol dire che sta leggendo dal floppy!

N.B: Nel mio github(link nella firma) c'è il codice! :k:
Ultima modifica effettuata da LittleHacker 30/05/13 16:21
aaa
02/06/13 12:30
LittleHacker
Ok, adesso sono riuscito a far "partire" il FAT, usando questo codice:
p_bs_t bootsector;
uint8_t *sector = flp_read_sector(0);

for (int i=0;i<(sizeof(p_bs_t) - 2);i++)
              ((uint8_t*)&bootsector)[i] = sector[i];

// Altro codice...


Ma il problema è che non riesce a leggere i file...cioè quando mi va ad aprire il file, i suoi parametri sono:
Name: FIL.TXT (giusto)
Length: 0 (sbagliato)
Id: 0 (penso sbagliato)

Come posso risolvere? :k:
aaa