56,966 blogs · [ { "id": "01a087c6-d4b2-7035-884f-ae8cb15561b0", "title": "Writing your first compiler", "url": "https://popovicu.com/posts/writing-your-first-compiler/", "published_at": "2026-01-18T21:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb1df9874", "title": "How to use Linux vsock for fast VM communication", "url": "https://popovicu.com/posts/how-to-use-linux-vsock-for-fast-vm-communication/", "published_at": "2025-11-27T16:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb2a8d55b", "title": "How to reverse engineer USB HID on Linux", "url": "https://popovicu.com/posts/how-to-reverse-engineer-usb-hid-on-linux/", "published_at": "2025-11-08T15:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb39bab4c", "title": "How KVM and QEMU run VMs in Linux", "url": "https://popovicu.com/posts/how-kvm-and-qemu-run-vms-in-linux/", "published_at": "2025-11-02T16:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb40ed29c", "title": "PC cooler control with a $2 microcontroller, no development board", "url": "https://popovicu.com/posts/pc-cooler-control-with-2-dollar-microcontroller-no-development-board/", "published_at": "2025-10-04T14:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb45b0d7b", "title": "Writing an operating system kernel from scratch", "url": "https://popovicu.com/posts/writing-an-operating-system-kernel-from-scratch/", "published_at": "2025-09-13T16:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb4c7db0d", "title": "Custom CPU simulation and testing", "url": "https://popovicu.com/posts/custom-cpu-simulation-and-testing/", "published_at": "2025-09-07T17:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb582021a", "title": "Running Go tools in a browser", "url": "https://popovicu.com/posts/running-go-tools-in-browser/", "published_at": "2025-09-06T17:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb6560041", "title": "RTL generation for custom CPU Mrav", "url": "https://popovicu.com/posts/rtl-generation-for-custom-cpu-mrav/", "published_at": "2025-08-23T17:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb66e9ddf", "title": "Mrav custom CPU software tooling", "url": "https://popovicu.com/posts/mrav-custom-cpu-software-tooling/", "published_at": "2025-08-16T17:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb711cff2", "title": "Embedded bare-metal C with Bazel and AVR", "url": "https://popovicu.com/posts/embedded-c-bazel-avr/", "published_at": "2025-08-15T02:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb7171346", "title": "Creating an assembler for a custom CPU", "url": "https://popovicu.com/posts/assembler-for-custom-cpu/", "published_at": "2025-08-10T19:15:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb79c5499", "title": "Making a custom CPU", "url": "https://popovicu.com/posts/making-a-custom-cpu-mrav/", "published_at": "2025-08-02T22:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb834497c", "title": "Simple Lua integration in Go", "url": "https://popovicu.com/posts/simple-lua-integration-in-go/", "published_at": "2025-07-20T20:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb928233b", "title": "Cross-compiling C and Go via cgo with Bazel", "url": "https://popovicu.com/posts/cross-compile-cgo-bazel/", "published_at": "2025-05-31T17:15:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb92f6c4a", "title": "Linux VM without VM software - User Mode Linux", "url": "https://popovicu.com/posts/linux-vm-without-vm-software-user-mode/", "published_at": "2025-05-24T19:15:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb96976f3", "title": "Machines build machines - AI creates a bootable VM", "url": "https://popovicu.com/posts/ai-creates-bootable-vm/", "published_at": "2025-05-17T17:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb9acc59e", "title": "Bare metal JavaScript on RISC-V", "url": "https://popovicu.com/posts/bare-metal-javascript-riscv/", "published_at": "2025-05-15T05:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cb9dd2f59", "title": "Bare metal printf - C standard library without OS", "url": "https://popovicu.com/posts/bare-metal-printf/", "published_at": "2025-04-26T19:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbabe506f", "title": "Making my first embedded Linux system", "url": "https://popovicu.com/posts/making-my-first-embedded-linux-system/", "published_at": "2024-06-15T18:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbb26e2ad", "title": "Make your own USB storage device using embedded Linux", "url": "https://popovicu.com/posts/make-your-own-usb-storage-embedded-linux/", "published_at": "2024-06-09T16:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbb8f9ad5", "title": "Making USB devices - end to end guide to your first gadget", "url": "https://popovicu.com/posts/making-usb-devices/", "published_at": "2024-06-01T16:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbc360326", "title": "OCI containers with Bazel in one command", "url": "https://popovicu.com/posts/containers-bazel-one-command/", "published_at": "2024-04-27T16:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbd1a2fba", "title": "Go gRPC servers with Bazel in one command", "url": "https://popovicu.com/posts/go-grpc-servers-with-bazel/", "published_at": "2024-04-20T18:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbd6f9fd2", "title": "Easy to build and deploy Go servers with no tooling and external dependencies", "url": "https://popovicu.com/posts/easy-to-build-and-deploy-go-servers/", "published_at": "2024-04-20T18:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbd828b1f", "title": "How files in Linux work", "url": "https://popovicu.com/posts/how-files-in-linux-work/", "published_at": "2024-04-13T19:15:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbdc2289d", "title": "Run mainline Linux on $5 dollar hardware", "url": "https://popovicu.com/posts/run-mainline-linux-on-5-dollar-hardware/", "published_at": "2024-04-06T18:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbe04b894", "title": "<50 lines of code for a custom generative AI flow in Google Slides with Google Gemini", "url": "https://popovicu.com/posts/50-lines-of-code-for-custom-generative-ai-in-google-slides/", "published_at": "2024-01-28T04:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbe68d424", "title": "Making a mini computer from scratch with Raspberry Pi and Linux", "url": "https://popovicu.com/posts/making-a-mini-computer-from-scratch-with-raspberry-pi-and-linux/", "published_at": "2023-12-10T01:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbecb2407", "title": "Cross compiling C and C++ with Bazel", "url": "https://popovicu.com/posts/cross-compiling-c-with-bazel/", "published_at": "2023-10-17T00:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbf3dc495", "title": "Take full control of Raspberry Pi! 10 MB mainline Linux image for embedded", "url": "https://popovicu.com/posts/10-mb-raspberry-pi-mainline-linux-image-for-embedded/", "published_at": "2023-10-15T16:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cbfee499d", "title": "Building multiplatform Linux initramfs with one command in Bazel", "url": "https://popovicu.com/posts/building-multiplatform-linux-initramfs-with-one-command-in-bazel/", "published_at": "2023-10-12T23:39:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cc0aea053", "title": "Build all software in one command with Bazel", "url": "https://popovicu.com/posts/build-all-software-in-one-command-with-bazel/", "published_at": "2023-10-11T18:15:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cc0e0a3e6", "title": "RISC-V interrupts with a timer example", "url": "https://popovicu.com/posts/risc-v-interrupts-with-timer-example/", "published_at": "2023-10-09T21:20:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cc1491350", "title": "Bare Metal Rust on RISC-V With Dynamic Memory", "url": "https://popovicu.com/posts/bare-metal-rust-risc-v-with-dynamic-memory/", "published_at": "2023-10-05T02:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cc1ddbdf4", "title": "789 KB Linux Without MMU on RISC-V", "url": "https://popovicu.com/posts/789-kb-linux-without-mmu-riscv/", "published_at": "2023-10-04T17:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cc2be76d8", "title": "Making a micro Linux distro", "url": "https://popovicu.com/posts/making-a-micro-linux-distro/", "published_at": "2023-09-22T02:30:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cc39d95bd", "title": "RISC-V SBI and the full boot process", "url": "https://popovicu.com/posts/risc-v-sbi-and-full-boot-process/", "published_at": "2023-09-10T04:00:00+00:00" }, { "id": "01a087c6-d4b2-7035-884f-ae8cc40ddfcd", "title": "Bare metal programming with RISC-V guide", "url": "https://popovicu.com/posts/bare-metal-programming-risc-v/", "published_at": "2023-09-09T19:05:00+00:00" } ] posts Claim your blog
Back to Uros Popovic
Blog · corpus.blog/blogs/popovicu.com/posts

Uros Popovic

popovicu.com

2026

2025

2024

2023