r3 | A tiny x86_64 kernel written in Rust
kandi X-RAY | r3 Summary
kandi X-RAY | r3 Summary
r3 is a Rust library. r3 has no bugs, it has no vulnerabilities, it has a Permissive License and it has low support. You can download it from GitHub.
A hobby x86_64 Operating System kernel written in Rust -- with minimal functionalities like preemptive and cooperative multi-tasking, usermode, framebuffer terminal, basic device drivers like -- ATA-PIO (for Disk I/O), PS/2 Keyboard, Serial UART, RTL8139 networking (in progress), file-system built with VFS that supports devfs and ustar, last but not the least - supports somewhat POSIXish basic system calls. The name r3 stands for Revision 3 because this is my third attempt to build a hobby Operating System kernel. The kernel barely works on QEMU as of now and some of the functionalities are not optimal or not perfectly implemented. This is an attempt to keep myself occupied, I am not competing with Linux or other rusty operating systems here on GitHub - in fact I got inspired from these operating systems and read their code-bases to understand various possible methods. (I have given credits to some of the rust OS repositories I looked at.).
A hobby x86_64 Operating System kernel written in Rust -- with minimal functionalities like preemptive and cooperative multi-tasking, usermode, framebuffer terminal, basic device drivers like -- ATA-PIO (for Disk I/O), PS/2 Keyboard, Serial UART, RTL8139 networking (in progress), file-system built with VFS that supports devfs and ustar, last but not the least - supports somewhat POSIXish basic system calls. The name r3 stands for Revision 3 because this is my third attempt to build a hobby Operating System kernel. The kernel barely works on QEMU as of now and some of the functionalities are not optimal or not perfectly implemented. This is an attempt to keep myself occupied, I am not competing with Linux or other rusty operating systems here on GitHub - in fact I got inspired from these operating systems and read their code-bases to understand various possible methods. (I have given credits to some of the rust OS repositories I looked at.).
Support
Quality
Security
License
Reuse
Support
r3 has a low active ecosystem.
It has 70 star(s) with 3 fork(s). There are 3 watchers for this library.
It had no major release in the last 6 months.
There are 0 open issues and 2 have been closed. There are no pull requests.
It has a neutral sentiment in the developer community.
The latest version of r3 is current.
Quality
r3 has no bugs reported.
Security
r3 has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
License
r3 is licensed under the MIT License. This license is Permissive.
Permissive licenses have the least restrictions, and you can use them in most projects.
Reuse
r3 releases are not available. You will need to build from source code and install.
Installation instructions, examples and code snippets are available.
Top functions reviewed by kandi - BETA
kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of r3
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of r3
r3 Key Features
No Key Features are available at this moment for r3.
r3 Examples and Code Snippets
No Code Snippets are available at this moment for r3.
Community Discussions
No Community Discussions are available at this moment for r3.Refer to stack overflow page for discussions.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install r3
Install all the presequites - QEMU, KVM, rust, cargo, xbuild and OVMF
Build the userspace tarfs (requires GCC)
Build and run the Kernel:
Build the userspace tarfs (requires GCC)
Build and run the Kernel:
Support
Basic x86 Interrupts - both exceptions and hardware interrupts.Programmable I/ODescriptor tables like GDT, IDT and TSSLegacy Programmable Interrupt Controller - (PIC) used for handling interrupts initiallyLegacy Programmable Interval Timer - (PIT) used for initial CPU frequency detectionCPUID - CPU features identificationTimestamp Counter (TSC) which is used as the core system timer for events generationLinear Physical Memory Manager - Right not it only allocates, never deallocates (LoL this is the biggest drawback as of now, anyways I am planning to write a slab allocator soon)DMA Manager - Allocates DMA memory regions for drivers like RTL8139Virtual Memory Manager and Paging - Allocate and manage both 4KB pages and 2MB huge-pages.Heap Allocator built on top of VMA, this heap allocator is used by rust to manage it's dynamic structures -- uses a linked list allocator underneath.Higher half kernelACPI and ACPI x2 supportLocal APIC Interrupts supportSymmetric Multi-Processing (SMP) - still in very initial stages (in progress)Peripheral Component Interconnect - legacy mode with Configuration RegistersPS/2 Keyboard DriverUART serial interface driverATA Disk controller - using PIO mode, where data-transfers take CPU cycles. (DMA mode is in planning stage yet)Framebuffer displayRandom Numbers generatorTTY interface using PS/2 and Framebuffer togetherVFS - Virtual File System implementation (Supports only crucial functionalities as of now)Devfs - to manage devices as files (good old UNIX concept - everything is a file)USTAR - A simple TAR file-system with read-only capabilitiesSystem timer and ticks built on top of TSC and LAPIC interruptsMulti-processing - ability to run multiple-processes concurrently (not parallely as of now)Multi-threading - Still in early stages, as of now, a process can have only one threadSoftware based context switching - ability to save and restore thread statesMode switching - From kernel-mode to user-mode and vice-versaNon-blocking I/O - for keyboard as of now (will implement the same for networking and disk I/O soon)Sysv64 ABI for making System callsSystem calls interface - uses legacy/portable int 0x80 software based mechanism.Basic system calls like - read, write, open, close, exit, fstat, lstat, lseek, getpid, getppid, fork, brk, sbrk, ioctl, yield, gettid, sleep, wait, shutdown, reboot, execvp, uname, getrandom, gettime are implemented, these implementations barely work and are not perfectly POSIX.Ability to load ELF files from the file-system and execute them as a process - by following the ELF process layout.Basic networking - (Still in initial stages of development, as of now you can see a half-baked RTL8139 driver implementation)Internal kernel logging via serial port used for debugging
Find more information at:
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page