8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
1

Драйвер FAT32

29.09.2014, 23:20. Показов 2414. Ответов 12
Метки нет (Все метки)

Я уже полгода не могу написать драйвер fat32. Мне это очень надо. Я не могу читать файлы, а как без этого? Ни ядро, ни шрифт не прочтешь. Помогите написать. Please!!!

Добавлено через 1 минуту
Мне самому не справится, я пишу на fasm. C++ не знаю
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2014, 23:20
Ответы с готовыми решениями:

Рабочий драйвер FAT32 на fasm с функцией чтения файла по заданному пути
Мне нужен рабочий драйвер FAT32 на fasm. Функции драйвера: чтение файла по заданному пути....

Кракозябры имен файлов после конвертации fat32 -> ntfs -> fat32
Пришлось мне тут перегнать раздел из fat32 в ntfs, а потом обратно. И в результате часть папок...

Драйвер для MICROSD (SPI) + FAT32 для STM32
Собственно пишу драйвер для Micro SD карточек и файловую систему FAT32. Тестируем драйвер...

FAT32 и Windows 7
Здравствуйте люди добрые! У меня на компе установлено два винчестера. И на них стоит 3 винды...

12
programmer
2378 / 513 / 68
Регистрация: 01.06.2011
Сообщений: 3,614
30.09.2014, 00:55 2
Цитата Сообщение от Вадик_ Посмотреть сообщение
Я уже полгода не могу написать драйвер fat32
Зачем он тебе?
А если хочешь написать свою ОС,то и подходи к делу основательно.
Может и не стоит тогда пытаться?
1
31 / 31 / 5
Регистрация: 24.09.2014
Сообщений: 243
30.09.2014, 01:49 3
Цитата Сообщение от Вадик_ Посмотреть сообщение
Мне самому не справится
собери единомышленников...
1
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
30.09.2014, 10:54 4
Цитата Сообщение от Вадик_ Посмотреть сообщение
C++ не знаю
у меня есть "драйвер" на сях, который может писать файлы в img образ диска. могу скинуть. есть на ассемблере, который читает, но он не универсальный. а в чем конекретно проблемы?
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
30.09.2014, 15:38  [ТС] 5
Мотороллер, скинь драйвер на ассемблере
0
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
30.09.2014, 15:48 6
я не знаю поймешь ты тут или нет, но это даже не драйвер, а просто штука которая читает нужный мне файл. коментировать мне лень, поэтому сам думаешь, если уж прям совсем внапряг спрашиваешь и ждешь когда отвечу.
kernel_load.inc:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
include '..\const.inc'
    mov esi, buffer+38h
    mov eax, 0x1F0
    mov edx, 0x170
    cmp byte [esi], 0
    
    cmove ebx, eax
    cmovne ebx, edx
    mov [basePort], bx
    xor eax, eax
    mov al, [esi+1]
    mov [device], al
    
    mov eax, [startSector]
    mov ecx, 1
    mov edi, sectorBuf
    call readSectors
    cmp [devErrorCode], 0
    je @f
    mov esi, readSectorError
    mov edi, 0xB8000+160*4
    call showMessage
    jmp $
readSectorError db 'Error reading sector', 0
@@:
    mov al, byte [sectorBuf+0xD]
    mov [sectorsPerCluster], al
    mov ax, word [sectorBuf+0xE]
    mov [reservedSectors], ax
    mov eax, dword[sectorBuf+0x2C]
    mov [rootCluster], eax
    mov eax, dword [sectorBuf+0x24]
    mov [FATSize], eax
    shl eax, 1
    add eax, [startSector]
    movzx edx, [reservedSectors]
    add eax, edx
    mov [dataAreaStartSect], eax
    mov eax, 512
    movzx ecx, [sectorsPerCluster]
    mul ecx
    mov [clusterSize], eax
    add eax, clusterBuf
    mov [endCluster], eax
    
    mov esi, bootLst
    mov edi, clusterBuf
    add edi, [clusterSize]
    call readFile
    cmp [devErrorCode], 0
    je .ok
    mov esi, bootLstNotFound
    mov edi, 0xB8000
    call showMessage
    jmp $
.ok:
    mov esi, edi
    mov edi, KERNEL_BASE_ADDRESS
