Posts tagged #embedded

  1. How to reverse engineer USB HID on Linux

    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.

  2. PC cooler control with a $2 microcontroller, no development board

    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.

  3. Writing an operating system kernel from scratch

    Exploring a minimal implementation of a time-sharing kernel on RISC-V, implemented in Zig, on top of OpenSBI.

  4. Custom CPU simulation and testing

    Walkthrough for how the Mrav CPU project handles RTL simulation and other testing aspects.

  5. Running Go tools in a browser

    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.

  6. RTL generation for custom CPU Mrav

    Overview of how SystemVerilog RTL code is generated in the build flow for the Mrav custom CPU core.

  7. Mrav custom CPU software tooling

    Deep-dive into software tooling for a custom CPU platform Mrav.

  8. Embedded bare-metal C with Bazel and AVR

    Practical example of using Bazel to build an embedded C program, bare-metal. Concrete example with AVR ATmega328p.

  9. Creating an assembler for a custom CPU

    Explainer for how Mrav CPU assembler was created. Shortest path towards a small, working assembler for a custom ISA.

  10. Making a custom CPU

    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.

  11. Cross-compiling C and Go via cgo with Bazel

    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.

  12. Bare metal JavaScript on RISC-V

    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.

  13. Bare metal printf - C standard library without OS

    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.

  14. Making my first embedded Linux system

    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.

  15. Make your own USB storage device using embedded Linux

    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.

  16. Making USB devices - end to end guide to your first gadget

    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.

  17. Run mainline Linux on $5 dollar hardware

    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.

  18. Making a mini computer from scratch with Raspberry Pi and Linux

    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.

  19. Cross compiling C and C++ with Bazel

    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.

  20. Take full control of Raspberry Pi! 10 MB mainline Linux image for embedded

    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.

  21. RISC-V interrupts with a timer example

    A detailed example of RISC-V interrupts in C through OpenSBI timer infrastructure.