doc: document fatfs
This commit is contained in:
parent
0ce1e73a09
commit
23e5bf0045
|
@ -1,4 +1,6 @@
|
|||
INCS = coff.h elf.h
|
||||
SYSINCS = sys/errno.h
|
||||
INCSYSDIR = $(INCDIR)/sys
|
||||
|
||||
.PHONY: all
|
||||
all:
|
||||
|
@ -7,8 +9,10 @@ all:
|
|||
clean:
|
||||
|
||||
.PHONY: install
|
||||
install: $(INCS)
|
||||
install: $(INCS) $(INCSYSDIR)
|
||||
@ mkdir -p $(DESTDIR)$(INCDIR)
|
||||
install $< $(DESTDIR)$(INCDIR)
|
||||
install $(INCS) $(DESTDIR)$(INCDIR)
|
||||
@ mkdir -p $(DESTDIR)$(INCSYSDIR)
|
||||
install $(SYSINCS) $(DESTDIR)$(INCSYSDIR)
|
||||
|
||||
.PHONY: all clean install
|
||||
|
|
|
@ -2,6 +2,15 @@ AS = fasm
|
|||
RM = rm -f
|
||||
INSTALL = install
|
||||
|
||||
ASMINCS = sys/bootinfo.inc \
|
||||
sys/coff.inc \
|
||||
sys/cpu.inc \
|
||||
sys/errno.inc \
|
||||
sys/macro.inc \
|
||||
sys/mmu.inc \
|
||||
sys/process.inc \
|
||||
sys/register.inc
|
||||
|
||||
KERNEL = vmstupid.sys
|
||||
SRCS = kernel.asm \
|
||||
const.inc \
|
||||
|
@ -23,7 +32,9 @@ SRCS = kernel.asm \
|
|||
fs/fat.inc \
|
||||
fs/stpdfs.inc \
|
||||
fs/xv6fs.inc \
|
||||
vfs.inc
|
||||
vfs.inc \
|
||||
proc.inc \
|
||||
$(ASMINCS)
|
||||
|
||||
.PHONY: all
|
||||
all: $(KERNEL)
|
||||
|
@ -42,6 +53,8 @@ clean:
|
|||
.PHONY: install
|
||||
install: $(KERNEL)
|
||||
@ mkdir -p $(DESTDIR)
|
||||
install $< $(DESTDIR)
|
||||
install $(KERNEL) $(DESTDIR)
|
||||
@ mkdir -p $(DESTDIR)$(ASMDIR)/sys
|
||||
install $(ASMINCS) $(DESTDIR)$(ASMDIR)/sys
|
||||
|
||||
.PHONY: all clean install
|
||||
|
|
|
@ -40,3 +40,7 @@ com_irq2:
|
|||
pusha
|
||||
popa
|
||||
iret
|
||||
|
||||
com_device:
|
||||
db 'com', 0, 0, 0, 0, 0
|
||||
dd com_init
|
||||
|
|
|
@ -78,3 +78,7 @@ ne2k_probe:
|
|||
|
||||
ne2k_irq:
|
||||
iret
|
||||
|
||||
ne2k_device:
|
||||
db 'ne2k', 0, 0, 0, 0
|
||||
dd ne2k_init
|
||||
|
|
|
@ -38,6 +38,8 @@ aDevices:
|
|||
dd floppy_device
|
||||
dd kbd_device
|
||||
dd console_device
|
||||
dd com_device
|
||||
dd ne2k_device
|
||||
.end:
|
||||
|
||||
dev_init:
|
||||
|
|
|
@ -60,6 +60,12 @@ struc FATFS_BootSector32 {
|
|||
}
|
||||
DEFN FATFS_BootSector32
|
||||
|
||||
;; Struc: FATFS_Dirent
|
||||
;; FAT Filesystem directory entry
|
||||
;;
|
||||
;; .name - Filename
|
||||
;; .ext - File extension
|
||||
;; .attr - See <FATFS file attributes>
|
||||
struc FATFS_Dirent {
|
||||
.name db 8 dup(?)
|
||||
.ext db 3 dup(?)
|
||||
|
@ -77,6 +83,21 @@ struc FATFS_Dirent {
|
|||
}
|
||||
DEFN FATFS_Dirent
|
||||
|
||||
;; Enum: FATFS file attributes
|
||||
;;
|
||||
;; FATFS_ATTR_READ_ONLY - Mark file as read-only
|
||||
;; FATFS_ATTR_HIDDEN - TODO
|
||||
;; FATFS_ATTR_SYSTEM - TODO
|
||||
;; FATFS_ATTR_VOLUME_ID - The corresponding entry contains the volume label.
|
||||
;; FATFS_ATTR_DIRECTORY - The corresponding entry represents a directory
|
||||
;; FATFS_ATTR_ARCHIVE - TODO
|
||||
FATFS_ATTR_READ_ONLY = 0x01
|
||||
FATFS_ATTR_HIDDEN = 0x02
|
||||
FATFS_ATTR_SYSTEM = 0x04
|
||||
FATFS_ATTR_VOLUME_ID = 0x08
|
||||
FATFS_ATTR_DIRECTORY = 0x10
|
||||
FATFS_ATTR_ARCHIVE = 0x20
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
|
||||
;; Section: Implementation
|
||||
|
|
|
@ -1,4 +1,20 @@
|
|||
;; File: heap.inc
|
||||
;; Base on <https://github.com/CCareaga/heap_allocator/blob/master/commented_heap.c>
|
||||
|
||||
struc HeapNode {
|
||||
.hole dd ?
|
||||
.size dd ?
|
||||
.next dd ?
|
||||
.prev dd ?
|
||||
}
|
||||
DEFN HeapNode
|
||||
|
||||
struc HeapInfo {
|
||||
.start dd ?
|
||||
.end dd ?
|
||||
.bins dd 9 dup(?)
|
||||
}
|
||||
DEFN HeapInfo
|
||||
|
||||
;; Function: heap_init
|
||||
heap_init:
|
||||
|
@ -13,8 +29,23 @@ heap_init:
|
|||
mov esi, szMsgHeapInit
|
||||
call klog
|
||||
|
||||
; TODO
|
||||
mov eax, [ebp-4]
|
||||
mov ecx, KERNEL_VIRT_BASE
|
||||
mov [ecx + HeapNode.hole], dword 1
|
||||
sub eax, sizeof.HeapNode + 4
|
||||
mov [ecx + HeapNode.size], eax
|
||||
|
||||
add eax, sizeof.HeapNode
|
||||
add eax, ecx
|
||||
mov [eax], ecx
|
||||
|
||||
mov ecx, KERNEL_VIRT_BASE
|
||||
mov [kheap + HeapInfo.start], ecx
|
||||
mov eax, [ebp-4]
|
||||
add ecx, eax
|
||||
mov [kheap + HeapInfo.end], ecx
|
||||
|
||||
.end:
|
||||
leave
|
||||
ret
|
||||
|
||||
|
@ -24,4 +55,36 @@ heap_alloc:
|
|||
heap_free:
|
||||
ret
|
||||
|
||||
;; Function: heap_getbin
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - size
|
||||
heap_getbin:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
sub esp, 4
|
||||
|
||||
mov [ebp-4], dword 0
|
||||
cmp eax, 4
|
||||
jge @f
|
||||
mov eax, 4
|
||||
@@:
|
||||
shr eax, 1
|
||||
cmp eax, 1
|
||||
or eax, eax
|
||||
jz @f
|
||||
inc dword [ebp-4]
|
||||
jmp @b
|
||||
@@:
|
||||
mov eax, [ebp-4]
|
||||
sub eax, 2
|
||||
cmp eax, 8
|
||||
jbe @f
|
||||
mov eax, 8
|
||||
@@:
|
||||
leave
|
||||
ret
|
||||
|
||||
kheap HeapInfo
|
||||
szMsgHeapInit db "HEAP: initialize %x - %x", 0
|
||||
szMsgErrorHeap db "ERROR: HEAP: not enough memory", 0
|
||||
|
|
|
@ -54,8 +54,8 @@ kmain:
|
|||
add ebx, KERNEL_VIRT_BASE
|
||||
call pmm_free_range
|
||||
|
||||
mov eax, [boot_structure.low_mem]
|
||||
call heap_init
|
||||
;mov eax, [boot_structure.low_mem]
|
||||
;call heap_init
|
||||
|
||||
call pic_init
|
||||
|
||||
|
@ -87,8 +87,6 @@ kmain:
|
|||
;mov al, 'X'
|
||||
;call cga_putc
|
||||
|
||||
|
||||
|
||||
.halt:
|
||||
hlt
|
||||
jmp $
|
||||
|
@ -115,11 +113,12 @@ kmain:
|
|||
include 'isr.inc'
|
||||
include 'idt.inc'
|
||||
include 'pic.inc'
|
||||
include 'heap.inc'
|
||||
;include 'heap.inc'
|
||||
include 'vfs.inc'
|
||||
include 'fs/fat.inc'
|
||||
include 'fs/stpdfs.inc'
|
||||
include 'fs/xv6fs.inc'
|
||||
include 'proc.inc'
|
||||
|
||||
|
||||
szMsgKernelAlive db "Kernel (", VERSION_FULL , ") is alive", 0
|
||||
|
@ -129,6 +128,8 @@ boot_structure BootInfo
|
|||
|
||||
kTSS TSS
|
||||
|
||||
aProcs rb 64*sizeof.Process
|
||||
|
||||
align 4096
|
||||
stack_bottom:
|
||||
rb 0x4000
|
||||
|
|
11
kernel/proc.inc
Normal file
11
kernel/proc.inc
Normal file
|
@ -0,0 +1,11 @@
|
|||
proc_init:
|
||||
mov ecx, sizeof.Process * 64
|
||||
xor ax, ax
|
||||
mov edi, aProcs
|
||||
rep stosb
|
||||
|
||||
ret
|
||||
|
||||
|
||||
uProcLock dd 0
|
||||
pCurrentProc dd 0
|
|
@ -1,18 +1,21 @@
|
|||
|
||||
struc ProcessGroup {
|
||||
}
|
||||
|
||||
struc Context {
|
||||
.flags dd ?
|
||||
.regs dd ?
|
||||
.edi dd ?
|
||||
.esi dd ?
|
||||
.ebx dd ?
|
||||
.ebp dd ?
|
||||
.eip dd ?
|
||||
}
|
||||
DEFN Context
|
||||
|
||||
struc Process {
|
||||
.pagedir dd ?
|
||||
.kstack dd ?
|
||||
.parent dd ?
|
||||
.context Context
|
||||
.trapframe dd ?
|
||||
.context dd ?
|
||||
.next dd ?
|
||||
}
|
||||
DEFN Process
|
||||
|
||||
PROCESS_STATE_IDL = 0
|
||||
PROCESS_STATE_RUN = 1
|
||||
|
|
Loading…
Reference in a new issue