Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jasonbrave/panicos
A simple x86 operating system with graphical user space
https://github.com/jasonbrave/panicos
c-standard-library dynamic-linking elf elf-loader fat32 kernel mbr multiboot operating-system osdev pci pci-express pcie stl usb vfs virtio virtio-gpu widget-toolkit x86
Last synced: 10 days ago
JSON representation
A simple x86 operating system with graphical user space
- Host: GitHub
- URL: https://github.com/jasonbrave/panicos
- Owner: JasonBrave
- License: gpl-3.0
- Created: 2020-06-25T22:33:54.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-01-28T18:57:03.000Z (9 months ago)
- Last Synced: 2024-10-11T03:10:10.293Z (27 days ago)
- Topics: c-standard-library, dynamic-linking, elf, elf-loader, fat32, kernel, mbr, multiboot, operating-system, osdev, pci, pci-express, pcie, stl, usb, vfs, virtio, virtio-gpu, widget-toolkit, x86
- Language: C
- Homepage:
- Size: 604 KB
- Stars: 54
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: COPYING
Awesome Lists containing this project
README
# PanicOS
A simple operating system for 32-bits x86 PCs.![PanicOS](https://user-images.githubusercontent.com/40355221/144753051-f3bd442b-8f74-4bd6-b399-73bd82aa9b40.png)
## Features
### Kernel
* 32-bits x86 support
* Legacy BIOS and UEFI booting with GRUB2
* SMP
* PAE paging (see [pae](https://github.com/JasonBrave/PanicOS/tree/pae) branch)
* ELF file loading
* Loadable kernel modules
* Parallel ATA IDE Controller and Disk driver
* QEMU Bochs display driver
* PCI Bus support
* PCI Express ECAM support
* PCI MSI and MSI-X interrupt support
* PS/2 keyboard and mose driver
* USB Bus support
* USB Hub driver
* UHCI USB controller driver
* VirtIO block device and GPU device driver
* PC platform RTC and UART driver
* Virtual filesystem
* FAT32 filesystem support
* Master Boot Record partition table support
* Hardware abstraction layer abstracts block device, display device and HID device
* Reboot and shutdown### User Space
* Dynamic linking
* C++ global constructor and destructor
* [C Standard Library](https://github.com/JasonBrave/PanicOS/tree/master/library/libc)
* [C++ Standard Library including STL](https://github.com/JasonBrave/PanicOS/tree/master/library/libcpp)
* [C++ object-oriented GUI widget toolkit](https://github.com/JasonBrave/PanicOS/tree/master/library/libgui)
* POSIX emulation library
* Window manager
* Graphical desktop envoironment
* Various user space programs## Build Instructions
A build of gcc and binutils with `i686-elf` target triplet is required. `dosfstools` and `mtools` are also required for creating disk image. QEMU with target i686 or x86-64 is required for emulation
Run `make` to create disk image and kernel image, run `make qemu` to start qemu emulation.
## Directory Structure
* `/boot` Disk image boot sector
* `/ext` Utility for building out-of-tree kernel modules
* `/kernel` Operating System Kernel
* `/kernel/arch/x86` x86 architecture specific code
* `/kernel/common` kernel common used code
* `/kernel/core` Kernel core
* `/kernel/drivers` Kernel built-in device drivers
* `/kernel/filesystem` Kernel build-in filesystem drivers
* `/kernel/hal` Kernel hardware abstraction layer
* `/kernel/proc` Kernel process management
* `/library` User space libraries
* `/library/crt` C Runtime (crt0 and crt1)
* `/library/ld` Dynamic linker
* `/library/libc` C Standard Library
* `/library/libcpp` C++ Standard Library
* `/library/libcpu` CPU abstraction library
* `/library/libgui` C++ GUI widget toolkit library
* `/library/libposix` POSIX emulation library
* `/library/libsys` System call library
* `/library/libwm` Window manager library
* `/module/edu` QEMU EDU device driver
* `/module/hello` Hello World kernel module example
* `/module/modlib` Kernel module support library
* `/module/virtgpu` VirtIO GPU driver
* `/programs/about` Graphical About program
* `/programs/cat` A program to display context of a text file
* `/programs/date` A command line utility to display date and time
* `/programs/desktop` Graphical desktop environment
* `/programs/devmgr` Device manager
* `/programs/dir` A program to list files in a directory
* `/programs/init` Init program
* `/programs/kmod` A tool to load kernel modules
* `/programs/lscpu` An utility to display CPU infomation
* `/programs/lspci` An utility to list PCI (Express) devices
* `/programs/mkdir` A program for creating directories
* `/programs/reboot` A program to reboot computer
* `/programs/rm` A program to delete files
* `/programs/sh` Shell
* `/programs/shutdown` A program to shut down computer
* `/programs/termemu` Graphical terminal emulator
* `/programs/wm` Graphical window manager
* `/share` Non-code data
* `/tools` Tools used in the compiling process