Skip to content

xjunko/riria

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

riria-kernel-x64

image

what this is

this is a very poor attempt at making an operating system, you should take everything that i did here as a what not to do.

what this is not

  • an original project, most of the kernel wouldn't even work without me referencing other osdev projects.

building

you need:

- git
- make
- qemu
- x86_64-elf-gcc
- x86_64-riria-gcc (this one is not publicly available, it's on my self-hosted git repo)

to build the kernel just run

make run

that should get it working... in the event that it doesn't, use sync, it forces userspace/initramfs to be rebuilt

make sync run

it is also recommended to use clean as well, the compilation will happen in /tmp (which i hoped you set up to be ram)

make clean sync run

kernel is compiled and tested with Arch Linux (btw), so if youre using something similar, it should work :D

things that work:

kernel

  • gdt/idt/irq/isr
    • GDT INIT... OK! /j
    • as far as i can tell, these part of the CPU code is more or less safe now.
  • syscall
    • exit, open, close, read, write, mmap, unmap, get_thread_id, write_fs_base
    • apparently this is enough to get a DOOM port running, so there's that.
  • pmm + vmm + paging
    • pmm, vmm and the paging are mostly based off Arikoto's, which are then modified to work with this kernel
  • malloc (heap)
    • we have kmalloc, kmalloc_phys and kfree
  • vfs
    • devfs, tarfs
    • open, close, read, write, seek, mmap, exists
  • PCI
    • ac97 audio driver which somewhat works
  • scheduling
    • super basic singly linked list round robin scheduling, good enough.

userspace

  • program execution
    • programs now run (somewhat) properly in userspace now :D
  • proper libc
    • riria's userspace uses mlibc as it's libc, pretty cool!
  • tooling
    • binutils and gcc has been ported, we use these now to compile userspace applications.

things that doesnt work:

kernel

  • filesystem
    • ext2 would be nice to have
    • pipe would be nice to have
  • multithreading
    • there is no support for multi-core
  • syscalls
    • lots of syscalls are still not implemented, but basic stuff works mostly fine.
  • scheduling/process
    • it would be nice to have a multiple list for waiting/ready/reap processes.
    • a lot of the code written was hacked in, i still dont like it.
  • stability
    • there is some weird bug with userspace shell's play command, it detects stack smashing a few seconds in, dunno what it was. fixed (i think), apparently my IRQ_OFF/RES/ON implementation was wrong and so theres race condition everywhere, userspace seems to be a lot more stable now :D

userspace

  • programs
    • it would be nice to have more stuff ported in to the userspace, maybe one day we will have a desktop enviroment :D (a wm would be cool)
  • process
    • forking

... and thousand other stuff that i don't remember and know yet.

third-party

  • [Limine] - the x86_64 branch uses Limine as it's bootloader, makes everything much easier
  • [Flanterm] - this is what we used for the /dev/fb0 console output
  • [mlibc] - quite possibly the easiest libc to port ever

license:

ISC License

About

a monolithic x86_64 kernel written in c

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published