Documentation/Maemo 5 Developer Guide/Architecture/System Software
System software architecture is divided into three subsystems:
System control subsystem is responsible for device state management (DSME), mode control (MCE) and various UI components including system UI, control panel applets and status bar icons. In addition, the system control subsystem includes HAL component for hardware abstraction, maemo-launcher for application startup execution, alarmd for alarm event handling, clockd for time management, iphbd for synchronization and profiled for profile handling. The SC subsystem provides D-Bus interface towards other applications. All the system control components are located in user space.
Energy management subsystem is responsible of battery charging. More specifically, the EM subsystem handles battery voltage monitoring and recognition, charging (via USB) and charger recognition. In addition, battery plugin for HAL is provided to provide standard D-Bus interface towards other applications. For example, the battery applet uses the HAL battery plugin to indicate the battery status in the UI. The EM subsystem components are located both in kernel and user space.
Power management subsystem is located entirely in kernel space. PM subsystem is responsible for putting the OMAP and peripherals into lowest possible power states as often as possible, without compromising performance. To achieve this, all the drivers in the system need to co-operate with the PM subsystem. The PM subsystem is build from standard linux kernel components including clock, CPUIdle and CPUFreq frameworks.
 System Control
Management of user modes and system states is divided to two separate entities; Mode Control Entity (MCE) and Device State Management Entity (DSME). With this differentiation it is possible to maintain and develop user context and system context control scheme without complex overlaps.
 System UI
SystemUI provides services to other components to display UI elements (dialogs, notifications, alarms) that does not have native UI on their own.
 Status Bar and Control Panel plugins
This section describes the various UI elements and widgets that are part of the system control subsystem.
- Status Bar Battery plugin
- Provides battery status settings
- Provides status bar plugin to visualize battery status
- Provides estimation for battery time left for idle and use scenarios
- Control Panel Display plugin
- Provides display and autolock settings
- Provides control panel plugin for:
- display brightness
- brightness period
- switch off period
- screen and key lock when screen goes off
- LED control
- Control Panel Device Lock plugin
- Provides device lock settings
- Provides control panel plugin for
- autolock settings (on/off, period)
- *lock code
Store the settings in DSM Gconf
 Device State Management Entity (DSME)
DSME is responsible of device state management , process lifeguard support, watch dogs and thermal management. DSME architecture is based on modular plugin architecture. DSME core provides message handling capabilities to modules. Each module is dynamically loaded library. DSME runs in a single process. The D-Bus interface provides services to request reboot, shutdown or powerup (from acting dead mode), indication of shutdown, thermal events and data save.
|In Fremantle release onwards, DSME is not part of the initfs anymore. Instead, it is located in the rootfs and started after init.|
- Device State Management Entity
- Provides device state control logic and management interface.
- Provides means for configuration and management interface.
- Provides lifeguard CLI API for system service startup.
- Manages device state including display, watchdog and startup.
 Mode Control Entity (MCE)
MCE is responsible of handling display control (active/dim/blank), activity monitoring (keys, buttons), keyboard backlight, ambient light sensor (ALS), LEDs and device mode control. In addition, MCE is responsible for providing interface to proximity, accelometer and vibra devices.
- Mode Control Entity
- Provides device mode logic and services for DSM interface.
- Provides means for device mode control (Eg: flight mode)
- Provides DSM gconf API for controlling display and security.
- Manages DSM API for applications.
 Hardware Abstraction Layer (HAL)
- Provides hardware abstraction layer for applications.
- Provides unified API for applications to query device properties and receive events for changes.
- Gathers information of devices via various kernel interfaces (sysfs, udev)
 Alarm Daemon (Alarmd)
- Provides centralized place for requesting scheduled events.
- Provides service and API for requesting, changing and deleting scheduled events.
- Uses SystemUI to show dialogs for alarms and calendar events.
 Time Daemon (Clockd)
- Provides centralized place for handling time.
- Provides service and API for requesting, changing and notifying time and timezone changes.
- Provides interface for monitoring network time notifications.
 Profile Daemon (Profiled)
