Hello, Thingino: From Git Clone to Firmware Binary
Part 1 of The Thingino Developer’s Journey
So you bought a cheap IP camera, discovered it phones home to a cloud on another continent, and now you’re here. Welcome. You’re among friends.
Thingino (thin-jee-no) is an open-source firmware for IP cameras built on Ingenic SoCs — the T21, T23, T31, T40/T41 family of MIPS chips found in an astonishing number of consumer cameras: Wyze, Atom, Aqara, Xiaomi-adjacent brands, and hundreds of white-label devices. Flash Thingino and your camera becomes a small Linux computer that you control: local RTSP streaming, ONVIF, a clean web UI, MQTT, no cloud, no subscription, no mystery traffic.
This series is about developing Thingino, not just using it. Today we go from zero to a firmware binary on your disk.
What you need
- A Linux machine,
x86_64oraarch64. (Debian/Ubuntu are the beaten path.) - ~20 GB of free disk and some patience for the first build.
- A checkout path without spaces. The build system checks and will refuse
~/My Projects/thingino. It’s a cross-compilation thing; don’t fight it.
You don’t need a camera yet. You can build firmware for any supported model without owning it.
The lay of the land
Thingino is a BR2_EXTERNAL tree — an overlay on top of Buildroot, the embedded Linux build system. Buildroot knows how to cross-compile a toolchain, a kernel, and hundreds of packages; Thingino adds camera configs, Ingenic kernel support, its own packages (streamer, web UI, tooling), and a Makefile that orchestrates everything.
You don’t need to understand Buildroot deeply to start. You will absorb it gradually, like a language learned by immersion.
Clone and update
git clone -b stable --recurse-submodules https://github.com/themactep/thingino-firmware
cd thingino-firmware
make update
Two branches matter: stable (tested, recommended if you’re not changing code yet) and master (development, where the fun and the breakage live). As a future contributor you’ll end up on master soon enough.
make update is not just git pull. It pulls the repo, syncs the Buildroot
submodule, applies Thingino’s Buildroot patches, and fetches prebuilt
toolchain bundles so you don’t spend your first hour compiling GCC. Always use
make update in your main checkout, never a bare git pull — the Buildroot
patches need to be unapplied and reapplied around the update.
Picking a camera
Every supported camera lives in configs/cameras/, named by a strict scheme:
<brand>_<model>_<soc>_<sensor>_<wifi_chip>
For example: atom_cam2_t31x_gc2053_atbm6031 — an ATOM Cam 2 with a T31X SoC,
GalaxyCore GC2053 sensor, and an AltoBeam wifi chip. The name tells you the
whole hardware story at a glance. You’ll appreciate this convention the first
time you meet a camera sold under four brand names with three internal
hardware revisions.
Your first build
CAMERA=atom_cam2_t31x_gc2053_atbm6031 make
Or just run make and pick from an interactive menu. Then go make tea. The
first build downloads sources for every package and compiles the world; count
on 30–60 minutes depending on your machine. (Part 2 shows how subsequent
builds get much faster.)
When it finishes, look in:
output/<branch>/<camera>-<kernel>-<libc>/images/
You’ll find the individual pieces — uImage (kernel), rootfs.squashfs,
U-Boot — and the assembled full flash image named after your camera. That
single binary contains the entire partition layout: bootloader, environment,
config partition, kernel, root filesystem, and overlay.
Getting it onto a camera
That’s a topic of its own (and camera-specific), but the short version:
- New install: most cameras are installed via the Thingino web installer or an SD-card bootstrap. See the project site for your model.
-
Already running Thingino? Update over the network:
CAMERA=atom_cam2_t31x_gc2053_atbm6031 IP=192.168.1.42 make ota - Bricked it? You didn’t — Ingenic chips are very hard to brick. Read
docs/camera-recovery.mdand breathe.
What you learned
- Thingino = Buildroot + an external tree of camera configs and packages.
make update(never baregit pull), thenCAMERA=... make.- Camera names encode brand, model, SoC, sensor, and wifi chip.
- Firmware lands in
output/<branch>/<camera>-.../images/.
Next up: Part 2 — A Comfortable Workshop, where we stop treating builds like a ritual and start treating them like a tool: containers, incremental builds, caches, and reading build logs like a person who has somewhere to be.