rajveerchaudhari.com · open the BIOS version → · plain version

Rajveer Chaudhari

Firmware & Low-Level Systems. I write the code that runs before everything else.

rajveer@rajveerchaudhari.com · GitHub · Resume (PDF)

Open to firmware / embedded internships

Projects: MetalBird · PenguOS · Linux kernel · Debug logs

PenguOS: 32-bit x86 operating system from scratch

Dec 2025 – present · C · x86 asm (NASM) · QEMU · GDB · repo · boot it in the browser

A bootable 32-bit OS with no external libraries: my own two-stage bootloader, memory manager, drivers, preemptive scheduler and a software 3D renderer.

  • Boot & CPU: Two-stage bootloader: real → protected mode, GDT, VBE mode selection, kernel loaded from disk with an ATA PIO reader. IDT with handlers for all 32 CPU exceptions and remapped PIC IRQs.
  • Memory: Bitmap physical page allocator, two-level paging, and salloc, my own kernel heap allocator.
  • Drivers: PS/2 keyboard (Shift/Caps/Ctrl) and mouse (3-byte packets), ATA PIO disk with a sector-bitmap file store, PIT, x87 FPU, UART serial logging.
  • Scheduling: PIT-driven preemptive context switching between kernel threads.
  • Graphics: VGA mode 13h and VBE linear-framebuffer graphics with double buffering.
  • 3D engine: Parses .obj models (vertices, normals, UVs) embedded in the kernel image and renders them with perspective projection and rotation, all on the x87 FPU.

Boot path

  1. BIOS: Loads sector 0 to 0x7C00
  2. Stage 1: INT 13h extended read: 8 sectors → 0x7E00
  3. Stage 2: VBE mode → GDT → protected mode → ATA PIO kernel load to 1 MB
  4. Kernel: Serial → IDT → PIC → PMM → paging → salloc → VBE → mouse → STI → FPU
  5. Userland-ish: Shell, graphics, threads, 3D renderer

Timeline

  • 2025-12-02 "Pengu says hello to world!!" (GRUB-booted kernel)
  • 2025-12-08 Keyboard driver + shell
  • 2025-12-12 Paging + physical memory manager
  • 2025-12-15 VGA graphics, mouse driver
  • 2025-12-23 ATA disk read/write
  • 2026-01-14 Preemptive multithreading with context switching
  • 2026-01-18 Own two-stage bootloader replaces GRUB
  • 2026-01-31 Bitmap file system
  • 2026-03-13 VBE mode enumeration
  • 2026-03-19 VBE linear framebuffer complete
  • 2026-03-25 Full FPU support
  • 2026-03-29 .obj parser
  • 2026-04-04 First .obj rendered
  • 2026-04-10 3D rotation
  • 2026-06-02 GUI skeleton (in progress)

About

I'm a CS undergrad who likes the layer where software meets silicon. I've written an x86 operating system from the bootloader up, designed a drone flight-controller PCB and I'm bringing it up with hand-written ARM assembly, and I've had patches accepted into the mainline Linux kernel.

I learn by building the whole stack myself: no HAL, no RTOS, no external libraries. Then I debug it with GDB over SWD, a UART console and a lot of reference-manual reading until I can explain every cycle.

  • MetalBird (PCB + bare-metal ARM): Flight-controller PCB I designed and had fabricated, brought up with hand-written Cortex-M4 assembly.
  • PenguOS (x86 OS from scratch): Bootloader, paging, drivers, scheduler and a software 3D engine. It boots right here in your browser.
  • Linux kernel (4 commits in mainline): IIO and staging patches applied by Jonathan Cameron and Greg Kroah-Hartman.

Skills

LanguagesC, ARM Thumb-2 assembly (GAS), x86 assembly (NASM), Python, Bash
EmbeddedSTM32F4 / Cortex-M4 at register level, RCC / clock tree, GPIO, USART, I2C, SysTick, Startup code & linker scripts
HardwareKiCad schematic & PCB layout, Buck + LDO power design, Datasheet-driven bring-up
Debug & ToolsGDB, OpenOCD, SWD / CMSIS-DAP, QEMU, arm-none-eabi, GCC, Make, Git
Kernelx86 protected mode, paging, interrupts, Linux IIO subsystem, Mailing-list patch workflow

Education

B.Tech CSE, IIIT Vadodara (International Campus Diu), Aug 2024 – May 2028. Coursework: Operating Systems, Computer Organization, Digital Logic & Electronics, Computer Networks.

Rajveer Chaudhari · rajveer@rajveerchaudhari.com · BIOS version · plain version · llms.txt