Skip to content

mpe-tt/wallabmc

 
 

WallaBMC logo

WallaBMC

Overview

WallaBMC is a simple, lightweight Baseboard Management Controller (BMC) firmware suitable for STM32 and similar class microcontrollers. Built on the Zephyr RTOS, WallaBMC provides essential BMC functionality including network management, host power control, and web-based administration through a Redfish-compliant interface.

WallaBMC is designed for embedded systems requiring BMC capabilities without the complexity of full-featured BMC solutions. It provides core functionality for monitoring and managing host systems through industry-standard interfaces.

Features

  • LED Status Indicators: Visual feedback for system status
  • IPv4 Networking: Static IP or DHCP with mDNS hostname resolution
  • Redfish Interface: Industry-standard RESTful API for management
  • Web Interface: HTTP/HTTPS web UI for administration
  • BMC Console: Management console accessible via serial or web interface
  • Persistent Configuration: Settings stored across reboots
  • Host Power Control: Power on/off management for host systems
  • Host Console: Serial console access

Hardware Support

WallaBMC currently supports the following hardware platforms:

Hardware Zephyr board name Description
SiFive HiFive Premier P550 MCU hifive_premier_p550_mcu RISC-V based platform
STM32 Nucleo F767ZI nucleo_f767zi ARM Cortex-M7 development board (standalone, no host CPU)
qemu qemu_cortex_m3 see run_qemu_ci.py

Using

Prerequisites

Before getting started, ensure you have a proper Zephyr development environment. Follow the official Zephyr Getting Started Guide.

Required tools:

  • West (Zephyr's meta-tool)
  • CMake (version 3.20.0 or later)
  • Python 3
  • A toolchain for your target platform (ARM or RISC-V)
  • OpenOCD or appropriate flashing tool for your hardware

Quick instructions (existing zephyr build env)

Clone the repo into your home dir

cd $HOME
git clone https://github.com/tenstorrent/wallabmc.git

Go to your zephyr build dir:

west build --sysbuild -b nucleo_f767zi ~/wallabmc

Where nucleo_f767zi can be replaced with the boards in Hardware Support.

See flashing on how to install

Installation

For those without a pre-existing zephyr build env

Initialize Workspace

The first step is to initialize the workspace folder where WallaBMC and all Zephyr modules will be cloned:

# Initialize workspace for WallaBMC (main branch)
west init -m https://github.com/tenstorrent/wallabmc.git --mr main workspace
# update Zephyr modules
cd workspace
west update

Building

To build the application, run the following command:

cd zephyr
west build --sysbuild -b nucleo_f767zi ../wallabmc

Where nucleo_f767zi can be replaced with the boards in Hardware Support

Supported boards:

See the Hardware Support section.

Flashing

west flash --runner openocd

Alternatively, use the build/wallabmc/zephyr/zephyr.signed.hex and build/mcuboot/zephyr/zephyr.hex files, and run the openocd commands:

flash write_image erase build/mcuboot/zephyr/zephyr.hex
flash write_image erase build/wallabmc/zephyr/zephyr.signed.hex

Also see instructions on flashing the p550

Running

When the system has booted, a slow-blinking status LED indicates the system is running.

The Nucleo exposes an STM32 UART as a serial device over the USB port. WallaBMC puts the BMC console on this serial device that displays boot and log messages, and can be used to query and configure the device.

WallaBMC supports networking over ethernet and by default uses DHCP with the hostname wallabmc to get an IP address.

WallaBMC opens an HTTP (and possibly HTTPS) port, which provides Redfish and Web UI. The Web UI can also access the BMC console.

BMC shell

The Zephyr shell has been extended with wallabmc commands, and can be accessed via the MCU serial console or the WebUI or websocket.

The websocket BMC shell endpoint URL is /console/bmc and supports ws and wss if CONFIG_APP_HTTPS (e.g., wss://wallabmc.local.net/console/bmc).

Host serial console

The Nucleo has USART6 connected to pins D0/D1 RX/TX on the CN10 connector. WallaBMC uses this as the host serial console which can be accessed with the WebUI terminal or telnet port 22. The pins would have to be connected to something useful (e.g., each other have a loopback UART that echoes back what is transmitted to it).

The P550 host serial console UART is connected to an actual serial console UART on the host CPU.

The websocket host console endpoint URL is /console/host and supports ws and wss if CONFIG_APP_HTTPS (e.g., wss://wallabmc.local.net/console/host).

Settings and configuration

  • help command listing with hierarchical help (e.g., help config).
  • config shell command can be used to configure the BMC.
  • power can power the host on and off. On the Nucleo board there is no host CPU so one of the LEDs is a stand-in for a host power GPIO.

Contributing

See CONTRIBUTING.md for information on how to contribute to this project.

License

This project is licensed under the terms described in:

About

WallaBMC is a lightweight BMC for STM32 and similar class MCUs, with Web UI, Redfish, and HTTPS support. Based on Zephyr RTOS.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C 76.8%
  • HTML 17.0%
  • CMake 2.5%
  • Python 2.1%
  • Shell 1.4%
  • Linker Script 0.2%