// Zephyr RTOS · ISO 14229 UDS
A complete, YAML-configured UDS stack that generates production C source for Zephyr. Covers all 19 UDS services, CAN ISO-TP and DoIP transports, ASIL-B safety wrappers, and a full pytest suite — all from a single config file. GPL v2 runtime is free on GitHub.
// why EDS for Zephyr
On Zephyr the diagnostics problem is mostly a binding problem. The RTOS already gives you a CAN driver model, a network stack and a settings subsystem — so the work is wiring generated UDS handlers to a devicetree device correctly, not writing drivers. EDS generates those handlers from a 30-line YAML description and hands them a const struct device *:
diagnostics_config.yaml
ecu:
name: BCM
addressing:
can_id_request: 0x7DF
can_id_response: 0x7E8
sessions:
- default
- extended
- programming
services:
- id: 0x22 # ReadDataByIdentifier
- id: 0x2E # WriteDataByIdentifier
- id: 0x27 # SecurityAccess
- id: 0x31 # RoutineControl
- id: 0x34 # RequestDownload
- id: 0x36 # TransferData
- id: 0x37 # RequestTransferExit
- id: 0x19 # ReadDTCInformation
- id: 0x14 # ClearDiagnosticInformation
dids:
- id: 0xF190
name: VIN
length: 17
read_sessions: [default, extended]
- id: 0xF187
name: PartNumber
length: 10
read_sessions: [default, extended]
write_sessions: [extended]
write_security: [1]
Generated output
python3 tools/codegen.py \
--config diagnostics_config.yaml \
--out build/ \
--safety-wrappers \
--asil-level B \
--test-gen
build/
uds_server.c/.h # UDS dispatcher + Zephyr thread
uds_dids.c/.h # DID read/write handlers
uds_dtcs.c/.h # DTC storage (NVM-backed)
uds_sessions.c/.h # session state machine
uds_security.c/.h # AES-128-CMAC SecurityAccess
uds_safety.c/.h # ASIL-B 5-step validation
test_uds.py # pytest suite (CI-ready)
Zephyr west integration
# west.yml — add EDS as a Zephyr module
manifest:
projects:
- name: eds
url: https://github.com/Xaloqi/EDS
revision: v1.18.1
path: modules/eds
# prj.conf
CONFIG_EDS=y
CONFIG_EDS_ISOTP=y
CONFIG_EDS_DOIP=y
// service coverage
Service coverage is a property of the generator, not of Zephyr — the same 19 services are produced for a FreeRTOS build from the same YAML. The full list, the generated file layout and the codegen flags live on the EDS product page.
What is Zephyr-specific is everything below: how those handlers reach a CAN controller, how DTCs survive a reboot, and how you run the whole thing with no hardware at all.
EDS uses Zephyr's native kernel primitives: a dedicated UDS thread on the system workqueue, k_msgq for ISO-TP frames, zephyr/settings.h for NVM-backed DTC storage, and zephyr/canbus/isotp.h for CAN framing. No POSIX shim. No HAL bypass.
CONFIG_EDS_ISOTP), DoIP over Ethernet (CONFIG_EDS_DOIP), SOME/IP, SOVD RESTCONFIG_EDS=y, call eds_init()// safety
Every generated handler runs a 5-step validation chain before its body — DID existence, session permission, security level, access permission, data length — produced by codegen rather than written by hand. The chain, the deviation log and the traceability matrix are covered on the Safety & security page.
The Zephyr-specific part is the evidence you can produce cheaply: native_sim runs the full generated pytest suite on the host in CI, so the ASIL-B behaviour is exercised on every commit rather than only on a bench. The Professional tier adds the safety manual, HARA and RTM built against that same configuration.
// pricing
The GPL v2 runtime is always free on GitHub. Developer adds the code generator, test generation, ARXML import and the AI CLI; Professional adds the ASIL-B safety artifacts and the harness. Annual licence, offline after activation.