Technical Details

Dependency Graph

Below is a modified dependency graph of the pt-os top-level package that is installed on top of Raspberry Pi OS to produce pi-topOS:

pt-ospt-ospt-ospt-recoverypt-recoverypt-os->pt-recoverypt-os-modspt-os-modspt-os->pt-os-modspt-sys-oledpt-sys-oledpt-os->pt-sys-oledpt-touchscreenpt-touchscreenpt-os->pt-touchscreenpt-appspt-appspt-os->pt-appspt-avspt-avspt-os->pt-avspt-devpt-devpt-os->pt-devpt-devicespt-devicespt-os->pt-devicespt-uipt-uipt-os->pt-uipt-web-portalpt-web-portalpt-os->pt-web-portalpt-user-libspt-user-libspt-os->pt-user-libsneofetchneofetchpt-os->neofetch(>= 6.0.0)pt-firmware-updaterpt-firmware-updaterpt-os->pt-firmware-updaterpt-networkingpt-networkingpt-os->pt-networkingpt-os-updaterpt-os-updaterpt-os->pt-os-updaterpt-os-mods->pt-sys-oledpython3-pitoppython3-pitoppt-os-mods->python3-pitoppt-notificationspt-notificationspt-os-mods->pt-notificationssonic-pisonic-pipt-os-mods->sonic-pipt-device-managerpt-device-managerpt-os-mods->pt-device-managerpt-os-mods->pt-touchscreenpt-os-archive-keyringpt-os-archive-keyringpt-os-mods->pt-os-archive-keyringpt-sys-oled->python3-pitoppython3-luma-oledpython3-luma-oledpt-sys-oled->python3-luma-oledpython3-pitopcommonpython3-pitopcommonpt-sys-oled->python3-pitopcommonautorandrautorandrpt-sys-oled->autorandr(>= 1.9)pt-further-linkpt-further-linkpt-sys-oled->pt-further-linkpython3-luma-corepython3-luma-corepython3-pitop->python3-luma-corepython3-pitop->python3-luma-oledpython3-pitop->python3-pitopcommonpython3-pitop->pt-device-managerpython3-luma-oled->python3-luma-core(>= 1.12.0)python3-pitopcommon->pt-notificationspython3-sonicpython3-sonicpython3-sonic->sonic-pipt-device-manager->python3-pitopcommonpt-further-link->python3-pitopcommontoucheggtoucheggpt-touchscreen->toucheggpt-apps->sonic-picodecodept-apps->codept-settingspt-settingspt-apps->pt-settingstouchetouchept-apps->touchept-avs->python3-pitoppt-settings->python3-pitoptouche->toucheggpt-system-toolspt-system-toolspt-dev->pt-system-toolspt-system-tools->pt-notificationspt-devices->python3-pitoppt-devices->pt-device-managerpt-ui->autorandrpt-plym-splashpt-plym-splashpt-ui->pt-plym-splashpt-ui-modspt-ui-modspt-ui->pt-ui-modspt-web-portal-desktoppt-web-portal-desktoppt-ui->pt-web-portal-desktoppt-ui-mods->python3-pitopcommonpt-ui-mods->pt-notificationspapirus-folderspapirus-folderspt-ui-mods->papirus-folderspt-icon-themept-icon-themept-ui-mods->pt-icon-themepython3-pitop-docpython3-pitop-docpt-ui-mods->python3-pitop-docpt-shutdown-helperpt-shutdown-helperpt-ui-mods->pt-shutdown-helperraspi2pngraspi2pngpt-ui-mods->raspi2pngpapirus-icon-themepapirus-icon-themepapirus-folders->papirus-icon-theme(>= 20171007)pt-icon-theme->papirus-icon-themept-web-portal-desktop->pt-web-portalweb-rendererweb-rendererpt-web-portal-desktop->web-rendererpt-web-portal->python3-pitopcommonpt-user-libs->python3-sonicpython3-pitop-fullpython3-pitop-fullpt-user-libs->python3-pitop-fullpython3-pitop-migrpython3-pitop-migrpt-user-libs->python3-pitop-migrpython3-pitop-full->python3-pitop(= 0.18.5)python3-pitop-full->python3-pitop-doc(= 0.18.5)python3-pitop-migr->python3-pitoppython3-pitop-migr->python3-sonicpt-firmware-updater->python3-pitoppt-firmware-updater->python3-pitopcommonpt-firmware-updater->pt-notificationsi2c-tools-extrai2c-tools-extrapt-firmware-updater->i2c-tools-extrapt-firmware-imagespt-firmware-imagespt-firmware-updater->pt-firmware-imagespt-firmware-images->pt-firmware-updaterpt-os-updater->python3-pitopcommonpt-os-updater->pt-notifications

