Deployment to Device
Deploy via Complete Firmware
The recommended production deployment method is to build or download a complete firmware image with overlay and flash it to the device. The firmware will place the following content into the target filesystem:
/oem/usr/bin/ # Application binaries
/etc/init.d/S39hciinit # AIC8800 UART/HCI initialization
/etc/init.d/S40bluetoothd # BlueZ with persistent pairing state
/etc/init.d/S41ble_service # BLE Wake/ANCS service watchdog
/etc/init.d/S43wlan_guard # WLAN connectivity guard
/etc/init.d/S49ntp # ntpd daemon
/etc/init.d/S49usbhid # USB HID gadget initialization
/etc/init.d/S50ntp_watchdog # NTP sync periodic check, triggers step when not synced
/etc/init.d/S52frame_service # Frame Service watchdog
/etc/init.d/S53adb_server # Delayed adb host server bootstrap
/etc/init.d/S53audio_service # Audio Service watchdog
/etc/init.d/S53agent # Go Agent watchdog
/etc/init.d/S56config_web # Configuration web page
/etc/init.d/S99rtcinit # RTC default time calibration, overrides SDK default script
/userdata/agent/agent.toml # Agent default configuration
/userdata/wpa_supplicant.conf # Wi-Fi default configuration
Manual Binary Copy
After ./build.sh completes, the main artifacts are in build/bin/. The ones directly related to device resident services are:
build/bin/frame_servicebuild/bin/audio_servicebuild/bin/ble_servicebuild/bin/config_webbuild/bin/agentoverlay/oem/usr/bin/aiden-env-run
If the target device has already been flashed with an Aiden firmware version, the init scripts and /etc/*.conf typically already exist. In this case, the minimal deployment set is the above runtime files:
./build.sh
scp build/bin/frame_service root@<device-ip>:/oem/usr/bin/
scp build/bin/audio_service root@<device-ip>:/oem/usr/bin/
scp build/bin/ble_service root@<device-ip>:/oem/usr/bin/
scp build/bin/config_web root@<device-ip>:/oem/usr/bin/
scp build/bin/agent root@<device-ip>:/oem/usr/bin/
scp overlay/oem/usr/bin/aiden-env-run root@<device-ip>:/oem/usr/bin/
If you also need device-side troubleshooting/debugging tools, optionally copy:
scp build/bin/frame_service_cli root@<device-ip>:/oem/usr/bin/
scp build/bin/audio_service_cli root@<device-ip>:/oem/usr/bin/
scp build/bin/ota root@<device-ip>:/oem/usr/bin/
scp build/bin/abctl root@<device-ip>:/oem/usr/bin/
If the target device is a more bare system lacking Aiden's init scripts and configuration files, you'll also need to copy these runtime files:
scp overlay/etc/init.d/S52frame_service root@<device-ip>:/etc/init.d/
scp overlay/etc/init.d/S53adb_server root@<device-ip>:/etc/init.d/
scp overlay/etc/init.d/S53audio_service root@<device-ip>:/etc/init.d/
scp overlay/etc/init.d/S39hciinit root@<device-ip>:/etc/init.d/
scp overlay/etc/init.d/S40bluetoothd root@<device-ip>:/etc/init.d/
scp overlay/etc/init.d/S41ble_service root@<device-ip>:/etc/init.d/
scp overlay/etc/init.d/S53agent root@<device-ip>:/etc/init.d/
scp overlay/etc/init.d/S56config_web root@<device-ip>:/etc/init.d/
scp overlay/etc/aiden_frame_service.conf root@<device-ip>:/etc/
scp overlay/etc/aiden_audio_service.conf root@<device-ip>:/etc/
scp overlay/etc/aiden_ble_service.conf root@<device-ip>:/etc/
scp overlay/etc/bluetooth/main.conf root@<device-ip>:/etc/bluetooth/
First deployment typically also requires preparing the default configuration under /userdata:
ssh root@<device-ip> "mkdir -p /userdata/agent /userdata/system"
scp overlay/userdata/agent/agent.toml root@<device-ip>:/userdata/agent/
scp overlay/userdata/system/env root@<device-ip>:/userdata/system/
scp overlay/userdata/wpa_supplicant.conf root@<device-ip>:/userdata/
Notes:
- Config Web calls the
/oem/usr/bin/agentconfig,config-check, andconfig-metasubcommands, so copyagentwhenever copyingconfig_web. S52frame_service,S53adb_server,S53audio_service,S53agent, andS56config_weball launch the actual binaries or commands via/oem/usr/bin/aiden-env-runwhen available, so this wrapper must also be present on the device.- You can also copy binaries to
/rootor/userdatafor temporary testing, but existing init scripts default to searching/oem/usr/bin/. - If only updating binaries, run
chmod +x /oem/usr/bin/*once after copying.
After copying, common restart commands:
ssh root@<device-ip> "chmod +x /etc/init.d/S39hciinit /etc/init.d/S40bluetoothd /etc/init.d/S41ble_service /etc/init.d/S52frame_service /etc/init.d/S53adb_server /etc/init.d/S53audio_service /etc/init.d/S53agent /etc/init.d/S56config_web /oem/usr/bin/frame_service /oem/usr/bin/audio_service /oem/usr/bin/ble_service /oem/usr/bin/config_web /oem/usr/bin/agent /oem/usr/bin/aiden-env-run"
ssh root@<device-ip> "/etc/init.d/S52frame_service restart"
ssh root@<device-ip> "/etc/init.d/S53audio_service restart"
ssh root@<device-ip> "/etc/init.d/S53agent restart"
ssh root@<device-ip> "/etc/init.d/S56config_web restart"
Service Startup Order
When starting with the firmware, the main service relationships are as follows:
S35wifidrvloads the AIC8800 combo firmware;S39hciinitattaches/dev/ttyS1and brings uphci0;S40bluetoothdstarts BlueZ with its pairing state under/userdata;S41ble_serviceregisters the Wake GATT service and ANCS consumer;S43wlan_guardmonitors WLAN connectivity and recovers automatically;S49ntpstartsntpdin daemon mode, using direct IP connection to NTP server (bypassing DNS startup order);S50ntp_watchdogperiodically checks clock sync status, triggersS49ntp stepto force sync when not synced, exits after sync;S49usbhid/S50usbdeviceconfigures USB gadget;S52frame_serviceexclusively uses/dev/video0and provides screenshot/frame service;S53adb_serverwaits 3 seconds, then runsadb start-serveronce so adb-based Android capture is ready;S53audio_serviceprovides audio recording/playback service;S53agentstarts the Go Agent;S55aiden_usb_dhcpconfigures USB network DHCP / dnsmasq related capabilities;S56config_webprovides the configuration page;S99rtcinitoverrides the SDK default RTC script; when RTC is abnormal, only writes default time when system time is still earlier than baseline date, avoiding overwriting system time already calibrated by NTP.S99usb0configperforms USB network interface post-configuration.
Common Service Commands
/etc/init.d/S52frame_service status
/etc/init.d/S52frame_service restart
/etc/init.d/S53adb_server status
/etc/init.d/S53audio_service status
/etc/init.d/S53audio_service restart
/etc/init.d/S39hciinit status
/etc/init.d/S40bluetoothd status
/etc/init.d/S41ble_service status
/etc/init.d/S53agent status
/etc/init.d/S53agent restart
/etc/init.d/S56config_web restart
Key Configuration Files
| File | Description |
|---|---|
/etc/aiden_frame_service.conf | frame service binary, socket, log, pid file paths |
/etc/aiden_audio_service.conf | audio service binary, socket, log, pid file paths |
/etc/aiden_ble_service.conf | BLE service binary, socket, log, device-name base, event capacity, and pairing-window duration |
/userdata/agent/agent.toml | Go Agent runtime configuration |
/userdata/wpa_supplicant.conf | Wi-Fi configuration |
Log Locations
| Service | Log |
|---|---|
| Frame Service | /var/log/frame_service/frame_service.log |
| adb delayed startup | /var/log/adb/adb-startup.log |
| Audio Service | /var/log/audio_service/audio_service.log |
| Bluetooth HCI | /var/log/aiden-hciattach.log |
| BlueZ | /var/log/bluetoothd/bluetoothd.log |
| BLE Service | /var/log/ble_service/ble_service.log |
| Agent | /userdata/agent/log/agent.log |
Notes
- While
frame_serviceis running, it exclusively uses/dev/video0. Directly runningexample_camera_capturewill result inDevice or resource busy; the service must be stopped first. - The
agent'sscreenshottool depends onframe_service; voice and volume tools depend onaudio_service. - After modifying
/userdata/agent/agent.toml, the Agent must be restarted.