Building a barebones web-push server
We use push notifications from web-sites on a daily basis. This article is about building one from the ground-up in order to understand how the whole system pipeline works.
Exploring virtualization in RISC-V machines
“RISC-V is classically virtualizable” – We come across this statement very often when we read about the merits of the RISC-V ISA. This article looks at what this statement means and how practical virtualization works with the RISC-V architectures.
Adding a custom peripheral to QEMU RISC-V machine emulation & interacting with it using bare-metal C code
QEMU is an excellent platform to emulate hardware platforms. But, we often end up using ready-made platforms without thinking twice about how QEMU emulates them. This article dives into the depth of how a new peripheral can be added to an existing QEMU machine and how to interact with it using bare-metal C code. Ultimately, we will build a RISC-V machine that has our custom peripheral and driver for that peripheral.
Linux & Python on RISC-V using QEMU from scratch
This article explores how to set up RISC-V on QEMU, boot a simple application on it using the PK kernel, and boot a cross-compiled Linux on the emulation platform. We top it by booting a standard Linux distro with python support.
Analyzing size of ELF sections and symbols to generate a modular report.
If you are working on any serious embedded systems project, you will come across the need to optimize the memory footprint of your code sooner or later. When the crude methods like high levels of compiler optimization and the standard tips and tricks wont cut it any more, you will have to break out your work boots and the hardhat and get to digging.
Setting up a Github Actions based CI system for embedded development using PIC32
GitHub Actions is a workflow automation offering from GitHub. While there are a lot of tutorials out there talking about using GitHub Actions on your web/software project, there are not many on using it for CI/CD workflows for embedded firmware development. In this article, we will go through the steps involved in creating a build test environment for a PIC32 based projects hosted in GitHub.
Decrypting embedded TLS communication
While developing cloud connected products, one of the major challenges is debugging application layer errors within a TLS connection. This article describes a scalable method to decrypt application level communication within a TLS connection even when it happens with a cloud based server.
Understanding JSON Web Tokens
JSON Web Tokens (JWT) are becoming popular even outside the traditional web authentication use-cases with the advent of IoT and connected devices. This article gives you a concise overview of JWT and and all that is need to get started with using them
JTAG basics and usage in microcontroller debugging
JTAG is omnipresent in the microcontroller and FPGA world in the form of programmers and debuggers. Let us peek under the hood and understand how JTAG works and understand how IDE based debug works with microcontrollers.
Understanding X.509 Certificate Structure
An insight into the format and technologies used to pack a X.509 certificate. This tutorial introduces the concepts and parses through a TLS certificate to bring the concepts together.
Introduction to digital certificates
Introduction to digital certificates and the basic concepts of hashes and cryptographic algorithms that are used to build trust based secure systems
Building an E2E IoT system with Raspberry Pi
My experiences with building an end to end IoT system using a Raspberry Pi, an Arduino and a MPU6050. The post describes the details of how to compile and setup a minimal kernel with networking and web server support and developing a minimal websocket server to get real time data into the web page based user interface.
Writing Linux Device Drivers - Part 1
This tutorial gives a quick introduction to writing Linux device drivers. It will not make you device driver experts, but will give you a starting point to start learning about Linux device drivers.