#c #operating-system #filesystems #fat
Вопрос:
Я разрабатываю ОС, я пытаюсь реализовать файловую систему FAT12 из исходного кода другой ОС, Наконец, я могу смонтировать диск в формате FAT12 и получить его информацию о FAT12.
Он может Считывать имя диска ( Когда «Местоположение = 0» ). Но когда я пытаюсь перечислить каталоги с диска, это не работает!
Вот, Это Мой код для получения каталогов,
void FAT12_PrintDirectories(uint32_t Location, uint32_t numEntries, uint8_t DriveNum)
{
uint8_t read[((numEntries*32)/4096) 1];
AHCI::Port* port = AHCI::GlobalAHCI->ports[0];
port->Configure();
port->buffer = (uint8_t*)GlobalAllocator.RequestPage();
memset(port->buffer, 0, ((numEntries*32)/4096) 1);
port->Read(Location /* If I write here '0' Instead of Location, then Output is Image2 */, Location ((numEntries*32)/4096) 1, port->buffer);
for (int n = 0; n < sizeof(port->buffer); n )
{
GlobalRenderer->PutChar(port->buffer[n]);
read[n] = port->buffer[n];
}
char drivename[12];
memset(amp;drivename, 0, 12);
memcpy(drivename, read, 8);
if(read[9] != ' ')
{
drivename[8] = '.';
memcpy(drivename 9, read 8, 3);
}
drivename[11] = 0;
// Print test read
GlobalRenderer->Next();
for (int n = 0; n < sizeof(read); n )
{
GlobalRenderer->Print("=");
GlobalRenderer->Print(to_string((uint64_t)read[n]));
}
GlobalRenderer->Next();
GlobalRenderer->Print("Listing Dirs!");
GlobalRenderer->Next();
GlobalRenderer->Print("DriveName : ");
GlobalRenderer->Print(drivename);
GlobalRenderer->Next();
uint8_t *reads = read;
GlobalRenderer->Print("Dirs : ");
GlobalRenderer->Next();
for (unsigned int i = 0; i < numEntries; i )
{
if(!reads[11] amp; 0x08 || reads[11] amp; 0x02 || reads[0] == 0 || reads[0] == 0xE5)
{
// Print FileName
for (uint8_t j = 0; j < 11; j )
{
if(j == 8 amp;amp; reads[j] != ' ')
{
GlobalRenderer->Print(".");
}
if(reads[j] != 0x20)
{
GlobalRenderer->Print(to_string((uint64_t)reads[j]));
}
if(reads[11] amp; 0x10 amp;amp; j == 10)
{
GlobalRenderer->Print("/");
}
uint32_t nextCluster = (reads[27] << 8) | reads[26];
uint32_t size = *(uint32_t *)amp;reads[28];
}
reads = 32;
}
GlobalRenderer->Print("-");
}
}
Вот мой вызывающий код для этой функции FAT12_PrintDirectories(dirOff, 32, 0);
На этот раз дирОфф = 2097153
Выход :
После текста «Dirs» — Изображение 1 Изображение 2
Location = ((FAT12_MOUNT *)getDiskMount(numActiveMounts).mount)->RootDirectoryOffset*512 1;