Discover how Linux exposes raw USB device data, even without a driver. This article details how to use /dev/hidraw and the HID report descriptor to reverse-engineer and read real-time data from a UPS.
Walkthrough for a small embedded system based on ATmega328p which controls a PC cooler fan. The focus of this experiment is on using only open-source CLI software tooling for the solution. Additionally, no development boards were used, just the bare microcontroller, which should be helpful in transitioning to building your own boards.
Exploring a minimal implementation of a time-sharing kernel on RISC-V, implemented in Zig, on top of OpenSBI.
Walkthrough for how the Mrav CPU project handles RTL simulation and other testing aspects.
Quick overview of how Go tools for the Mrav custom CPU are run inside a browser by leveraging WASM. The project is built with Bazel using Go rules.
Overview of how SystemVerilog RTL code is generated in the build flow for the Mrav custom CPU core.
Deep-dive into software tooling for a custom CPU platform Mrav.
Practical example of using Bazel to build an embedded C program, bare-metal. Concrete example with AVR ATmega328p.
Explainer for how Mrav CPU assembler was created. Shortest path towards a small, working assembler for a custom ISA.
First part of the series explaining the development of a custom CPU called Mrav and the tooling for it. Lessons learned from working on Google TPU chips.
Walkthrough for cross compiling a mixed C and Go binary for another platform using cgo and Bazel. Example is done with x86_64/Linux compiling for RISC-V/Linux.
Explore how to run JavaScript directly on bare metal, like microcontrollers. This post shows you how to get JavaScript code executing on embedded hardware without an operating system, opening up new ways to program these chips. The example is done on a RISC-V VM.
Guide to implementing a C standard library for bare metal hardware using Newlib, enabling powerful functions like printf and malloc without relying on an operating system. This step-by-step guide demonstrates how to configure and integrate Newlib on RISC-V architecture, showing you how to redirect standard I/O through UART for embedded systems development.
End-to-end documentation of a journey from no PCB experience to fabricating my own Linux-ready system that can boot the latest mainline kernel. This article is the recommended reading for someone building their first embedded Linux board. F1C100s SoC is used for this sample board.
A guide on using embedded Linux to implement common USB devices, in this case, mass storage device. We'll use mainline Linux on Raspberry Pi Zero, and with 10-15 lines of shell scripting, we'll turn a Raspberry Pi into a flash drive.
Introduction to implementing USB devices. Minimal overview of hardware and software with an example with STM32 microcontroller. Also contains an index to very detailed guides for more information.
Learn how to make a Linux-capable embedded system for less than $5 dollars. Includes an in-depth analysis of how to build and deploy U-boot, with emphasis on the modern U-boot FIT images.
Learn how to utilize Raspberry Pi and Linux kernel to make your own custom mini computer from scratch, capable of interacting with the user through a keyboard and a screen.
Learn how to utilize Bazel's toolchains and platforms to cross-compile C and C++ for another architecture and OS. The example used is cross-compiling for a bare-metal RISC-V machine.
A guide on building a Raspberry Pi image from scratch using the latest mainline kernel for embedded purposes. Only a few manually built files are involved along with the Linux GPIO drivers to achieve LED flashing.
A detailed example of RISC-V interrupts in C through OpenSBI timer infrastructure.