In-house expertise

Firmware &
Embedded software

From a Zephyr-based microcontroller to a custom Linux SoC — low-level development done in-house, not subcontracted.

Start a firmware project See the design office

Firmware is
half the product

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.

Embedded firmware development — microcontroller and electronic board
2
Platform families (MCU + Linux)
4
RTOSes mastered (Zephyr, FreeRTOS, NuttX, RIOT)
100%
In-house — zero firmware subcontracting
IoT
Integrated protocols: LTE-M, BLE, DECT NR+, LoRa

Custom firmware & software

From a bare-metal I2C driver to a systemd service on embedded Linux — every software layer has its own rules. We know them.

RTOS

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).

Zephyr RTOS FreeRTOS Cortex-M0/M4/M33 RISC-V
Linux

Embedded Linux

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.

Linux kernel Debian / Fedora BSP Cortex-A Devicetree
BSP

BSP & board bring-up

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.

U-Boot DTS overlay Bring-up JTAG / OpenOCD
Drivers

Low-level drivers

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.

Linux kernel module I2C / SPI / UART DMA Zephyr driver model
IoT protocols

IoT protocol stack

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.

LTE-M / NB-IoT DECT NR+ BLE / Zephyr BT LoRaWAN
Power consumption

Power optimisation

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.

PSM / eDRX Power domains Deep sleep Current profiling

MCU running an RTOS
or embedded Linux?

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

Firmware & embedded services

Complete RTOS firmware development
From software architecture down to the low-level driver: HAL, RTOS tasks, peripheral management, communication protocols. With Zephyr or FreeRTOS depending on the context.
Embedded Linux porting
Kernel configuration for your SoC, Devicetree adaptation, deployment of an optimised Debian or Fedora BSP, secure boot and updates through the native package system.
Bring-up of new hardware
Complete bring-up of a new board: bootloader, peripheral validation, measurement of start-up currents, identification and resolution of hardware/software issues.
Kernel driver development
Linux drivers (platform driver, char device, I2C/SPI) and native Zephyr drivers for your custom sensors and peripherals. Clean, reviewable, maintainable code.
IoT stack integration
Configuration and validation of network stacks: LTE-M with correct PSM/eDRX, DECT NR+, BLE, LoRaWAN. Battery life optimisation and network reconnection handling.
Real-world testing
Firmware validation on the target hardware, under real environmental conditions: temperature, power supply, RF interference. Unexpected behaviour identified before going into production.

From requirement to delivered firmware

1
Scoping
Analysis of the target hardware and of memory, real-time and power constraints. Choice of platform and RTOS.
2
Architecture
Split into software layers, definition of interfaces between tasks, choice of synchronisation primitives.
3
Development
Firmware writing: HAL, drivers, application layer. Unit tests, CI on the build toolchain (west / cmake).
4
Validation
Tests on real hardware: functional validation, power consumption measurement, stress testing, edge cases and resets.
5
Delivery
Documented code, reproducible build procedure, OTA update guide and qualification report.

Our field experience

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 →
RTOS
Zephyr vs FreeRTOS vs NuttX — an honest comparison
Linux
Kernel drivers, Devicetree, BSP — the reality in the field
IoT
LTE-M PSM/eDRX — how not to kill the battery
Protocols
DECT NR+, BLE, LoRa — the stacks we integrate

A project with a firmware layer?

Talk to our team directly. First discussion free of charge and with no commitment.