parent
7fec5d45f6
commit
18c807d210
|
@ -17,7 +17,11 @@ SRCS = kernel.asm \
|
|||
dev/at/pit.inc \
|
||||
dev/at/cga.inc \
|
||||
dev/at/kbd.inc \
|
||||
dev/at/floppy.inc
|
||||
dev/at/floppy.inc \
|
||||
fs/fat.inc \
|
||||
fs/stpdfs.inc \
|
||||
fs/xv6fs.inc \
|
||||
vfs.inc
|
||||
|
||||
.PHONY: all
|
||||
all: $(KERNEL)
|
||||
|
|
|
@ -1,13 +1,58 @@
|
|||
;; File: cmos.inc
|
||||
;;
|
||||
;; > +--------------------------------
|
||||
;; > | 0x00 | RTC seconds
|
||||
;; > +---------------
|
||||
;; > | 0x01 | RTC seconds alarm
|
||||
;; > +--------------------
|
||||
;; > | 0x02 | RTC minutes
|
||||
;; > +------------------------
|
||||
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x00 | RTC seconds |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x01 | RTC seconds alarm |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x02 | RTC minutes |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x03 | RTC minutes alarm |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x04 | RTC hours |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x05 | RTC hours alarm |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x06 | RTC day of week |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x07 | RTC date day |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x08 | RTC date month |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x09 | RTC date year |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x0A | Status register A |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x0B | Status register B |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x0C | Status register C |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x0D | Status register D |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x0E | Diagnostic Status |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x0F | CMOS Shutdown Status |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x10 | Floppy Disk Drive Type |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x11 | System Conf Settings |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x12 | Hard Disk Type |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x13 | Typematic Parameters |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x14 | Installed Equipment |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x15 | Base Memory LO |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x16 | Base Memory HI |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x17 | Extended Memory LO |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x18 | Extended Memory HI |
|
||||
;; > +------+-------------------------+
|
||||
;; > | 0x19 | Hard Disk Extended Type |
|
||||
;; > +------+-------------------------+
|
||||
|
||||
CMOS_COMMAND = 0x70
|
||||
CMOS_DATA = 0x71
|
||||
|
|
|
@ -18,4 +18,7 @@ console_read:
|
|||
call lock_release
|
||||
ret
|
||||
|
||||
console_init:
|
||||
ret
|
||||
|
||||
uConsoleLock dd 0
|
||||
|
|
|
@ -6,3 +6,5 @@ struc Device {
|
|||
.probe dd ?
|
||||
}
|
||||
|
||||
dev_init:
|
||||
ret
|
||||
|
|
|
@ -1,9 +1,73 @@
|
|||
;; File: fat.inc
|
||||
;;
|
||||
;; Usefull links:
|
||||
;; - <Spec at https://academy.cba.mit.edu/classes/networking_communications/SD/FAT.pdf>
|
||||
|
||||
FAT_SECTOR_SIZE = 512
|
||||
FAT_MDIR_SIZE = 32
|
||||
|
||||
struc FatBootSector {
|
||||
struc FATFS_BootSectorBase {
|
||||
.jump db 3 dup(?)
|
||||
.banner db 8 dup(?)
|
||||
.oemName db 8 dup(?)
|
||||
.byts_per_sec dw ?
|
||||
.sec_per_clus db ?
|
||||
.rsvd_sec_cnt dw ?
|
||||
.num_fats db ?
|
||||
.root_ent_cnt dw ?
|
||||
.tot_sec16 dw ?
|
||||
.media db ?
|
||||
.fat_sz16 dw ?
|
||||
.sec_per_trk dw ?
|
||||
.num_heads dw ?
|
||||
.hidd_sec dd ?
|
||||
.tot_sec32 dd ?
|
||||
}
|
||||
|
||||
struc FATFS_BootSector16 {
|
||||
.base FATFS_BootSectorBase
|
||||
|
||||
;; Extended BPB Structure
|
||||
.drv_num db ?
|
||||
.reserved1 db 0
|
||||
.boot_sig db ?
|
||||
.volume_id dd ?
|
||||
.volume_label db 11 dup(?)
|
||||
.filsys_type db 8 dup(?)
|
||||
.code db 448 dup(?)
|
||||
.signature dw ?
|
||||
}
|
||||
|
||||
struc FATFS_BootSector32 {
|
||||
.base FATFS_BootSectorBase
|
||||
|
||||
.fat_sz32 dd ?
|
||||
.ext_flags dw ?
|
||||
.fs_ver dw ?
|
||||
.root_clus dd ?
|
||||
.fs_info dw ?
|
||||
.bk_boot_sec dw ?
|
||||
.reserved0 db 12 dup(?)
|
||||
.drv_num db ?
|
||||
.reserved1 db ?
|
||||
.boot_sig db ?
|
||||
.volume_id dd ?
|
||||
.volume_label db 11 dup(?)
|
||||
.filsys_type db 8 dup(?)
|
||||
.code db 420 dup(?)
|
||||
.signature dw ?
|
||||
}
|
||||
|
||||
szVfsFatName db 'FATFS', 0
|
||||
|
||||
vfs_fatfs:
|
||||
dd szVfsFatName
|
||||
dd 0
|
||||
dd vops_fatfs
|
||||
|
||||
vops_fatfs:
|
||||
dd 0
|
||||
|
||||
fatfs_init:
|
||||
mov eax, vfs_fatfs
|
||||
call vfs_register
|
||||
ret
|
||||
|
|
|
@ -2,4 +2,50 @@
|
|||
|
||||
STPDFS_SB_MAGIC = 0x44505453
|
||||
STPDFS_SB_REV = 1
|
||||
STPDFS_BSIZE = 512
|
||||
STPDFS_ROOTINO = 1
|
||||
STPDFS_NDIRECT = 7
|
||||
|
||||
STPDFS_CLEANLY_UNMOUNTED = 0
|
||||
STPDFS_ERROR = 1
|
||||
STPDFS_DIRTY = 1
|
||||
|
||||
struc StpdFS_Sb {
|
||||
.magic dd ?
|
||||
.isize dd ?
|
||||
.fsize dd ?
|
||||
.free dd 100 dup(?)
|
||||
.nfree db ?
|
||||
.rev db ?
|
||||
.state dw ?
|
||||
.time dq ?
|
||||
}
|
||||
DEFN StpdFS_Sb
|
||||
|
||||
struc StpdFS_Inode {
|
||||
.mode dw ?
|
||||
.nlink dw ?
|
||||
.uid dw ?
|
||||
.gid dw ?
|
||||
.flags dw ?
|
||||
.size dd ?
|
||||
.zones dd (STPDFS_NDIRECT + 3) dup(?)
|
||||
.actime dq ?
|
||||
.modtime dq ?
|
||||
}
|
||||
DEFN StpdFS_Inode
|
||||
|
||||
szVfsStpdFSName db 'StupidFS', 0
|
||||
|
||||
vops_stpdfs:
|
||||
dd 0
|
||||
|
||||
vfs_stpdfs:
|
||||
dd szVfsStpdFSName
|
||||
dd 0
|
||||
dd vops_stpdfs
|
||||
|
||||
stpdfs_init:
|
||||
mov eax, vfs_stpdfs
|
||||
call vfs_register
|
||||
ret
|
||||
|
|
57
kernel/fs/xv6fs.inc
Normal file
57
kernel/fs/xv6fs.inc
Normal file
|
@ -0,0 +1,57 @@
|
|||
;; File: xv6fs.inc
|
||||
;;
|
||||
;; Usefull links:
|
||||
;; - <https://github.com/mit-pdos/xv6-riscv/blob/riscv/kernel/fs.h>
|
||||
;; - <xv6 book at https://pdos.csail.mit.edu/6.1810/2023/xv6/book-riscv-rev3.pdf>
|
||||
|
||||
XV6FS_BSIZE = 1024
|
||||
XV6FS_ROOTINO = 1
|
||||
XV6FS_MAGIC = 0x10203040
|
||||
XV6FS_NDIRECT = 12
|
||||
XV6FS_NINDIRECT = (XV6FS_BSIZE / 4)
|
||||
XV6FS_MAXFILE = (XV6FS_NDIRECT + XV6FS_NINDIRECT)
|
||||
XV6FS_IPB = (XV6FS_BSIZE / 64)
|
||||
XV6FS_DIRSIZE = 14
|
||||
|
||||
struc Xv6FS_Sb {
|
||||
.magic dd ?
|
||||
.size dd ?
|
||||
.nblock dd ?
|
||||
.ninodes dd ?
|
||||
.nlog dd ?
|
||||
.nlogstart dd ?
|
||||
.inodestart dd ?
|
||||
.bmapstart dd ?
|
||||
}
|
||||
DEFN Xv6FS_Sb
|
||||
|
||||
struc Xv6FS_Inode {
|
||||
.type dw ?
|
||||
.major dw ?
|
||||
.minor dw ?
|
||||
.nlink dw ?
|
||||
.size dd ?
|
||||
.addrs dd (XV6FS_NDIRECT + 1) dup(?)
|
||||
}
|
||||
DEFN Xv6FS_Inode
|
||||
|
||||
struc Xv6FS_Dirent {
|
||||
.inum dw ?
|
||||
.name db XV6FS_DIRSIZE dup(?)
|
||||
}
|
||||
|
||||
szVfsXv6FSName db 'xv6FS', 0
|
||||
|
||||
vops_xv6fs:
|
||||
dd 0
|
||||
|
||||
vfs_xv6fs:
|
||||
dd szVfsXv6FSName
|
||||
dd 0
|
||||
dd vops_xv6fs
|
||||
|
||||
xv6fs_init:
|
||||
mov eax, vfs_xv6fs
|
||||
call vfs_register
|
||||
ret
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
format binary
|
||||
|
||||
include 'const.inc'
|
||||
include 'sys/macro.inc'
|
||||
include 'sys/bootinfo.inc'
|
||||
include 'sys/cpu.inc'
|
||||
|
||||
|
@ -64,6 +65,8 @@ kmain:
|
|||
|
||||
call pit_init
|
||||
|
||||
call vfs_init
|
||||
|
||||
mov eax, SYSCALL_EXIT
|
||||
int 0x42
|
||||
|
||||
|
@ -81,6 +84,11 @@ kmain:
|
|||
call klog
|
||||
jmp .halt
|
||||
|
||||
include 'dev/at/cmos.inc'
|
||||
include 'dev/at/pit.inc'
|
||||
include 'dev/at/kbd.inc'
|
||||
include 'dev/at/cga.inc'
|
||||
include 'dev/at/floppy.inc'
|
||||
include 'klog.inc'
|
||||
include 'dev/console.inc'
|
||||
include 'mm/mm.inc'
|
||||
|
@ -90,10 +98,10 @@ kmain:
|
|||
include 'isr.inc'
|
||||
include 'idt.inc'
|
||||
include 'pic.inc'
|
||||
include 'dev/at/pit.inc'
|
||||
include 'dev/at/kbd.inc'
|
||||
include 'dev/at/cga.inc'
|
||||
include 'dev/at/floppy.inc'
|
||||
include 'vfs.inc'
|
||||
include 'fs/fat.inc'
|
||||
include 'fs/stpdfs.inc'
|
||||
include 'fs/xv6fs.inc'
|
||||
|
||||
|
||||
szMsgKernelAlive db "Kernel (", VERSION_FULL , ") is alive", 0
|
||||
|
|
6
kernel/sys/macro.inc
Normal file
6
kernel/sys/macro.inc
Normal file
|
@ -0,0 +1,6 @@
|
|||
macro DEFN x {
|
||||
virtual at 0
|
||||
x x
|
||||
sizeof.#x:
|
||||
end virtual
|
||||
}
|
|
@ -5,6 +5,13 @@
|
|||
;;
|
||||
|
||||
struc VFS {
|
||||
.name dd ?
|
||||
.next dd ?
|
||||
.op dd ?
|
||||
}
|
||||
DEFN VFS
|
||||
|
||||
struc Mount {
|
||||
.next dd ?
|
||||
.op dd ?
|
||||
.vnodes dd ?
|
||||
|
@ -23,6 +30,7 @@ struc VFSOps {
|
|||
.vget dd ?
|
||||
}
|
||||
|
||||
;;
|
||||
VNODE_TYPE_NON = 0x0
|
||||
VNODE_TYPE_REG = 0x1
|
||||
VNODE_TYPE_DIR = 0x2
|
||||
|
@ -32,6 +40,7 @@ VNODE_TYPE_LNK = 0x5
|
|||
VNODE_TYPE_SOCK = 0x6
|
||||
VNODE_TYPE_BAD = 0x7
|
||||
|
||||
;; Struc: VNode
|
||||
struc VNode {
|
||||
.flag dw ?
|
||||
.refcount dw ?
|
||||
|
@ -72,8 +81,29 @@ struc VNodeOps {
|
|||
.brelse dd ?
|
||||
}
|
||||
|
||||
vfs_init:
|
||||
;; Function: vfs_register
|
||||
;;
|
||||
;; In:
|
||||
;; EAX - Pointer to VFS struct
|
||||
;;
|
||||
vfs_register:
|
||||
mov edx, [pVFS]
|
||||
mov [eax + VFS.next], edx
|
||||
mov [pVFS], eax
|
||||
|
||||
mov eax, [eax + VFS.name]
|
||||
push eax
|
||||
mov esi, szMsgVFSRegister
|
||||
call klog
|
||||
ret
|
||||
|
||||
vfs_init:
|
||||
call fatfs_init
|
||||
call stpdfs_init
|
||||
call xv6fs_init
|
||||
ret
|
||||
|
||||
pVFS dd 0
|
||||
pRootFS dd 0
|
||||
|
||||
szMsgVFSRegister db 'VFS: register %s', 0
|
||||
|
|
Loading…
Reference in a new issue