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
PenguOS: 32-bit x86 operating system from scratch
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
- BIOS: Loads sector 0 to 0x7C00
- Stage 1: INT 13h extended read: 8 sectors → 0x7E00
- Stage 2: VBE mode → GDT → protected mode → ATA PIO kernel load to 1 MB
- Kernel: Serial → IDT → PIC → PMM → paging → salloc → VBE → mouse → STI → FPU
- Userland-ish: Shell, graphics, threads, 3D renderer
Timeline
- "Pengu says hello to world!!" (GRUB-booted kernel)
- Keyboard driver + shell
- Paging + physical memory manager
- VGA graphics, mouse driver
- ATA disk read/write
- Preemptive multithreading with context switching
- Own two-stage bootloader replaces GRUB
- Bitmap file system
- VBE mode enumeration
- VBE linear framebuffer complete
- Full FPU support
- .obj parser
- First .obj rendered
- 3D rotation
- 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
| Languages | C, ARM Thumb-2 assembly (GAS), x86 assembly (NASM), Python, Bash |
|---|---|
| Embedded | STM32F4 / Cortex-M4 at register level, RCC / clock tree, GPIO, USART, I2C, SysTick, Startup code & linker scripts |
| Hardware | KiCad schematic & PCB layout, Buck + LDO power design, Datasheet-driven bring-up |
| Debug & Tools | GDB, OpenOCD, SWD / CMSIS-DAP, QEMU, arm-none-eabi, GCC, Make, Git |
| Kernel | x86 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.