A readable boot dashboard for display-only eng builds (e.g. minimal.*).
On products without a UI stack, the only thing on the panel is virtcon‘s logo tab, which is unreadable on a small, high-DPI display. devscreen is a small Carnelian app that runs directly on the display coordinator above virtcon’s priority (TEST_UTILITY_CLIENT_PRIORITY_VALUE) and shows, in large type:
fuchsia.feedback.LastRebootInfoProvider; red when ungraceful)fuchsia.wlan.policy.ClientProvider). SSIDs are never shown. On builds where nothing else starts client connections, devscreen calls StartClientConnections once so a scan is possible.+ charging), pack temperature coloured by the driver's health band (straight from fuchsia.hardware.power.battery, no battery-manager needed)fuchsia.hardware.power.charger). On minimal nothing programs the charger, so the pack floats at the default voltage and never reports Full; this row shows why.fuchsia.hardware.cpu.ctrl)and four buttons:
fuchsia.feedback.DataProvider.GetSnapshot, saved to the component's data storage; the newest five are kept. Fetch with ffx component storage copy /core/devscreen::/snapshot-<uptime>.zip . (ffx component storage list /core/devscreen::/ to see them).Admin.RebootToBootloader (two taps to confirm)Admin.PerformReboot (two taps to confirm)ffx component start /core/devscreen.Every data source is optional: every use is availability: "optional" and the core shard offers from #feedback, #wlancfg, #wlandevicemonitor etc. with source_availability: "unknown", so a product that lacks any of them still starts devscreen and shows N/A for that row.
Driver-backed readings (battery, charger, temperature, CPU clocks) are collected on their own task: a driver that is slow, hung or restarted (for example by a driver test) cannot stall the dashboard, and new driver instances are picked up again within a few seconds.
devscreen ships as the devscreen assembly input bundle and is off by default on every product. Turn it on with the platform configuration knob platform.development_support.include_devscreen (standard eng builds only; it is never included on user or userdebug builds).
To try it on minimal without touching product configuration, use a developer override (//local/BUILD.gn):
import("//build/assembly/developer_overrides.gni") assembly_developer_overrides("devscreen") { platform = { development_support = { include_devscreen = true } } }
and fx set ... --assembly-override //local:devscreen.
Products opt in by setting the same key in their product configuration.
ffx log --filter devscreen dump ffx component show /core/devscreen ffx component start /core/devscreen # after VIRTCON ffx component stop /core/devscreen # hand the panel back to virtcon
ffx component start /core/devscreen from the host. A hardware-button chord needs a long-lived process that does not own the display (follow-up).ffx log shows touch down at (x, y) hit no button lines with the coordinates.