Compare commits

...

2 commits

Author SHA1 Message Date
d0p1 🏳️‍⚧️ 949fb48523 chore: add code of conduct 2024-07-16 08:29:32 +02:00
d0p1 🏳️‍⚧️ 18c807d210 chore: work on VFS (wip)
Refs: #24
2024-07-16 08:29:16 +02:00
11 changed files with 319 additions and 19 deletions

35
CODE_OF_CONDUCT.md Normal file
View file

@ -0,0 +1,35 @@
# StupidOS Code of Conduct
The StupidOS community has always worked to be a welcoming and respectful community, and we want to ensure that doesn't change as we grow and evolve. To that end, we have a few ground rules that we ask people to adhere to:
- be friendly and patient,
- be welcoming,
- be considerate,
- be respectful,
- be careful in the words that you choose and be kind to others,
- when we disagree, try to understand why.
This isn't an exhaustive list of things that you can't do. Rather, take it in the spirit in which it's intended - a guide to make it easier to communicate and participate in the community.
This code of conduct applies to all spaces managed by the StupidOS project. This includes online chat, mailing lists, bug trackers, StupidOS events such as the developer meetings and socials, and any other forums created by the project that the community uses for communication. It applies to all of your communication and conduct in these spaces, including emails, chats, things you say, slides, videos, posters, signs, or even t-shirts you display in these spaces. In addition, violations of this code outside these spaces may, in rare cases, affect a person's ability to participate within them, when the conduct amounts to an egregious violation of this code.
If you believe someone is violating the code of conduct, we ask that you report it by emailing [conduct@stupidos.d0p1.eu](mailto:conduct@stupidos.d0p1.eu).
- **Be friendly and patient.**
- **Be welcoming.** We strive to be a community that welcomes and supports people of all backgrounds and identities. This includes, but is not limited to members of any race, ethnicity, culture, national origin, color, immigration status, social and economic class, educational level, sex, sexual orientation, gender identity and expression, age, size, family status, political belief, religion or lack thereof, and mental and physical ability.
- **Be considerate.** Your work will be used by other people, and you in turn will depend on the work of others. Any decision you take will affect users and colleagues, and you should take those consequences into account. Remember that we're a world-wide community, so you might not be communicating in someone else's primary language.
- **Be respectful.** Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. It's important to remember that a community where people feel uncomfortable or threatened is not a productive one. Members of the StupidOS community should be respectful when dealing with other members as well as with people outside the StupidOS community.
- **Be careful in the words that you choose and be kind to others.** Do not insult or put down other participants. Harassment and other exclusionary behavior aren't acceptable. This includes, but is not limited to:
- Violent threats or language directed against another person.
- Discriminatory jokes and language.
- Posting sexually explicit or violent material.
- Posting (or threatening to post) other people's personally identifying information ("doxing").
- Personal insults, especially those using racist or sexist terms.
- Unwelcome sexual attention.
- Advocating for, or encouraging, any of the above behavior.
- **In general, if someone asks you to stop, then stop.** Persisting in such behavior after being asked to stop is considered harassment.
- **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time and StupidOS is no exception. It is important that we resolve disagreements and differing views constructively. Remember that we're different. The strength of StupidOS comes from its varied community, people from a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesn't mean that they're wrong. Don't forget that it is human to err and blaming each other doesn't get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes.
---
*This text is based on the [FreeBSD Code of Conduct](https://www.freebsd.org/internal/code-of-conduct/), which in turn is based on the [LLVM Project's draft CoC](https://llvm.org/docs/CodeOfConduct.html), which in turn is based on the [Django Project Code of Conduct](https://www.djangoproject.com/conduct/), which is in turn based on wording from the Speak Up! project.*

View file

@ -17,7 +17,11 @@ SRCS = kernel.asm \
dev/at/pit.inc \ dev/at/pit.inc \
dev/at/cga.inc \ dev/at/cga.inc \
dev/at/kbd.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 .PHONY: all
all: $(KERNEL) all: $(KERNEL)

View file

@ -1,13 +1,58 @@
;; File: cmos.inc ;; File: cmos.inc
;; ;;
;; > +-------------------------------- ;; > +------+-------------------------+
;; > | 0x00 | RTC seconds ;; > | 0x00 | RTC seconds |
;; > +--------------- ;; > +------+-------------------------+
;; > | 0x01 | RTC seconds alarm ;; > | 0x01 | RTC seconds alarm |
;; > +-------------------- ;; > +------+-------------------------+
;; > | 0x02 | RTC minutes ;; > | 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_COMMAND = 0x70
CMOS_DATA = 0x71 CMOS_DATA = 0x71

View file

@ -18,4 +18,7 @@ console_read:
call lock_release call lock_release
ret ret
console_init:
ret
uConsoleLock dd 0 uConsoleLock dd 0

View file

@ -6,3 +6,5 @@ struc Device {
.probe dd ? .probe dd ?
} }
dev_init:
ret

