ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
99394 Топик полностью
MiniMax (12.09.2007 14:02, просмотров: 100) ответил Argon на Может, тогда уж посоветуете, как искать BPB сектор? :)
Когда-то давно я использовал примитивный метод. Читал первый сектор и проверял на наличие FAT признака. Если нет FAT12/FAT16, то значит это MBR и необходимо считать данные (со смещением 454) и оттуда узнать где находится BOOT. <c> MBR_SectorFrom =0; BOOT_OFFSET =0; // Try to find BOOT sector #ifdef _FAT_DEBUG printf ("\nFAT: Trying to find BOOT..."); #endif // 36h FAT Name (FAT16) 8 Bytes offset = BOOT_OFFSET+0x36; ec=ReadDataBlock(0,offset,8,dataArray); if(ec)goto func_end; dataArray[8]=0; Br_FATName = (dataArray[3]-'0')*10 + (dataArray[4]-'0'); if (!((Br_FATName == FAT12 )||(Br_FATName == FAT16))) { ec = _FAT_UNKNOWN_FAT; } // MBR if ( ec == _FAT_UNKNOWN_FAT ) { #ifdef _FAT_DEBUG printf ("\nFAT: Reading MBR..."); #endif offset = 454; ec = ReadDataBlock(0,offset,WORD_LEN,dataArray); if(ec)goto func_end; MBR_SectorFrom = GetWordFromBuffer(dataArray); BOOT_OFFSET = MBR_SectorFrom * 512; } </c> Позже я переключился на открытые исходники FreeDOS и портировал их на ARM7 ( MMC, DataFlash). Там все работает без проблем и я даже не вникал больше в эту проблему.