Table Of pi-top Software Packages

Here is an outline of how the packages are organized:

Core Packages / System Management

  • pt-os-core

Theming

  • pt-icon-theme
  • pt-plym-splash
  • pt-ui-mods

Desktop

  • pt-notifications
  • pt-system-tools

GUIs

  • pt-shutdown-helper
  • web-renderer

Hardware

  • i2c-tools-extra (Additional I2C utilities)
  • pt-sys-oled
  • pt-touchscreen

Here is a more comprehensive guide (work in progress) of the packages that currently comprise pi-topOS:

Source PackageBinary Package(s)Repository
pt-avs
  • pt-avs
Link
i2c-tools-extra
  • i2c-tools-extra
Link
luma.core
  • python3-luma-core
Link
luma.oled
  • python3-luma-oled
Link
notify-send.sh
  • notify-send-ng
Link
raspi2png
  • raspi2png
Link
py-pitop-common
  • python3-pitopcommon
Link
py-pitop-sdk
  • py-pitop-sdk
  • python3-pitop-full
Link
pt-device-manager
  • pt-device-manager
pt-display-port
  • pt-display-port
  • pt-dp-usb-eth-gadget
  • pt-dp-dhcp-server
pt-firmware-images
  • pt-firmware-images
pt-firmware-updater
  • pt-firmware-updater
pt-further-link
  • pt-further-link
Link
pt-icon-theme
  • pt-icon-theme
Link
pt-networking
  • pt-networking
Link
pt-os-core
  • pt-os-core
  • pt-os
  • pt-apps
  • pt-dev
  • pt-devices
  • pt-ui
  • pt-user-libs
  • pt-os-archive-keyring
  • pi-top-4
  • pt-system-tools
  • pt-notifications
pt-os-mods
  • pt-os-mods
pt-plym-splash
  • pt-plym-splash
Link
pt-recovery
  • pt-recovery
pt-shutdown-helper
  • pt-shutdown-helper
Link
pt-sys-oled
  • pt-sys-oled
Link
pt-touchscreen
  • pt-touchscreen
Link
pt-ui-mods
  • pt-ui-mods
Link
pt-web-portal
  • pt-web-portal
  • pt-web-portal-desktop
pt-wireless-access-point
  • pt-wireless-access-point
web-renderer
  • web-renderer
Link

OS build process

In addition to installing the pt-os package, which in turn installs all other pi-topOS packages, the following changes are made during OS builds:

  • Change the default pi user password to pi-top
  • Enable VNC Server by default
  • Add pi-top software repository
  • Force HDMI out of HDMI1 on Raspberry Pi 4 to allow for VNC without a connected display
  • Force HDMI blanking
  • Enable hardware interfaces (SPI, I2C) used by pi-tops by default to allow detection on first boot
  • Enable extra video codecs in Raspberry Pi GPU firmware; adding native support for Raspberry Pi Camera
  • Sette GPU memory allocation to 128MB
  • Configure a DHCP server on pi-top [4]’s USB-OTG port
  • Sette up dynamic swap for better performance
  • Change hostname from 'raspberrypi' to 'pi-top' Setting default locale and keyboard layout to US
  • Customize color scheme, font and icons

Device Drivers

TODO: how device manager, SDK, common library and pi-top hardware all work together

TODO: how pi-topOS software hot-loads kernel modules using dtoverlay and dtparam for hardware interfaces. how interfaces are enabled/disabled or handled automatically

  • I2C
  • UART - pi-topPULSE microphone
  • SPI - pi-top [4] miniscreen
  • I2S - pi-topPULSE and pi-topSPEAKER
    • pi-top [3]'s onboard HDMI-to-I2S conversion
    • enabling volume control with hifiberry-alsactl.restore

TODO: communication protocols (e.g. ZMQ, udev, systemd), which modules require them, why, and how to handle strange "gotchas".