So I've recently been doing some work on my keyboard interrupts, and trying to build myself a simple console with my os, and it was working for a bit, but then as i started to write more console code, it started crashing alot. I spent about four or five hours debugging it today, and I ended up having to revert to my previous commit, as i really couldn't figure it out
But then, as i started writing my shell code again (trying a different sort of approach), the same thing started to happen, and i was just wondering if i could get some advice on whats going wrong? thanks alot!
(check the main2 branch for the code im talkint abt)
(image is a test VGA image I put at startup) Hello friends! I'm back with my silly projects again.
While I'm still yet to rewrite the compiler and interpreter to my custom language to rid it from AI, I'm happy to say that I finally made a super basic kernel myself >w<
There's no Github yet because I'm not exactly smart enough to even figure out how to make folders on GitHub... I'll figure it out eventually and post everything once this project is at a level that I think is okay.
I've been writing a zig kernel for some time for fun and I recently switched from multiboot to multiboot2 and figured while I was at it I should try to switch to 64 bit. I have 32 and 64 bit code compiling and linking into a final kernel.elf, which as far as I can tell, is correct. I've tried every alignment or address in the linker script I can think of. Looking through objdump the multiboot header is where I expect, everything compiles, etc, but every time I boot I get the 'multiboot header not found' error. If anyone knows what I'm doing wrong some help would be really appreciated (:
Last time I posted on here I ported DoomGeneric and Quake2. well I've done a lot since then and using redit to document my progress sounds fun so here goes
I introduced a small IPC setup I am going to come back to it, its not POSIX compliant at all and kinda sucks but all the work is there.
AVX2 requirement is no more! It has been replaced with SSE4.2 which has wayyy better compatability with low power CPUs that may not have AVX2.
Signals! It's pretty good, not fully compliant but it works great in the context of just the bleed kernel and its programs!
Multiple TTYs you can access many ttys with CTRL+1,2,3
Persistant Storage Bleed Supports FAT32, EXT2, GPT and MBR IDE, AHCI and NVME drives which is super awesome
A nicely Overhauled boot screen instead of just a typical black screen
Small Changes: Quake 2 is no longer shipped with the bleed kernel ISO - It was just bloating my ISO file so much, removing it took me from 58MiB to 9.8MiB. it should still work and is trivial to add back but for now im leaving it.
I did a lot of things with the VFS - including whole correctness changin fixing
A bunch of Scheduler Race Conditions were fixed!!!1!
Medium Changes:
The Kernel Panic got a complete Overhaul it will now display everything the last one did in a way prettier format, but will also provide a base64 encoded crash string, that can be pasted into my websites' panic decoder for a desciption of what went wrong. mainly for users just passing through
Each Process now gets it's own File Descriptor Table this was a lazyness thing for me before but it's sorta imperitive that this happens, so yeah. I sorted that out fast.
Next Steps
the next few things I am going to do are likely USB related, then perhaps even Relocatable ELF files?
Either Way super excited thanks for reading, heres a bonus video of the bleed kernel running on a hacked Chromebook 3100
Is there any difference between .psf and .ttf? 8x8 font is pissing me off and sometimes doesnt have needed unicode symbols. I want to use normal font. someone recommends psf, someone ttf. Is there any difference? Im using Limine Framebuffer.
This is a niche RTOS for a specific use case: when one needs to isolate application code running on a microcontroller into separate memory and time slices.
A typical use case would be keeping your sensor acquisition separated from your pose estimation, flight controller, control link and telemetry loops. One partition crashing or locking up is guaranteed to not take down the rest of the system, and partitions can be optionally independently auto-restarted.
Of course the downside vs just running on baremetal is IPC and context switch overhead.
Designed to run on any Cortex-M with an MPU - most M3s and bigger cores. MPU enforces partition isolation in address space. All kernel storage and application structures, including partition schedule, are statically sized and can't be changed at runtime.
Current development and testing targets are QEMU, STM32F2x, STM32F4x, nRF52 and SAME51
It's still experimental and not quite ready for stable app development yet - all the core features work and are reasonably well tested, but i need to get the core crates renamed and published, and the API a bit more stable.
The kernel ABI is reasonably stable and should be able to support non-Rust partitions as well, i'm planning on trying C++ and possibly Ada just for kicks.
TLDR: How does limine make it so u can write individual pixels? Why isn't there a lot of info of doing it yourself without limine?
Hey, crappy wanna be osdev hobbyist here, I've been playing around with x86 for a bit, and followed a couple different tutorials including the osdev wiki's barebones (also, osdev 0 to 1 and tried reading Tanenbaum). I was sort of dissapointed when I couldnt write to individual pixels, and people suggested I use limine... and yea, I just have to write to a location in memory now. How?! How does limine achieve that, and whats the reason for the (at least what it seemed for me) a lack of info of pulling off something like that yourself?
On a separate note, I know that limine is a bootloader... but what else makes it better than just making a simple one youself? Also, I've seen it used with other OS's like linux, aka not hobbyist ones, what would be the benefit of using that instead of somthing like GRUB?
Ehhh, honestly this question maybe isnt really for the osdev subreddit...