Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [OSDEV] Problemi con il filesystem FAT!
Forum - C/C++ - [OSDEV] Problemi con il filesystem FAT!

Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 19:53
Giovedì, 23/05/2013
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: http://www.brokenthorn.com/Resources/OSDev22.html, 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 a:/fil.txt), 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:
Codice sorgente - presumibilmente Plain Text

  1. p_bs_t bootsector = (p_bs_t)flp_read_sector(0);
  2.  
  3. _MountInfo.numSectors     = bootsector->Bpb.NumSectors; // Questo
  4. _MountInfo.fatOffset      = 1;
  5. _MountInfo.fatSize        = bootsector->Bpb.SectorsPerFat; // Questo
  6. _MountInfo.fatEntrySize   = 8;
  7. _MountInfo.numRootEntries = bootsector->Bpb.NumDirEntries; // Questo
  8. _MountInfo.rootOffset     = (bootsector->Bpb.NumberOfFats * bootsector->Bpb.SectorsPerFat) + 1; // Questo
  9. _MountInfo.rootSize       = ( bootsector->Bpb.NumDirEntries * 32 ) / bootsector->Bpb.BytesPerSector; // Questo



Mi ritornano tutti 0! Ma non capisco, ho seguito la guida, ho cambiato solo:
Codice sorgente - presumibilmente C++

  1. unsigned -> size_t
  2. unsigned char -> uint8_t
  3. unsigned short -> uint16_t
  4. 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 il 30/05/2013 alle 18:21


Android User :)

MudStorm OS Source GitHub: https://github.com/Piso94/MudStorm-OS
PM Quote
Avatar
LittleHacker (Member)
Guru


Messaggi: 1033
Iscritto: 28/04/2009

Segnala al moderatore
Postato alle 14:30
Domenica, 02/06/2013
Ok, adesso sono riuscito a far "partire" il FAT, usando questo codice:
Codice sorgente - presumibilmente C/C++

  1. p_bs_t bootsector;
  2. uint8_t *sector = flp_read_sector(0);
  3.  
  4. for (int i=0;i<(sizeof(p_bs_t) - 2);i++)
  5.               ((uint8_t*)&bootsector)[i] = sector[i];
  6.  
  7. // 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:


Android User :)

MudStorm OS Source GitHub: https://github.com/Piso94/MudStorm-OS
PM Quote