Releases: turing-machines/BMC-Firmware
v2.0.5
Firmware version 2.0.5 is a major release that brought many new features and improvements since version 1.1.0. Instructions on how to upgrade can be found on our v2 readme pages Below is a thorough list of these changes.
Note: Upgrading from v1.x.x to v2.x.x requires a one-time only upgrade using a micro SD card!
Firmware
- Replaced NTPSec with chrony
This frees ~50% of space of the rootfs partition, as chrony does not depend on python3. (#121) - Split S99hello.sh init daemon script into priorities 93 and 99 and start BMC daemon at priority 94.
This allows creating 4 user-defined scripts at priorities 95-98. (5fd7d4) - Updated buildroot to 2023.08 (d566b7)
- Device tree:
- Added definition and driver for optional EMC2301 fan controller (#125)
- Added definitions for power regulators
- Added definitions for aggregated node-management GPIOs
- Added a new update mechanism which replaces SWUpdate and does not require a Windows PC/VM (see link )
- Linux device management is now done by a more lightweight mdev instead of eudev (#124)
- Cleaned up unused files from the image related to unsupported BMC functionality (Bluetooth, sound, touchscreen, wireless)
- Added tools for ext2-4 and FAT filesystems
This addsmkfs.{msdos,vfat}
,mkdosfs
,mkfs.ext{2,3,4}
andfsck.{msdos,vfat}
,dosfsck
,fsck.ext{2,3,4}
. (#129) - Use mainline U-Boot instead of a vendor fork
- Root filesystem now uses a read-only EROFS instead of UBIFS.
BMC Daemon
- Now fully written in Rust
- Replaced old GoAhead embedded web server with Actix
- Added TLS support
- HTTP -> HTTPS redirect
- Implemented multipart file streaming
- firmware upgrade backend
- install OS on node backend
This feature allows flashing image files directly into a node/BMC from your PC, removing requirement to copy them to a microSD card first
- Support for RK1 flashing
- Support IPv6
- Change application configuration backend from SQLite to a custom binary format
- Added authentication:
- Previously, anyone with access to port 80 of the board could execute any API command. Now, access control is implemented via HTTP authentication with credentials of Linux users of the BMC.
- List of users is automatically updated when a user is added or removed.
- Repeated failed authentication requests are rate-limited with exponential backoff.
- Added API endpoints:
- Reset individual nodes (
/api/bmc?opt=set&type=reset&node=1
) - reboot board (
/api/bmc?opt=set&type=reboot
) - reload daemon (
/api/bmc?/opt=set&type=reload
) - backup user layer (
/api/bmc/backup
) - info (
/api/bmc?opt=get&type=info
) - about (
/api/bmc?opt=get&type=about
)
- Reset individual nodes (
- Added a configuration file, allowing changing startup options with regards to port, TLS, web server directory, HTTP redirection, runtime configuration database, and authentication.
- KEY_1 functionality changes:
- pressing will turn all nodes on if 3 nodes or fewer are powered on
- pressing when all nodes are off will turn all nodes on
- pressing when all nodes are on will turn all nodes off
- long pressing will force every node to be powered on
- Moved the default web UI server directory from
/mnt/var/www
to/srv/bmcd/www
TPI tool
- Now written in Rust
- Added a user-friendlier and more consistent command-line interface
- Added option to generate shell auto-completion files
- Support authentication by supplying credentials interactively or via command line
- Publish package in the AUR
- Added an option to boot a node as a USB mass-storage device to access its filesystem's content
- Added functionality to flash a node either via streaming the contents of an image file, or by reading it from a locally-accessible filesystem (i.e., microSD card)
- Added progress bars and estimated time calculation for file transfers
- Added a command to reboot the BMC
- available on crates.io
Web UI
- Styled with turing pi brand design
- UI made responsive
- Fixed progress bars and spelling in labels and added popups
- Included about tab containing all version strings of the firmware
- The user overlay data can be downloaded as a compressed tar.
- Added functionality to upgrade BMC's firmware and flash nodes
- added buttons to reboot the board and reload the daemon
Known Issues
- MSD mode,
tpi advanced msd
is not implemented yet for RK1 related issue
Contributions
Weโd like to thank all contributors for their ideas and improvements, especially @CFSworks for incredible work mainlining BMC support and providing help with the bootloader, OS, and new flashing system.
V1.1.0
This release marks the start of the transition from the "legacy firmware" towards a more safe, stable, and extendable firmware. More concretely, this is the last release where we updated the current tpi tool
and BMC API server
as we aim to replace these userspace applications. (Note that we will keep supporting the current BMC API for now).
no .swu package available
This release also contains kernel updates, which the .swu update mechanism does not support. We know of this inconvenience and aim to gradually deploy a new firmware update mechanism throughout the upcoming releases.
What's Changed
- The BMC can flash raspberry pi cm4 modules via images stored locally on the SD card. ( we will further improve this experience in upcoming releases)
- USB configuration and Power settings are persisted. After a reboot, the previous state will be restored.
- Calling
tpi -p on -n 1
actually only turn on node 1 - mDNS is enabled. The TP board can be found via
<hostname>.local
. By default, this is:turingpi.local
- Key_1 now has two modes: a long and short press. Toggle-ing the button powers off or on the active (set by the user) nodes. Long press resets this configuration. If all nodes were on, all nodes will turn off long pressing the KEY_1 button. With three or fewer nodes on, all nodes will be turned on.
- the BMC API is extended with the following options:
- flash operation:
http://%s/api/bmc?opt=set&type=flash&file=%s&node=%d
- node_to_msd:
http://%s/api/bmc?opt=set&type=node_to_msd&node=%d'
- clear_usb_boot:
http://%s/api/bmc?opt=set&type=clear_usb_boot&node=%d'
- reset node:
http://%s/api/bmc?opt=set&type=reset&node=%d'
- USB opt is extended with a boot pin option:
http://%s/api/bmc?opt=set&type=usb&mode=0&node=%d&boot_pin=1'
- flash operation:
- tpi tool has been updated to reflect these changes
- startup and memory improvements
- bug fixes
Please give us some time to update the documentation accordingly:)
New Contributors
Full Changelog: v1.0.2...1.1.0
v1.0.2
We're proud to announce our first release since forking from the wenyi0421/turing-pi repository. This release delivers significant updates:
- Package and Toolchain Updates: We've modernized our toolchain and updated packages.
- Improved Stability: We've addressed several bugs and improved the overall stability of our firmware.
Please note that the .swu package provided does not contain the kernel itself. To upgrade to 1.0.2 its recommended to flash the .img file using the phoenix suit.
What's Changed
-
Fixed thermal driver #6
-
Fixed USB host driver from being started #9
-
Updated toolchain to GCC 11.3, GLIBC 2.38 #66
-
Added extra packages to the default configuration which have a low memory footprint: htop, picocom, tree, nano #70
-
Udated to buildroot v2023 #64
-
buildroot/bmc: fix cjson dependency requiring
make cjson-rebuild
by @ruslashev in #4 -
configs: change hostname from "turing pi" to "turingpi" by @ruslashev in #39
-
Remove the helloworld package. by @svenrademakers in #21
-
init: mount correct microSD partition, and only if present by @ruslashev in #38
-
GH-33 updated the buildroot directory to version 2023.02.1 by @svenrademakers in #43
-
init: fix starting bmc daemon on shutdown by @ruslashev in #48
Full Changelog: v1.0.1...v1.0.2