doc: document fatfs
This commit is contained in:
		
							parent
							
								
									0ce1e73a09
								
							
						
					
					
						commit
						23e5bf0045
					
				
					 10 changed files with 146 additions and 20 deletions
				
			
		| 
						 | 
				
			
			@ -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…
	
	Add table
		
		Reference in a new issue