Firmware Development
For Non-Firmware Engineers
Agenda
Firmware Design
Firmware Design Goals
Firmware Concepts
Firmware Concepts - App
Firmware Concepts - Worker
Firmware Concepts - Modals
Firmware Concepts - Services
Firmware Concepts - Applib
Firmware Concepts - Exported Symbols
}, {� "type": "function",� "name": "graphics_draw_text",� "addedRevision": "4"�}, {�
Firmware Concepts - Syscalls
DEFINE_SYSCALL(void, sys_get_app_uuid, Uuid *uuid) {� if (PRIVILEGE_WAS_ELEVATED) {� syscall_assert_userspace_buffer(uuid, sizeof(*uuid));� }�� *uuid = app_manager_get_current_app_md()->uuid;�}�
Services
Applib
3rd Party
Apps
System
Apps
Exported
Symbols
Syscalls
Firmware Concepts - Tasks
Firmware Concepts - Resources
Firmware Concepts - Build Configuration
Firmware Concepts - Board
Firmware Concepts - Shells
Building Firmware
Building Firmware
Building Firmware - Bigboard
Building Firmware - Bigboard
Building Firmware - QEMU
Building Firmware - QEMU
Debugging Firmware
Debugging Firmware - Logging
Debugging Firmware - Logging
* M 15:14:52.777 main.c:114> __TINTIN__� * M 15:14:52.781 main.c:116> v3.11-beta1-13-g1f2d9c4� * M 15:14:52.785 main.c:117> (c) 2013 Pebble� * M 15:14:52.785 main.c:118>� I M 15:14:52.785 clocksource.c:29> LSE oscillator already running� D M 15:14:52.789 rtc.c:50> Current time is <Wed Mar 16 15:14:52 2016>� D M 15:14:52.792 new_timer.c:398> NT: Initializing� D M 15:14:52.796 accessory.c:292> Changing accessory connector baud rate to 115200�
Debugging Firmware - GDB
Distributing Firmware
Debugging Firmware - Flash Logging
Debugging Firmware
* M 15:14:52.777 main.c:114> __TINTIN__� * M 15:14:52.781 main.c:116> v3.11-beta1-13-g1f2d9c4� * M 15:14:52.785 main.c:117> (c) 2013 Pebble� * M 15:14:52.785 main.c:118>� I M 15:14:52.785 clocksource.c:29> LSE oscillator already running� D M 15:14:52.789 rtc.c:50> Current time is <Wed Mar 16 15:14:52 2016>� D M 15:14:52.792 new_timer.c:398> NT: Initializing� D M 15:14:52.796 accessory.c:292> Changing accessory connector baud rate to 115200�
Debugging Firmware - Log Hashing
* M 15:15:19.226 :0> NL:b1c3�* M 15:15:19.226 :0> NL:b1ea `v3.11-beta1-13-g1f2d9c4`�* M 15:15:19.230 :0> NL:b209�* M 15:15:19.230 :0> NL:b235�I M 15:15:19.234 :0> NL:cf75�D M 15:15:19.234 :0> NL:cf34 `Wed Mar 16 15:15:19 2016`�D M 15:15:19.238 :0> NL:13fa0�D M 15:15:19.242 :0> NL:b3fd 1c200�
Debugging Firmware - Log Hashing
I M 15:14:52.824 debug.c:185> BUILD ID: 89ffde64bee1ed31bae11eeee0226caf31e82f07�
Distributing Firmware - Hagen Daas
Distributing Firmware - Hagen Daas
Distributing Firmware - Core Dumps and pbldebug
Debugging Firmware - Automated Tests
Debugging Firmware - Unit Tests
Debugging Firmware - Integration Tests
Debugging Firmware - Phabricator
You now know…
So go make some changes to firmware already!