loading_main_files:
    cmp byte [esi], '$'
    je loading_main_files_done
    call readFile
    cmp [devErrorCode], 0
    je .file_ok
    push esi
    mov esi, file_bad
    mov edi, 0xB8000+160*6
    call showMessage
    pop esi
    mov ecx, 11
    mov edi, 0xB8000+160*6+10
    call showNMessage
    mov esi, file_bad1
    mov edi, 0xB8000+160*6+10+22
    call showMessage
    jmp $
.file_ok:
    inc [loaded_files_count]
    add esi, 13
    xor edx, edx
    div [clusterSize]
    inc eax
    mul [clusterSize]
    add edi, eax
    jmp loading_main_files
loading_main_files_done:
    mov edi, memory_map
    mov esi, [clusterSize]
    movzx ecx, [loaded_files_count]
    dec ecx
    movzx ebx, [memory_blocks_count]
    mov eax, videoModeInfo
    jmp KERNEL_BASE_ADDRESS
    
loaded_files_count db 0
file_bad db 'File ', 0
file_bad1 db ' not found', 0    
sectorsPerCluster db ?
reservedSectors dw ?
FATSize dd ?
rootCluster dd ?
dataAreaStartSect dd ?
bootLst db 'BOOTLST LST'
bootLstNotFound db 'Bootlst.lst not found', 0
 
include 'hdd_proc.inc'
 
;edi=address
;esi=fileName
readFile:
    pushad
    mov [.addressToLoad], edi
    mov eax, [rootCluster]
    sub eax, 2
    mov edi, clusterBuf
    call readCluster
    cmp [devErrorCode], 0
    jne .endSearch
.search:
    push esi
    push edi
    mov ecx, 11
    repe cmpsb
    pop edi
    pop esi
    je .found
    add edi, 32
    cmp edi, [endCluster]
    jne .search
.endSearch:
    mov [devErrorCode], 1
    popad
    ret
.found:
    mov eax, dword [edi+0x1C]
    mov [.fileSize], eax
    mov ax, word [edi+14h]
    shl eax, 16
    mov ax, word [edi+0x1A]
    push eax
    mov ebx, 512/4
    xor edx, edx
    div ebx
    add eax, [startSector]
    movzx ebx, [reservedSectors]
    add eax, ebx
    mov edi, sectorBuf
    mov ecx, 1
    call readSectors
    pop eax
    cmp [devErrorCode], 0
    jne .endSearch
    mov edi, [.addressToLoad]
.load:
    sub eax, 2
    call readCluster
    cmp [devErrorCode], 0
    jne .endSearch
    add eax, 2
    add edi, [clusterSize]
    xor edx, edx
    mov ebx, 512/4
    div ebx
    or edx, edx
    jne ..ok
    add eax, [startSector]
    movzx ebx, [reservedSectors]
    add eax, ebx
    mov ecx, 1
    push edi
    mov edi, sectorBuf
    call readSectors
    pop edi
    cmp [devErrorCode], 0
    jne .endSearch
..ok:
    mov eax, dword [sectorBuf+edx*4]
    cmp eax, 0xFFFFFF8
    jae ._ret
    jmp short .load
._ret:
    mov [devErrorCode], 0
    popad
    mov eax, [.fileSize]
    ret
    
.fileSize dd ?
.addressToLoad dd ? 
endCluster dd ? 
basePort dw ?
device db 0
ATAFeatures db ?
ATASectorsCount db ?
ATASectorNumber db ?
ATACylinder dw ?
ATAHead db ?
ATACommand db ?
devErrorCode db ?
sector dd ?
sectorBuf db 512 dup (0)
FATTable dd 512/4 dup (?)
clusterSize dd ?
align 16
clusterBuf:
hdd_proc.inc
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
;eax=cluster
;edi=buf
readCluster:
    pushad
    
    movzx ecx, [sectorsPerCluster]
    mul ecx
    add eax, [dataAreaStartSect]
    call readSectors
    
    popad
    ret
 
;eax=sector
;ecx=sectors count
;edi=bufer
readSectors: 
    pushad
    
    mov [ATAFeatures], 0
    mov [ATASectorNumber], al
    mov [ATASectorsCount], cl
    shr eax, 8
    mov [ATACylinder], ax
    shr eax, 16
    mov [ATAHead], al
    mov [ATACommand], 21h
    call sendCommandToHDD
    cmp [devErrorCode], 0
    jne .Err1
    
    mov dx, [basePort]
    add dx, 7
    mov ecx, 0xFFF
