Skip to content

charcuterie-osdev.orgΒ #1590

@JohnDaWalka

Description

@JohnDaWalka

Introduction
Basic Information

Introduction
Required Knowledge
Beginner Mistakes
Getting Started
How To Ask Questions
GCC Cross-Compiler
What Order Should I Make Things In?
Licensing
Tutorials
Frequently Asked Questions
more...
Environment

How kernel, compiler, and C library work together
Using other Languages than C
UEFI and legacy BIOS (PC)
Inline Assembly (including examples)
Object Files and relocation

Bare Bones / Baby Steps

Bare Bones (C and C++)
Ada Bare Bones
C Sharp Bare Bones
D Bare Bones
FreeBasic Bare Bones
Go Bare Bones
Pascal Bare Bones
Limine Bare Bones
The BabyStep Tutorial
more...
Example OS Organization

Meaty Skeleton

Booting and Setup

Boot Sequence
Diskless Booting
The Global Descriptor Table and a GDT Tutorial
Interrupts
Getting Keyboard Input

Testing and Debugging

Troubleshooting
Testing
Unit Testing
How Do I Use A Debugger With My OS
Kernel Debugging
more...
Development

Going Further on x86
Creating an Operating System
Code Management

Compiler Development

What's a compiler?
Making a Compiler (Theory)
Code Generation and Optimization Techniques
Implementing Conditional Statements And Loops
Tail Recursion and Tail Call Optimization
Design Considerations
Kernel Models

Monolithic Kernel
Microkernel
Exokernel and related models
Modular Kernel
more...
Task Models

Monotasking Systems
Multitasking Systems
Real-Time Systems
more...
Memory and Resource Management

Memory management - Overview and Introduction
Segmentation
Paging
Memory Allocation
Page Frame Allocation
Memory Management Unit, or in-depth description of recursive mappings
File Management
File Systems
more...
System Calls

ARM System Calls

Scheduling

Processes and Threads
Context Switching
Scheduling Algorithms
Multiprocessor Scheduling
Blocking Process - processes sleeping and waiting
more...
Process Sychronization

Synchronization Primitives - Semaphores, mutexes, spinlocks et al.
Signals
more...
Inter-Process Communication

Message Passing
Shared Memory
Remote Procedure Call
more...
Resources
Books on OS Development
Academic Papers on theory and design
Assembly
Disk Images with preinstalled GRUB
Deprecated, yet relevant, bits of specifications
Chip Numbers, Acronyms and Things
Resources
more...
Tools
Bootloaders

Bootloader theory
GRUB
Limine
LILO
XOSL
System Commander
Boot Magic
Rolling Your Own Bootloader
more...
Compilers

GCC
Cygwin
MinGW
Dev-C++
DJGPP
Building a GCC Cross-Compiler
Cross-Compiler Successful Builds
Porting GCC to your OS
Calling Conventions
System V ABI
Watcom C/C++
Visual Studio
Visual C++ Runtime
TCC
Smaller C
Other Compilers
more...
Assemblers

GAS (GNU as, part of binutils)
FASM
NASM
YASM
On the difference between AT&T and Intel Opcode syntax
more...
Linkers

LD (GNU ld, part of binutils)
Link Archiver (GNU ar, part of binutils)
Mold (Modern Linker)
more...
Emulators

Bochs
QEMU
Virtual PC
VMware
VirtualBox
SimICS
Lingemu
more...
Working with Disk Images

Disk Images in general, and ...
Loopback Device for Linux, *BSD et al.
hdiutil for MacOS X
Windows Tools
more...
Hardware
The Hardware Category and linked resources
CPU

General

Register Machine Model of Computation
Memory Architecture
Instruction Set Architecture
Historical Notes on CISC and RISC
Execution Architecture
Multiprocessing Architecture
X86
Modes

Real Mode
Protected Mode
Virtual 8086 Mode
x86-64
Other

IA32 Architecture Family
Model Specific Registers (MSRs)
Detecting CPU Speed
Inline Assembly/Examples
CPU Bugs
SSE
Where Can I Find Information About Ports
CPU Registers (x86, x86-64)
more...
ESA/390

Kernel Barebones
Program Status Word
Processing Storage Area Memory Mapping
z/OS DataSet FileSystem
Batch I/O Channel SubSystem
more...
ARM

ARM Overview
Raspberry Pi Bare Bones
Memory

Detecting Memory (x86)
A20 Line or "Why can't I access all my memory?"

IRQs and Exceptions, PIC, NMI, APIC, OPIC

I Can't Get Interrupts Working
The Interrupt Descriptor Table and IDT problems
Interrupt Service Routines (ISRs)
Interrupts
Non Maskable Interrupt (NMI)
APIC
PIC
OPIC
more...
Clocks, Timers and Counters

HPET
APIC timer (per-processor timer)
Programmable Interval Timer (PIT)
The CMOS clock, and its RTC chip
Detecting CPU Speed

Video

Accelerated Graphic Cards
Native Intel graphics
Detecting Colour and Monochrome Monitors?
Printing To Screen in Protected Mode
Text Mode Cursor
Drawing In a Linear Framebuffer
Kernel Stdio Theory
VGA Resources and VGA Hardware documentation
Drawing characters in graphics mode using VGA Fonts
Video Signals And Timing
How to program Bochs' and QEMU's BGA graphics device
more...
Audio

Sound
PC Speaker
Sound Blaster 16
more...
Storage devices

ATA (harddisks)
ATAPI (CD-ROM)
AHCI (SATA native)
DMA
NVMe
Floppy Disk Controller (FDC)
more...
Input/Output

PS/2 Keyboard
Mouse
Serial Ports (primarily RS-232)

Plug and Play

Plug-and-Play (PNP)
PNP Calls In Protected Mode

PCI, USB and things like this ...

PCI
PCI Express
USB
more...
UEFI

UEFI
Systems with broken UEFI implementations

ACPI

ACPI
RSDP
AML
more...
Network cards and communicating devices

Ethernet and other wired networking:
3c90x
Intel 8254x
Ne2000
RTL8139
RTL8169
Intel Ethernet i217
AMD PCnet
Wireless Networking:
802.11 (WiFi standard)
more...
Non-x86 Development

PowerPC
MIPS
Sparc
ARM
RISC-V
more...
Reference Information
Executable File Types

64 bit
ELF
PE
COFF
32 bit
ELF
PE
COFF
16 bit
COM
MZ
NE
more...
Filesystems

FAT Details
Ext2 Details
SFS Details
NTFS Details

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions