How openbmc/openbmc-tools works
This repository is not one integrated application; it is a toolbox of mostly independent OpenBMC utilities and one-off scripts. The main architectural boundary is per-directory: each top-level folder is its own small tool, with its own runtime, packaging, and dependencies.
The repository is organized around a few recurring interaction surfaces in OpenBMC: D-Bus, journald/log files, IPMI, sensor/I2C hardware, and boot/reboot workflows. Most tools are thin adapters that either query one of those surfaces, transform captured data, or automate a repeated operator task.
A large subset is low-level hardware and sensor tooling. Examples include adcapp, pwmtachtool, bi2cp, i2c/tree.py, and sensor_yaml_config. These tools map directly onto device interfaces such as ADCs, PWM/tachometer control, I2C topology, and sensor configuration files. Their data flow is typically “read hardware or config -> report/transform values” rather than service-to-service orchestration.
Another important subsystem is D-Bus capture and visualization. dbus-pcap captures bus traffic into packet-capture form, while dbus-vis and dbusView consume those captures and render timelines/interactive views in a browser/JS stack. This forms a clear offline analysis pipeline: live bus activity -> capture file -> visualization.
Logging and diagnostics are handled by small, file-oriented analyzers such as pretty-journal, check_journal, and nginx-log-analysis. These tools read existing logs, normalize or summarize them, and emit human-readable diagnostics. They are not daemons; they are operator-facing post-processing tools.
Boot and reboot automation is another distinct cluster. reboot, reboot-ping-pong, netboot, prepare-emmc-qemu, and pldm/pdrdump.sh all support firmware bring-up, reboot validation, or test-environment preparation. The typical flow here is “drive a board/QEMU/system action -> observe boot outcome or generated state.”
There is a command-line management layer for interacting with OpenBMC itself. openbmctool is the main example; it is a Python CLI with a policyTable.json that suggests command/permission mapping or request shaping. witherspoon-debug, altitude, overlay, and bbdbg are similarly specialized utilities for board-specific or platform-specific debugging.
Several directories are meta-tooling for repository and process automation rather than OpenBMC runtime interaction. tof-voters analyzes Gerrit reviews/commits against configured patterns, cla-signers manages CLA-related signer data, and openbmc-autobump automates version or dependency bumps. These tools connect to external developer workflow systems such as Gerrit and operate on repository metadata rather than device state.
There is also a set of format/transform helpers: autojson, format-yaml, expectedJsonChecker, and ddconvnotrunc. These are small conversion/validation utilities that sit between raw data and the structured formats used elsewhere in the repo.
Implementation technologies are intentionally mixed and lightweight. Python dominates most of the scripts, with shell wrappers for automation, C/C++ for performance- or device-facing utilities, and JavaScript/HTML/CSS for the D-Bus visualization frontend. Build systems are per-tool and independent: autotools, Meson, Makefiles, and simple executable scripts coexist without a shared monorepo build.
Operationally, the repo has very weak coupling by design. There is no shared application server, no central runtime, and no common data store. The architectural picture is a collection of command-line entry points and small UI tools that each ingest one kind of OpenBMC artifact, perform a narrow transformation, and write to stdout, files, or a browser UI.
For an architecture diagram, the most accurate abstraction is: “operator/dev tooling repository” at the center, with separate spokes to OpenBMC device interfaces, log/capture files, boot environments, and Gerrit/CLA workflow services. Each folder is an independent leaf rather than a module in a single system.
Main entry points: dbus-pcap dbus-pcap · dbus-vis dbus-vis · openbmctool.py openbmctool · reboot.sh reboot
Components 27
OpenBMC tools
Repository-wide collection of mostly independent operator and developer utilities.
- Toolbox · Loose federation of independent OpenBMC utilities and scripts.
Hardware tools
Utilities for ADC, PWM/tach, I2C, and sensor configuration.
- ADC app · Reads ADC values from device interfaces and reports them.
adcapp - PWM/tach · Interacts with PWM and tachometer control paths.
pwmtachtool - bi2cp · Low-level I2C access utility for board hardware inspection.
bi2cp - I2C tree · Prints or analyzes I2C topology and bus relationships.
i2c/tree.py - Sensor config · Transforms or generates sensor YAML configuration mappings.
sensor_yaml_config/sensor_yaml_config.py
D-Bus analysis
Capture and visualization pipeline for OpenBMC bus activity.
Logs and diagnostics
Post-processing tools for journald, nginx logs, and similar artifacts.
- pretty-journal · Pretty-prints or normalizes journald output.
pretty-journal/pretty-journal.py - check_journal · Checks journal output for expected conditions or regressions.
check_journal/check_journal - nginx logs · Analyzes nginx log files and emits summaries.
nginx-log-analysis/analyze-nginx-log
Boot workflows
Reboot, netboot, and bring-up helpers for boards and QEMU.
- reboot · Automates reboot or validation steps via board-side scripting.
reboot/reboot.sh - ping-pong · Exercises reboot timing or availability through repeated checks.
reboot-ping-pong/rpp - netboot · Supports network boot and bring-up flows.
netboot/netboot - eMMC prep · Prepares emmc-based QEMU or test images for boot workflows.
prepare-emmc-qemu/prepare-emmc-qemu - pdrdump · Dumps PLDM PDR data for bring-up and diagnostics.
pldm/pdrdump.sh
BMC CLI and debug
Interactive tools for querying and debugging OpenBMC systems.
- openbmctool · Primary command-line client for interacting with OpenBMC.
openbmctool/openbmctool.py - witherspoon-debug · Platform-specific debugging utility for a board family.
witherspoon-debug/debug - overlay · Specialized overlay or support script for platform debugging.
overlay/overlay
Workflow automation
Repository and review workflow tools plus release automation.
- tof-voters · Analyzes Gerrit reviews and commits against acceptance patterns.
tof-voters/libvoters - cla-signers · Manages CLA signer data for contribution workflow.
cla-signers/update-cla.sh - autobump · Automates version or dependency bumping tasks.
openbmc-autobump/openbmc-autobump.py
Transform helpers
Small utilities that convert or validate structured data.
- autojson · Converts data to JSON or helper formats.
autojson/autojson.py - format-yaml · Formats YAML files or structured YAML content.
format-yaml/format-yaml.py - JSON checker · Compares produced JSON against expected output.
expectedJsonChecker - ddconvnotrunc · Transforms captured data while preserving full record boundaries.
ddconvnotrunc/ddconvnotrunc
Connections 44
- Toolbox → ADC app: contains · Top-level tool directory.
- Toolbox → PWM/tach: contains · Top-level tool directory.
- Toolbox → bi2cp: contains · Top-level tool directory.
- Toolbox → I2C tree: contains · Top-level tool directory.
- Toolbox → Sensor config: contains · Top-level tool directory.
- Toolbox → dbus-pcap: contains · Top-level tool directory.
- Toolbox → dbus-vis: contains · Top-level tool directory.
- Toolbox → dbusView: contains · Top-level tool directory.
- Toolbox → pretty-journal: contains · Top-level tool directory.
- Toolbox → check_journal: contains · Top-level tool directory.
- Toolbox → nginx logs: contains · Top-level tool directory.
- Toolbox → reboot: contains · Top-level tool directory.
- Toolbox → ping-pong: contains · Top-level tool directory.
- Toolbox → netboot: contains · Top-level tool directory.
- Toolbox → eMMC prep: contains · Top-level tool directory.
- Toolbox → openbmctool: contains · Top-level tool directory.
- Toolbox → witherspoon-debug: contains · Top-level tool directory.
- Toolbox → overlay: contains · Top-level tool directory.
- Toolbox → tof-voters: contains · Top-level tool directory.
- Toolbox → cla-signers: contains · Top-level tool directory.
- Toolbox → autobump: contains · Top-level tool directory.
- Toolbox → autojson: contains · Top-level tool directory.
- Toolbox → format-yaml: contains · Top-level tool directory.
- Toolbox → JSON checker: contains · Top-level tool directory.
- Toolbox → ddconvnotrunc: contains · Top-level tool directory.
- Toolbox → pdrdump: contains · Top-level tool directory.
- dbus-pcap → dbus-vis: capture -> view · Captured bus traffic is loaded into visualization tools.
- dbus-pcap → dbusView: capture -> view · Capture artifacts can also be inspected with the Python viewer.
- dbus-vis → dbus-pcap: loads · Visualization frontend consumes pcap-like capture output.
- dbus-vis → ddconvnotrunc: parses · Frontend includes loaders/parsers for captured data.
- pretty-journal → check_journal: normalizes · Log formatting feeds log checking and validation.
- reboot → ping-pong: drives · Reboot scripting supports repeated availability checks.
- reboot → netboot: boot flow · Reboot workflows and network boot both support bring-up.
- eMMC prep → netboot: prepares · Image preparation supports boot execution paths.
- openbmctool → dbus-pcap: talks via · Client-facing OpenBMC interaction ultimately traverses D-Bus surfaces.
- openbmctool → witherspoon-debug: complements · General CLI and platform-specific debug utilities overlap operationally.
- tof-voters → cla-signers: workflow · Both target developer governance and contribution workflows.
- tof-voters → autobump: automation · Repository automation tools cluster around maintenance workflows.
- autojson → format-yaml: transforms · Both are small conversion/formatting helpers.
- autojson → JSON checker: validates · Generated structured output can be checked against expectations.
- ADC app → Sensor config: configures · Sensor configuration and ADC reporting are closely related hardware surfaces.
- PWM/tach → bi2cp: hardware access · Both are low-level hardware-facing utilities.
- I2C tree → bi2cp: maps · I2C topology tooling complements raw bus access.
- pdrdump → openbmctool: diagnostics · Both support operator workflows around BMC state inspection.