Forum: Mikrocontroller und Digitale Elektronik FAT windows system volume information fehlerhaft


von Alex (Gast)


Lesenswert?

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.)
3
  'M', 'S', 'D', 'O', 'S', '5', '.', '0', //0x3 3-10  MSDOS5.0
4
  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.
20
21
//mein Eintrag  
22
    'L', 'P', 'C', 'U', 'S', 'B', 'l', 'i',
23
  'b', ' ', ' ',
24
  0x28,
25
  0x00,
26
  0x00,
27
  0x00, 0x00, 0x00, 0x00,
28
  0x00, 0x00,
29
  0x00, 0x00,
30
  0x00, 0x00,
31
  0x00, 0x00,
32
  0x00, 0x00,
33
  0x00, 0x00, 0x00, 0x00,
34
  'F', 'I', 'R', 'M', 'W', 'A', 'R', 'E', 'B', 'I', 'N',
35
  0x20,
36
  0x18,
37
  0xbc,0x41,0x97,0x37,0x38,
38
  0x37,0x38,
39
  0x00,0x00,
40
  0x3d,0x6e,0x2b,0x38,
41
  0x02,0x00,
42
  0x00,0x10,0x00,0x00,
43
44
//daten die windows ans root anhängt
45
0x0001D60C  490020E5  å .I
46
0x0001D610  66006E00  .n.f
47
0x0001D614  0F006F00  .o..
48
0x0001D618  00727200  .rr.
49
0x0001D61C  0061006D  m.a.
50
0x0001D620  00690074  t.i.
51
0x0001D624  0000006F  o...
52
0x0001D628  0000006E  n...
53
54
0x0001D62C  790053E5  åS.y
55
0x0001D630  74007300  .s.t
56
0x0001D634  0F006500  .e..
57
0x0001D638  006D7200  .rm.
58
0x0001D63C  00560020   .V.
59
0x0001D640  006C006F  o.l.
60
0x0001D644  00000075  u...
61
0x0001D648  0065006D  m.e.
62
63
0x0001D64C  545359E5  åYST
64
0x0001D650  317E4D45  EM~1
65
0x0001D654  16202020     .
66
0x0001D658  4C134B00  .K.L
67
0x0001D65C  52D152D1  ÑRÑR
68
0x0001D660  4C140000  ...L
69
0x0001D664  000052D1  ÑR..
70
0x0001D668  00000000  ....
71
72
0x0001D66C  490020E5  å .I
73
0x0001D670  66006E00  .n.f
74
0x0001D674  0F006F00  .o..
75
0x0001D678  00727200  .rr.
76
0x0001D67C  0061006D  m.a.
77
0x0001D680  00690074  t.i.
78
0x0001D684  0000006F  o...
79
0x0001D688  0000006E  n...
80
81
0x0001D68C  790053E5  åS.y
82
0x0001D690  74007300  .s.t
83
0x0001D694  0F006500  .e..
84
0x0001D698  006D7200  .rm.
85
0x0001D69C  00560020   .V.
86
0x0001D6A0  006C006F  o.l.
87
0x0001D6A4  00000075  u...
88
0x0001D6A8  0065006D  m.e.
89
90
0x0001D6AC  545359E5  åYST
91
0x0001D6B0  317E4D45  EM~1
92
0x0001D6B4  16202020     .
93
0x0001D6B8  4C134B00  .K.L
94
0x0001D6BC  52D152D1  ÑRÑR
95
0x0001D6C0  4C140000  ...L
96
0x0001D6C4  000052D1  ÑR..
97
0x0001D6C8  00000000  ....

von Schlaumaier (Gast)


Lesenswert?

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.

von Alex (Gast)


Lesenswert?

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.

von foobar (Gast)


Lesenswert?

Sehr verwirrende Beschreibung - klingt irgendwie, als ob du den 
Datenträger änderst, während er unter Windows eingebunden (gemounted) 
ist.

von 123 (Gast)


Lesenswert?

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?

von oszi40 (Gast)


Lesenswert?

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?

von Alex (Gast)


Lesenswert?

Hallo,
danke für euere Hilfe.

Chkdsk hat mich auf die Spur gebracht. Die FAT war falsch Der Dode war 
nicht 1:1 portierbar.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.