OSDev http://osdev.su/ |
|
вычисление FAT LBA записи http://osdev.su/viewtopic.php?f=6&t=990 |
Страница 1 из 1 |
Автор: | scuter [ 02 авг 2014, 23:10 ] |
Заголовок сообщения: | вычисление FAT LBA записи |
пробовал качать папки и файлы в оперативку, и столкнулся с проблемкой, root dir или FirstRootDirSecNum имеет нормальный адрес, но вот остальные не и меют такой нормальный адресь примерно на 2 кластера больше так вот для уточнения хотел спросить как этот стартовый кластер вычислить, ??????????????????????? startLBA = FirstRootDirSecNum + RootDirSectors/2 |
Автор: | Nable [ 02 авг 2014, 23:34 ] |
Заголовок сообщения: | Re: вычисление FAT LBA записи |
Казалось бы, всё чётко написано: http://wiki.osdev.org/FAT#Reading_Directories Ну если чего-то непонятное в их коде есть - спрашивай более конкретно. |
Автор: | scuter [ 02 авг 2014, 23:37 ] |
Заголовок сообщения: | Re: вычисление FAT LBA записи |
если ты про это Цитата: absolute_cluster = relative_cluster - 2 + first_data_sector; так оно не работае. |
Автор: | Nable [ 02 авг 2014, 23:50 ] |
Заголовок сообщения: | Re: вычисление FAT LBA записи |
Спокойно. Во-первых, похоже что `2' в коде - не константа, а root_cluster. Далее, хм, чем больше читаю, тем больше кажется что смешались в кучу кластеры и сектора. Мде, до этого момента статья довольно чётко была написана. Собственно, сегодня ковырял https://raw.githubusercontent.com/jncro ... ster/fat.c , нашёл там одну ошибку, сверился со статьёй, поправил ошибку в локальной копии и дальше всё заработало. Код: uint32_t get_sector(struct fat_fs *fs, uint32_t rel_cluster) { #ifdef FAT_DEBUG printf("FAT: get_sector rel_cluster %i, sector %i\n", rel_cluster, fs->first_non_root_sector + (rel_cluster - 2) * fs->sectors_per_cluster); #endif rel_cluster -= 2; return fs->first_non_root_sector + rel_cluster * fs->sectors_per_cluster; } Где для FAT32: Код: ret->first_data_sector = bs->reserved_sector_count + (bs->table_count * bs->ext.fat32.table_size_32); ret->first_fat_sector = bs->reserved_sector_count; ret->first_non_root_sector = ret->first_data_sector; ret->sectors_per_fat = bs->ext.fat32.table_size_32; А для 12/16: Код: ret->first_data_sector = bs->reserved_sector_count + (bs->table_count *
bs->table_size_16); ret->first_fat_sector = bs->reserved_sector_count; ret->sectors_per_fat = bs->table_size_16; ret->first_non_root_sector = ret->first_data_sector + ret->root_dir_sectors; ret->root_dir_cluster = 2; |
Автор: | phantom-84 [ 03 авг 2014, 11:14 ] |
Заголовок сообщения: | Re: вычисление FAT LBA записи |
Отвечу подробно, если мне кто-нибудь расшифрует название темы. Edited. Первый физический кластер имеет номер 2. Может, проблема в этом. |
Автор: | scuter [ 03 авг 2014, 17:57 ] |
Заголовок сообщения: | Re: вычисление FAT LBA записи |
phantom-84 писал(а): Отвечу подробно, если мне кто-нибудь расшифрует название темы. Edited. Первый физический кластер имеет номер 2. Может, проблема в этом. по пробую перевести, вычисление адреса файла (LBA), Nable уже дал потрясающий ответ. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |