Hallo,
ich hab ein Problem mit dem FAT / Windows System.
Schreibe grade einen Bootloader der den Boot Sector, FAT und
Verzeichniseintrag im RAM hält und die Daten ins Flash schreibt.
Beim Start erstell die FW ein Datenträger mit einer Datei
„firmware.bin“. Diese Datei lässt sich aber nicht richtig löschen.
Löscht man die Datei und drückt F5 erscheint diese wieder auf nur mit
0kB Größe.
Erst nach Datenträger->Fehlerüberprüfung funktioniert alles.
Windows schreibt am Anfang irgendwelche fehlerhaften Daten(windows
system volume information) in den Verzeichniseintrag. Die "richtigen"
Daten erst nach Datenträger->Fehlerüberprüfung.
Dabei ändert sich nichts an meinen Daten/Formatierung, sondern nur den
von Win angefügten.
Der Boot Sector kann von Windows nicht geändert werden.
Den Code vom Boot Sector und die Root Einträge funktionierten in einem
älteren Projekt ohne Probleme. Der FAT Secrot ist auch richtig.
Hab auch schon die daten selbst in den Verzeichniseintrag eingefügt. Hat
nicht geholfen…
Es hat irgendwas mit diesen Systemdaten von Windows zu tun.
Ich komme nur nicht drauf was das Problem ist wieso er die korrekten
Daten nicht von Anfang an reinschreibt.
1
//BOOT Sector
2
0xeb,0x3c,0x90,//0x0 0-2 Jump to bootstrap (E.g. eb 3c 90; on i86: JMP 003E NOP. One finds either eb xx 90, or e9 xx xx. The position of the bootstrap varies.)
0x00,0x02,//0xB 11-12 0x0200 Number of bytes per sector
5
0x02,//0xD 13 Number of sectors per cluster
6
0x01,0x00,//0xE 14-15 0001 Number of reserved sectors (1)
7
0x01,//0x10 16 Number of FAT copies sollte vielleicht 2 sein
8
0x10,0x00,//0x11 17-18 Number of root directory entries
9
// 0x00, 0x08, //0x13 19-20 0002 Total number of sectors in the filesystem
10
0x06,0x08,//0x13 19-20 0002 Total number of sectors in the filesystem
11
0xf8,//0x15 21 Media Type. Provides information about the media being used. A value of 0xF8 indicates a hard disk.
12
FAT_SECTOR_COUNT,0x00,//0x16 22-23 0001 Number of sectors occupied by each of the file allocation tables on the volume.
13
0x01,0x00,//0x18 24-25 0001 Number of sectors per track. The apparent disk geometry in use when the disk was low-level formatted.
14
0x01,0x00,//0x1A 26-27 0001 Number of heads
15
0x00,0x00,0x00,0x00,//0x1C 28-31 0 Number of hidden sectors
16
0x00,0x00,0x00,0x00,//0x20 32-35 Large Sectors. If the Small Sectors field is zero, this field contains the total number of sectors in the volume. If Small Sectors is nonzero, this field contains zero.
17
0x00,//0x24 36 0 Physical Disk Number. This is related to the BIOS physical disk number. Floppy drives are numbered starting with 0x00 for the A disk. Physical hard disks are numbered starting with 0x80. The value is typically 0x80 for hard disks, regardless of how many physical disk drives exist, because the value is only relevant if the device is the startup disk.
18
0x00,//0x25 37 Current Head. Not used by the FAT file system.
19
0x00,//0x26 38 Signature. Must be either 0x28 or 0x29 in order to be recognized by Windows NT.
Bist du sicher das die Datei korrekt geschlossen wird. ??!
0 Bytes Dateien lassen fast immer darauf schließen das die Datei nicht
korrekt geschlossen wird. Unter Windows selbst wird die Datei nach der
Fehlerbehandlung "scheingeschlossen" und als File0000.chk abgelegt.
Der selbe Effekt tritt auch auf, wenn man den Rechner mit Gewalt aus
macht, und noch offene Dateien hat.
Wie wird die Datei denn geöffnet?
Vor dem "Datenträger->Fehlerüberprüfung" die Datei löschen, steht im
root Dateigröße 0x00.
Nach dem "Datenträger->Fehlerüberprüfung" und löschen steht im ersten
Byte 0xE5 so wie es sein sollte.
erzähl mal etwas mehr was du da machst, ...
Booltloader und im Ram halten, ... hört sich so an als lockst du die
leute auf die falsche färte, ...
Variante 1 Bootsektor für einen 80x86? und eine RAM disk im
Arbeitsspeicher des PCs? + passende treiber für windows um diese RamDisk
zu mounten?
Variante 2 Geräte das über USB ein Masstorage device anbietet. und du
die Kontrolle über die FW des Gerätes hast.
1. Windows casht (für wechseldztaenträge konnte man das mal abschalten,
optimierung für schnelles abziehen oder so wobei das vermutlich nur der
Schreib cash ist. der read cash wird man nicht abschalten können) wobei
aber windows nicht davon ausgeht, das sich der datenträger von selber
verändert.
2. wenn 2 gleichzeitig auf dem Dateisystem rumrödeln, kann das nur
knallen.
Windows geht davon aus das es exclusieven zugriff auf den lokal
vorhandenen datenträger hat und dieser sich nicht selber verändert.
3. was sagt checkdisk vor dem löschen der datei?
4. in welchem RAM wird der sektor gespeichert? im RAM des PCs? oder wo?
Alex schrieb:> Daten nicht von Anfang an reinschreibt.
Mal mit einem Diskeditor zu verschiedenen Zeitpunkten angesehen?
Wahrscheinlich ist er noch gar nicht fertig mit schreiben? In Zweifel
mal ein paar Prüfpunkte irgendwo schreiben um den Zeitpunkt
festzustellen?