RSS Amplifier

Blog

Stefan Gloor's Blog

Hardware, Linux, Embedded Systems

stefan-gloor.chRSS feed ↗34 posts

Latest posts

Patching Pulse Oximeter Firmware

Recently, I came across relatively cheap medical devices: consumer-grade pulse oximeters. These devices clip onto your finger and shine a light through it. By analyzing the light...

Root Shell on Credit Card Terminal

In this project, I started to reverse engineer payment card terminals because they seemed to be an interesting target for security research, given the high stakes involved. Although I initially...

Implementing an ACME Client in C

What is ACME? ACME (Automatic Certificate Management Environment) is a protocol specified by RFC 8555 that is widely used for obtaining Let’s Encrypt and other TLS certificates automatically. A user...

DDR5 Fault Injection Platform for Rowhammer Research

As part of my Bachelor’s thesis, I designed a novel DDR5 fault injection system used for Rowhammer research consisting of a custom interposer PCB, a microcontroller board and a control...

Hacking a VoIP Phone

In this project, I analyzed and reverse engineered the firmware, file formats and custom cryptography of a business IP phone. As it turns out, many of the phone’s software components...

Display Driver for Zephyr

In this project, I use an nRF52 development board and a cheap 3.5" TFT module to experiment with graphical displays on Zephyr RTOS. The display module is hard-wired to use...

Laptop Repairs

I stumpled upon schematics and an assembly drawing of my laptop (Thinkpad P14s, Gen 1) on a computer repair forum. While studying the schematics is interesting in itself, it also...

Windows 95 Internet Access using Linux PPP in 2024

I own a 1994 IBM Thinkpad 755C I take out of storage once in a while to experience that authentic retro computer feeling with a system that predates my existence...

Speech Recognition on STM32 using Machine Learning

As part of a university course, I worked on porting a machine learning algorithm to an STM32 Cortex-M4 microcontroller for simple speech recognition. It can detect simple spoken keywords such...

Bare Metal STM32 Setup without STM32CubeIDE

While a chip vendor’s IDE (like STM32CubeIDE) offers many great features and is usually the easiest and quickest way to get the first program on a microcontroller, it is a...

Implementing FAT32 for the Barrelfish Microkernel

As part of an operating systems class at university, we built our own, customized version of the Barrelfish microkernel/multikernel operating system running on an i.MX8X processor. In a group effort,...

Firmware-based TPMs for Embedded Systems

As part of a semester project I worked on integrating a firmware-based trusted platform module (fTPM) on a Arm-based SoC. In the following article I’d like to share my experience...

Simple Status Page for Homelab

What do you do if you have a lot of work ahead of you and suddenly your servers are offline? Exactly, you procrastinate by spending the whole day making a...

Multitasking on MSP430 with FreeRTOS

As my first FreeRTOS project I set up this simple demo on a TI MSP430FR4133 LaunchPad. I chose this microcontroller mainly because I already own the development board for it...

Setting up a Custom MSP430 Development Environment

For an upcoming project I wanted to use my MSP430 Launchpad development board. I haven’t worked with TI’s MSP430 series for a long time, so I needed to set up...

Amplifier Board for Current Sensing

This is a breakout board I designed for the ultralow noise AD8331 variable-gain amplifier with internal low-noise preamplifier. It is meant to be used as a current probe with an...

Using an SPI OLED Display with the Linux Kernel

To get familiar with the tools and concepts of the Yocto project, I wanted to do a project using an SPI OLED display I bought recently. Those tiny displays are...

Connecting an LED Sign to the Internet

This was a quick-and-dirty one day project. I got my hands on some old RS485 LED signs (like those found in hospital hallways) and I wanted to do something with...

Embedded Gentoo GNU/Linux on ARM Cortex-A7

Previously I have experimented with Linux single-board computers using pre-built Debian images and my own “static” images I built using buildroot. While this was fun, I aimed to run more...

Analyzing "Smart" Ink Cartridges

It’s late at night, and you’re racing against the clock to print that last-minute document for tomorrow’s big presentation. You enter the print command, but your printer refuses to do...

QEMU/KVM Network Setup with nftables

On my Gentoo machine I use QEMU, libvirt and virt-manager to host virtual guest systems. The default network setup of libvirt relies on firewalld and iptables, neither of which are...

Dumping my Laptop's Flash Chip

I’d like to know what firmware is running on my Thinkpad. Not only out of curiosity, but wouldn't it be nice to change the boot logo, patch features, or explore...

iCEBreaker FPGA: VGA Pong Demo

Through a university course I got in contact with iCEBreaker FPGA development boards. These boards contain a tiny Lattice FPGA, are relatively cheap to get (especially considering the price of...

Battery Level Logging for GNU/Linux

I wanted some insight why my laptop’s battery was draining so fast. For this, I needed an objective measure when and how much the battery is discharged. For this, I...

LaTeX Templates

I created two LaTeX templates for reports or assignments. One is a “one-pager” meant for short reports and miscellaneous documents. The “long template” has a title page and a table...

Control Unit with Logging Capabilities

I designed this industrial control unit while working as a freelancer. It is used as an autonomous controller that performs various measurement and control tasks. It also continuously logs to...

Utility to Create LaTeX ASCII Tables

I needed an ASCII table in a LaTeX document. I wasn’t sure how large it should be or how many columns it should have, so it should be easily customizable....

Focus Test Generator

As a programming exercise I made a tool that automatically generates “focus” tests. The task is simple: Just mark all dice that have a particular number of dots as fast...

Just Another Mandelbrot Visualization

What is a Mandelbrot set? The Mandelbrot set is the set of complex numbers c ∈ C for which the sequence z_{n+1}=z_n^2+c stays bounded when n → ∞. The initial...

Custom Ethernet Development Board

I have always been fascinated by how networking devices work. No matter how complicated the network or how many devices are present on that network, you can just take any...

Digit Dataset Creator

Because I was experimenting with a neural network I thought it would be cool to have an even larger test- and training set. So I quickly hacked together this Python...

Neural Network to Read Handwritten Digits

Finally I got some time to read this book by Tariq Rashid. I have never done anything machine learning-related before, so this book seemed like a good entry point. What...

Smart LED Controller

The controller drives dual-color (warm and cold white) LED strips. It has a real-time clock for night/day mode, motion sensor inputs, does PWM fading, is controllable by a normal light...

Control Systems: Ball on Plate

This was a two-person school project in 2017/18. We designed a 3D-printed platform that can be tilted around two axes by servo motors. We designed custom control electronics that would...