View file

@ -1,9 +1,73 @@
;; File: fat.inc ;; File: fat.inc
;;
;; Usefull links:
;; - <Spec at https://academy.cba.mit.edu/classes/networking_communications/SD/FAT.pdf>
FAT_SECTOR_SIZE = 512 FAT_SECTOR_SIZE = 512
FAT_MDIR_SIZE = 32 FAT_MDIR_SIZE = 32
struc FatBootSector { struc FATFS_BootSectorBase {
.jump db 3 dup(?) .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

View file

@ -1,5 +1,51 @@
;; File: stpdfs.inc ;; File: stpdfs.inc
STPDFS_SB_MAGIC = 0x44505453 STPDFS_SB_MAGIC = 0x44505453
STPDFS_SB_REV = 1 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
View 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

View file

@ -2,6 +2,7 @@
format binary format binary
include 'const.inc' include 'const.inc'
include 'sys/macro.inc'
include 'sys/bootinfo.inc' include 'sys/bootinfo.inc'
include 'sys/cpu.inc' include 'sys/cpu.inc'
@ -64,6 +65,8 @@ kmain:
call pit_init call pit_init
call vfs_init
mov eax, SYSCALL_EXIT mov eax, SYSCALL_EXIT
int 0x42 int 0x42
@ -81,6 +84,11 @@ kmain:
call klog call klog
jmp .halt 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 'klog.inc'
include 'dev/console.inc' include 'dev/console.inc'
include 'mm/mm.inc' include 'mm/mm.inc'
@ -90,10 +98,10 @@ kmain:
include 'isr.inc' include 'isr.inc'
include 'idt.inc' include 'idt.inc'
include 'pic.inc' include 'pic.inc'
include 'dev/at/pit.inc' include 'vfs.inc'
include 'dev/at/kbd.inc' include 'fs/fat.inc'
include 'dev/at/cga.inc' include 'fs/stpdfs.inc'
include 'dev/at/floppy.inc' include 'fs/xv6fs.inc'
szMsgKernelAlive db "Kernel (", VERSION_FULL , ") is alive", 0 szMsgKernelAlive db "Kernel (", VERSION_FULL , ") is alive", 0

6
kernel/sys/macro.inc Normal file
View file

@ -0,0 +1,6 @@
macro DEFN x {
virtual at 0
x x
sizeof.#x:
end virtual
}

View file

@ -5,6 +5,13 @@
;; ;;
struc VFS { struc VFS {
.name dd ?
.next dd ?
.op dd ?
}
DEFN VFS
struc Mount {
.next dd ? .next dd ?
.op dd ? .op dd ?
.vnodes dd ? .vnodes dd ?
@ -23,6 +30,7 @@ struc VFSOps {
.vget dd ? .vget dd ?
} }
;;
VNODE_TYPE_NON = 0x0 VNODE_TYPE_NON = 0x0
VNODE_TYPE_REG = 0x1 VNODE_TYPE_REG = 0x1
VNODE_TYPE_DIR = 0x2 VNODE_TYPE_DIR = 0x2
@ -32,6 +40,7 @@ VNODE_TYPE_LNK = 0x5
VNODE_TYPE_SOCK = 0x6 VNODE_TYPE_SOCK = 0x6
VNODE_TYPE_BAD = 0x7 VNODE_TYPE_BAD = 0x7
;; Struc: VNode
struc VNode { struc VNode {
.flag dw ? .flag dw ?
.refcount dw ? .refcount dw ?
@ -72,8 +81,29 @@ struc VNodeOps {
.brelse dd ? .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 ret
vfs_init:
call fatfs_init
call stpdfs_init
call xv6fs_init
ret
pVFS dd 0
pRootFS dd 0 pRootFS dd 0
szMsgVFSRegister db 'VFS: register %s', 0