- Provides centralized place for handling (user) profiles related data and notifications.
- Provides service and API for requesting, changing and notifying profile related data.
 Heartbeat Daemon (Heartbeatd)
- Provides service to wake up applications on requested interval, internally groups the wakeups together inorder to save power.
- Provides service and API for requesting, changing and deleting wakeups on specific intervals.
- Uses kernel module to delay TCP keepalives and sends them in bunches.
 Public Interfaces
This section lists the public interfaces provided by the System Control Subsystem.
|DSME API|| Interface for requesting device powerup, shutdown and reboot. |
Interface for thermal management indications.
|Dsmetool CLI||Interface for init scripts to start processes which will be monitored for system robustness.||Socket|
|HAL API||Provides device property information and events about device state changes.||D-Bus or library (libhal)|
|DSM GConf API||Interface for DSM related configuration values (security lock key, display)||GConf|
|MCE API||Interface for requesting display control and lock status, device mode changes and status, inactivity status, and device lock mode and status.||D-Bus|
|Profile API||Interface for requesting display control and lock status, device mode changes and status, inactivity status, and device lock mode and status.||D-Bus|
|Time API||Control and notifications about timezone and time changes.||D-Bus|
|Alarm API||Requesting, changing and deleting alarms.||D-Bus|
|HeartBeat API||Getting heart beat on requested interval.||Socket|
 Energy Management
 Battery management entity (BME)
- Provides battery monitoring and charging service.
- Provides battery identification, monitoring, charging and BME API.
- TSS interface for A/D converter calibration.
- Emulation libraries for Nokia OS services.
 HAL battery addon
- Provides battery information via HAL.
- Provides battery status and type information via HAL.
 Public Interfaces
|Battery HAL API||Battery event API. Provides battery and charger status changes.||HAL/D-Bus|
 Power Management
Power management is part of Linux kernel. Various kernel subsystems and components are used to implement the power management. Some of the components are in mainline Linux while others are ARM/OMAP specific. However, all the components are in some Linux tree and no proprietary subsystems or components are used.
The power management contains the following elements :
- Clock framework including power and clock domain extensions
- CPU Idle
- CPU Freq
- Dynamic tick
- Idle process
- OMAP power management routines (PRCM)
 Kernel power management
Kernel power management has several mechanisms to perform power management. The most commonly used in System Software architecture are listed below.
 Dynamic sleep
In Dynamic sleep, the idle task is used to trigger the check if the system can go into power saving mode. That is, every time the idle task is scheduled to run, the dynamic sleep mechanism tries to put the system into deepest possible sleep mode compatible with the constraints that are currently active. CPU Idle framework is used to implement the dynamic sleep functionality.
 Dynamic Voltage and Frequency Scaling
Dynamic Voltage and Frequency Scaling (DVFS) is the other mechanism to save power. DVFS allows to scale down the SoC’s frequency and voltage at runtime to reduce leakage currents and hence save power. The decision to scale the frequency (and consequently voltage) of the ARM and DSP processors is based on their load, bandwidth and latency constraints. CPU Freq framework is used to implement the DVFS.
 Components and descriptions
 Clock Framework
- Provides clock framework for HW clock management.
- Provides common means for turning HW clocks on and off.
- Provides HW clock sanity checks and use counts.
- Allows power management to probe HW clocks status.
- Handles also clock and power domains, and wakeup and sleep dependencies.
 CPU Idle
- Provides mechanism for selecting and entering the deepest possible sleep state based on the constraints
 CPU Freq
- Provides mechanism for selecting and entering the lowest possible operating point based on the MPU and DSP loads.
- Monitor CPU and DSP load requirements.
- Adjust CPU and DSP frequencies based on load.
 Public Interfaces
|CLK API||Clock framework public API.|
|Contraints API||Interface for drivers for setting constraints on bandwidth and latency to control the target sleep states.|
- This page was last modified on 2 March 2011, at 10:32.
- This page has been accessed 18,753 times.