A Holistic Hardware/Software Update Mechanism for Embedded Systems Leandro Batista Ribeiro, Tobias Scheipel and Marcel Baunach Current embedded systems typically consist of static and closed hardware architectures with components connected to a microcontroller (MCU) on a printed circuit board. Besides these wires on the board, the logic within the MCU is commonly fixed as well, and makes later modifications to the hardware impossible. While the software layer of current embedded systems can be easily updated (e.g., for bugfixes and other improvements), the hardware layer is fully static and immutable. The consequences of buggy logic in deployed MCUs can lead to, e.g., (i) performance degradation (due to of software workarounds), (ii) a waste of hardware resources (in case of no longer required logic or if functionality is fully implemented in software), or (iii) full obsolescence (in case even software implementations cannot fulfil the system requirements). The increasing use of open architectures (e.g., RISC-V) implemented as soft cores on field-programmable gate arrays (FPGAs) opens up a myriad of new possibilities: logic for on-chip peripherals can be added/removed/updated, functionality can be moved from software to hardware and vice versa, and even the instruction set of the MCU can be modified. While logic adaptations can be easily done at design time, they always result in yet another static hardware system. Even if updated logic can be deployed as monolithic bitstreams, partial changes to the logic at runtime are still impossible. To go a step further, we propose a concept for partially modifying software and/or hardware at runtime. Managed by an operating system that keeps track of current requirements, we have added a modular update capability to MCSmartOS and a RISC-V-based architecture. The mechanism receives and installs new software modules as well as partial logic bitstreams and for the MCU. The main goal is to enable on-the-fly hardware and software modifications at runtime, without interrupting the execution of the target system, i.e., the system continues running while software and logic are updated.