Skip to content
View karangandhi-projects's full-sized avatar

Block or report karangandhi-projects

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don't include any personal information such as legal names or email addresses. Markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse

Hi, I'm Karan 👋

Embedded / Firmware Engineer · Linux Drivers · STM32 / FreeRTOS · CAN · SPI / I2C · Bootloaders

👨‍💻 What I like building

I enjoy working close to the hardware–software boundary:

  • Linux kernel modules and virtual drivers
  • Bare-metal and RTOS firmware on STM32 (HAL + FreeRTOS)
  • Communication stacks (CAN, UART, SPI, I²C)
  • Bootloaders, memory maps, and firmware startup flows
  • Debug tooling, logging frameworks, and CLIs that make embedded systems observable

Most of my repositories are structured as learning-friendly, phase-based projects with clean documentation, so others can follow the evolution of the system—not just the final code.

🚀 Highlighted projects

A step-by-step Linux virtual Ethernet driver (vnet0) with TX/RX rings, NAPI polling, ethtool support, statistics, and a clear multi-phase roadmap. Designed to mirror how real NIC drivers are structured and debugged.

Tech: C, Linux kernel, net_device, NAPI, ethtool, CI

A modular, low-power sensor hub on STM32F446RE that demonstrates real-world protocol usage and driver abstraction.

  • Cooperative scheduler with task manager
  • Power-mode–aware sensor sampling
  • UART CLI + live logging dashboard
  • Sensor abstraction layer with real I²C and SPI backends
    • TSL2591 (I²C light sensor)
    • BME280 (SPI environmental sensor)
  • Clean architecture, flow diagrams, and phase-based docs

This project was built specifically to demonstrate SPI/I²C driver design, integration, and testing in a production-style firmware layout.

Tech: Embedded C, STM32 HAL, SPI, I²C, UART, low-power design, firmware architecture

A virtual automotive ECU on STM32F446RE using FreeRTOS, CAN loopback telemetry, UART CLI + live dashboard, and a custom bootloader. Designed as a base for OTA and firmware update experiments.

Tech: C, STM32 HAL, FreeRTOS, CAN, UART, bootloader design, CI

A modular STM32F4 ECU-style firmware with FreeRTOS, CAN, UART CLI, and a simple physics-based vehicle model. Focuses on clean separation of drivers, tasks, and application logic.

Tech: C, STM32F4, FreeRTOS, CAN, embedded architecture

An STM32 NUCLEO-F446RE practice sandbox featuring interrupt-driven UART, CLI tooling, multithreading, and virtual sensors. Used to prototype and validate ideas before moving them into larger projects.

Tech: C, STM32, FreeRTOS, drivers, UART/CLI

A basic pseudo character device driver implementing open/close/read/write/lseek for multiple devices—useful for understanding Linux file operations and driver lifecycles.

Tech: C, Linux kernel, character drivers

🛠️ Tech stack & tools

Languages

  • C (embedded & kernel), C++
  • Python (tooling, analysis scripts)
  • Bash / Make

Embedded / Firmware

  • STM32 (F4 series), NUCLEO boards
  • STM32 HAL, FreeRTOS
  • Bootloaders, linker scripts, memory maps
  • CAN, UART, SPI, I²C, GPIO, timers, interrupts
  • Low-power design and power-mode management

Linux / Drivers

  • Linux kernel modules (network + character drivers)
  • NAPI, TX/RX rings, ethtool
  • Driver bring-up, testing, and debugging

Tooling & Workflow

  • STM32CubeIDE, arm-none-eabi-gcc
  • GitHub Actions CI
  • Doxygen, Markdown docs
  • Git, PR-based workflows

📚 What I’m exploring next

  • Deeper power-state integration (STOP/SLEEP entry & wakeup paths)
  • Firmware update flows (UART/CAN flashing, image headers, rollback)
  • More advanced driver observability (CLI-driven introspection)
  • Scaling sensor/driver abstractions toward production-grade layouts

🤝 Connect

If any of these projects help you learn embedded systems or Linux driver development, feel free to open an issue, suggest improvements, or ⭐ a repo.

Pinned Loading

  1. vnet-driver vnet-driver Public

    A step-by-step Linux virtual network driver (vnet0) with Doxygen docs, TX/RX rings, NAPI, ethtool, and userspace backend.

    C

  2. stm32-smart-sensor-hub stm32-smart-sensor-hub Public

    Smart, low-power sensor hub for STM32F446RE with modular sensor APIs, dynamic power-mode sampling, cooperative scheduler, UART CLI, and full documentation.

    C 1

  3. mini-ecu-v2 mini-ecu-v2 Public

    Virtual vehicle ECU on STM32F446RE with FreeRTOS, CAN loopback telemetry, UART CLI + live dashboard, and logging — base for custom bootloader & OTA experiments.

    C 1

  4. stm32-virtual-vehicle-ecu stm32-virtual-vehicle-ecu Public

    A modular STM32F4 virtual vehicle ECU with FreeRTOS, CAN bus, UART CLI, and a physics-based vehicle model.

    C 1

  5. embedded-comeback-playground embedded-comeback-playground Public

    STM32 NUCLEO-F446RE FreeRTOS project with interrupt-driven UART, CLI, multithreading, and modular virtual sensor architecture. A complete embedded-systems comeback/practice project using STM32CubeI…

    C 1

  6. Pseudo-Character-Device-Driver Pseudo-Character-Device-Driver Public

    A basic pseudo character device driver with n devices that mimics a real character driver with open, close, read, write and lseek operations

    Batchfile