Microcontroller firmware
Low-level development on Cortex-M and 32-bit RISC-V: RTOS architecture, real-time scheduling, interrupt handling, memory optimisation (RAM and Flash counted in kB).
In-house expertise
From a Zephyr-based microcontroller to a custom Linux SoC — low-level development done in-house, not subcontracted.
A well-routed PCB running sloppy firmware doesn't deliver on its promise. At Codium, embedded software development is an integral part of the design office — the same engineer designs the board and knows what will run on it.
Two worlds coexist: RTOS-based microcontrollers — Cortex-M, RISC-V, tight memory constraints, real-time determinism — and application processors running embedded Linux — Cortex-A, kernel drivers, custom Debian/Fedora BSPs. We master both.
From a bare-metal I2C driver to a systemd service on embedded Linux — every software layer has its own rules. We know them.
Low-level development on Cortex-M and 32-bit RISC-V: RTOS architecture, real-time scheduling, interrupt handling, memory optimisation (RAM and Flash counted in kB).
Porting and configuring the Linux kernel for your SoC (Cortex-A, i.MX, AM335x, RK3568). BSP based on Debian or Fedora, optimised rootfs, secure boot, Devicetree overlay management.
Bringing up new hardware: bootloader (U-Boot, SPL), Devicetree configuration, validation of every peripheral. Delivery of a clean, documented BSP that is ready for production use.
Writing Linux kernel drivers (char device, platform driver, SPI/I2C/UART/DMA drivers) and native Zephyr drivers for your peripherals. We follow mainline kernel patterns.
Integrating and configuring network stacks: LTE-M (PSM/eDRX), DECT NR+, BLE, LoRaWAN, Zigbee. Correct handling of sleep modes and network resume to maximise battery life.
Power management strategies for battery-powered devices: power domains, deep sleep, wake-up sources, modem PSM/eDRX. You don't cut the modem off abruptly — you tell it to go to sleep properly.
The choice isn't made on a single criterion. Processing power, memory, latency, time to market, security certification — every parameter counts. We help you choose the right platform for your product, not the one we happen to prefer.
In practice: a battery-powered IoT sensor with a €2 BOM goes on an MCU. An industrial gateway with a web interface, file management and robust updates goes on Linux. The dividing line is often whether you need a full OS.
| MCU + RTOS | Embedded Linux | |
|---|---|---|
| Memory | kB to a few MB | Tens to hundreds of MB |
| Latency | Deterministic (µs) | Variable (PREEMPT_RT possible) |
| Power consumption | µA in deep sleep | mA minimum at idle |
| Boot | Immediate (< 1 ms) | Several seconds |
| Network protocols | Minimal built-in stack | Full stack (TCP/IP, TLS, MQTT…) |
| OTA update | Zephyr FOTA / custom | SWUpdate / RAUC (robust A/B) |
| Security | TrustZone, secure boot | Secure boot, SELinux, dm-verity |
Zephyr vs FreeRTOS vs NuttX, Devicetree explained, Linux kernel drivers, the reality of a Debian BSP in production — 15 years of embedded development experience in our full article.
Read the technical article →Talk to our team directly. First discussion free of charge and with no commitment.