.WaitHDD:
    dec ecx
    jz .Err1
    in al, dx
    test al, 80h
    jnz .WaitHDD
    test al, 8
    jz .WaitHDD
    
    sub dx, 7
    movzx ecx, [ATASectorsCount]
    shl ecx, 8
    rep insw
    mov [devErrorCode], 0
    popad
    ret
.Err1:
    mov [devErrorCode], 1   
    popad
    ret
    
sendCommandToHDD:
    pushad
    
    mov dx, [basePort]
    add dx, 6
    mov al, [device]
    shl al, 4
    or al, 10100000b
    out dx, al
    inc dx
    mov ecx, 0xFFF
.WaitHDDReady:
    dec ecx
    je .Err1
    in al, dx
    test al, 80h
    jnz .WaitHDDReady
    
    mov dx, [basePort]
    inc dx
    mov al, [ATAFeatures]
    out dx, al
    inc dx
    mov al, [ATASectorsCount]
    out dx, al
    inc dx
    mov al, [ATASectorNumber]
    out dx, al
    inc dx
    mov ax, [ATACylinder]
    out dx, al
    inc dx
    mov al, ah
    out dx, al
    inc dx
    mov al, [device]
    shl al, 4
    or al, [ATAHead]
    or al, 10100000b
    mov ah, 1
    shl ah, 6
    or al, ah
    out dx, al
    mov al, [ATACommand]
    inc dx
    out dx, al
    mov [devErrorCode], 0
    popad
    ret
.Err1:
    mov [devErrorCode], 1
    popad
    ret
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
01.10.2014, 21:11  [ТС] 7
А как создать образ fat32 на fasm коде. times или db
0
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
01.10.2014, 22:49 8
Цитата Сообщение от Вадик_ Посмотреть сообщение
А как создать образ fat32 на fasm коде. times или db
замахнулся. используй специализированные средства
0
Клюг
7673 / 3188 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
03.10.2014, 13:36 9
Вадик_, исходники fat32 можно выдрать из FreeDOS(на Си, AFAIR).
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
05.10.2014, 19:59  [ТС] 10
А какая структура fat32. И в описателе каталога( в его кластере) есть описатели файлов?
Почему после fat таблицы идёт описатель файла?
0
Нарушитель
Автор FAQ
15518 / 7340 / 960
Регистрация: 11.11.2010
Сообщений: 13,244
06.10.2014, 03:42 11
Цитата Сообщение от Вадик_ Посмотреть сообщение
А какая структура fat32. И в описателе каталога( в его кластере) есть описатели файлов?
Почему после fat таблицы идёт описатель файла?
Вадик_,
не пробовал читать закрепленную тему Пишем загрузочный сектор ?
0
programmer
2378 / 513 / 68
Регистрация: 01.06.2011
Сообщений: 3,614
06.10.2014, 05:42 12
Цитата Сообщение от Вадик_ Посмотреть сообщение
А какая структура fat32
я вобще не понимаю зачем тебе для собственной ОС нужен fat32.
Это абстракция над CHS и LBA.Можешь и свою файловую систему изобрести.
Изучи для начала программирование контроллера HDD.

Необходимость работать напрямую с регистрами контроллера диска возникает в следующих случаях:
• при переключении процессора в защищенный режим (прерывания DOS и BIOS становятся недоступными);
• при работе с дисками большого (свыше 8 Гбайт) объема или нестандартного (не-DOS) формата;
• в измерительных системах и системах управления реального времени (для ускорения операций I/O);
• в системах с повышенными требованиями к обеспечению защиты информации (для предотвращения перехвата управления на уровне прерываний, например, компьютерным вирусом).
0
8 / 8 / 5
Регистрация: 28.03.2014
Сообщений: 137
08.10.2014, 14:31  [ТС] 13
Все получилось, осталось под pm написать. А для hdd у меня есть рабочий pm драйвер
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2014, 14:31
Помогаю со студенческими работами здесь

NTFS to FAT32
Имеется XP на диске С. Необходимо преобразовать диск D в систему FAT32, чтобы на него поставить...

FAT32 vs NTFS
Какая файловая система работает быстрее? Допустим для размещение данных используется одна этажа...

FAT32 vs exFAT
Чет сеня первый раз увидел возможность форматирования в exFAT. Скажите кто нить...а в чем прикол???...

Windows и FAT32
Ребят, проблема вот в чем, решил поставить другу на ноут вин 7, все установил, но он не видит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru