Note Framework Configuration
The note framework has two layers:
- Scheduler instrumentation (
sched/Kconfig) - controls what events to capture - Note drivers (
drivers/note/Kconfig,drivers/segger/Kconfig) - controls where data goes
Architecture
sched/Kconfig drivers/note/Kconfig drivers/segger/Kconfig
┌─────────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ SCHED_INSTRUMENTATION│─────────▶│ DRIVERS_NOTERAM │ │ DRIVERS_NOTERTT │
│ _SWITCH │ │ DRIVERS_NOTEFILE │ │ SEGGER_SYSVIEW │
│ _PREEMPTION │ │ DRIVERS_NOTELOG │ └──────────────────┘
│ _CSECTION │ │ DRIVERS_NOTESNAP │
│ _SPINLOCKS │ │ DRIVERS_NOTEITM │
│ _SYSCALL │ │ DRIVERS_NOTERPMSG│
│ _IRQHANDLER │ └──────────────────┘
│ _HEAP │
│ _WDOG │ Each driver auto-selects DRIVERS_NOTE
│ _DUMP │ and SCHED_INSTRUMENTATION
│ _FUNCTION │
│ _FILTER │
└─────────────────────┘
Key: enabling any note driver (e.g. DRIVERS_NOTERAM) auto-selects DRIVERS_NOTE and SCHED_INSTRUMENTATION. But you still need to enable specific event hooks (SWITCH, SYSCALL, etc.) to capture those events.
Common Configuration Recipes
1. Basic Task Tracing (noteram)
Minimal config to trace task start/stop/switch via in-memory buffer:
CONFIG_SCHED_INSTRUMENTATION_SWITCH=y # task suspend/resume
CONFIG_DRIVERS_NOTERAM=y # auto-selects DRIVERS_NOTE + SCHED_INSTRUMENTATION
CONFIG_DRIVERS_NOTERAM_BUFSIZE=4096 # buffer size (default 2048)
2. Full Tracing for Debugging
CONFIG_SCHED_INSTRUMENTATION_SWITCH=y
CONFIG_SCHED_INSTRUMENTATION_PREEMPTION=y
CONFIG_SCHED_INSTRUMENTATION_CSECTION=y
CONFIG_SCHED_INSTRUMENTATION_SYSCALL=y
CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER=y
CONFIG_SCHED_INSTRUMENTATION_HEAP=y
CONFIG_SCHED_INSTRUMENTATION_DUMP=y
CONFIG_SCHED_INSTRUMENTATION_FILTER=y
CONFIG_DRIVERS_NOTERAM=y
CONFIG_DRIVERS_NOTERAM_BUFSIZE=16384
CONFIG_DRIVERS_NOTERAM_CRASH_DUMP=y # dump on panic
3. Segger SystemView
CONFIG_SCHED_INSTRUMENTATION_SWITCH=y
CONFIG_SCHED_INSTRUMENTATION_IRQHANDLER=y
CONFIG_SEGGER_SYSVIEW=y # auto-selects DRIVERS_NOTE + SEGGER_RTT
CONFIG_SEGGER_SYSVIEW_RTT_BUFFER_SIZE=4096
4. RPMSG Note (multi-core)
Send note data from remote core to AP:
# On remote core (sender):
CONFIG_SCHED_INSTRUMENTATION_SWITCH=y
CONFIG_DRIVERS_NOTERPMSG=y
CONFIG_DRIVERS_NOTERPMSG_SERVER_NAME="ap"
CONFIG_DRIVERS_NOTERPMSG_BUFSIZE=2048
CONFIG_DRIVERS_NOTERPMSG_WORK_DELAY=100
# On AP (receiver):
CONFIG_DRIVERS_NOTERPMSG_SERVER=y
CONFIG_DRIVERS_NOTERAM=y
5. Crash Diagnosis Setup
CONFIG_SCHED_INSTRUMENTATION_SWITCH=y
CONFIG_SCHED_INSTRUMENTATION_DUMP=y
CONFIG_DRIVERS_NOTERAM=y
CONFIG_DRIVERS_NOTERAM_BUFSIZE=8192
CONFIG_DRIVERS_NOTERAM_DEFAULT_NOOVERWRITE=y # preserve boot data
CONFIG_DRIVERS_NOTERAM_CRASH_DUMP=y # dump on panic
CONFIG_DRIVERS_NOTESNAP=y # last scheduling snapshot
CONFIG_DRIVERS_NOTESNAP_NBUFFERS=256
CONFIG_DRIVERS_NOTESNAP_CRASH_DUMP=y
6. Function Auto-Tracing
CONFIG_SCHED_INSTRUMENTATION_FUNCTION=y
CONFIG_DRIVERS_NOTERAM=y
CONFIG_DRIVERS_NOTERAM_BUFSIZE=32768 # large buffer needed
Then add to target module Makefile:
CFLAGS += -finstrument-functions
# Exclude specific files:
CFLAGS += -finstrument-functions-exclude-file-list=hot_path.c
# Exclude specific functions:
CFLAGS += -finstrument-functions-exclude-function-list=irq_handler
Filter Configuration
When SCHED_INSTRUMENTATION_FILTER=y, each driver can have its own filter mode and CPU set:
- Filter mode (
*_FILTER_DEFAULT_MODE): hex bitmask perenum note_type_e.0x0= all enabled,0x01= all disabled. - CPU set (
*_CPUSET): hex bitmask for SMP. Bit0=CPU0, Bit1=CPU1. Default0xffff.
Per-driver filter options follow the pattern:
DRIVERS_NOTE<X>_FILTER_DEFAULT_MODE- inherits fromSCHED_INSTRUMENTATION_FILTER_DEFAULT_MODEDRIVERS_NOTE<X>_CPUSET- inherits fromSCHED_INSTRUMENTATION_CPUSET
Drivers with filter support: NOTERAM (global), NOTELOWEROUT, NOTEFILE, NOTELOG, NOTESNAP, NOTERPMSG, NOTERTT, SEGGER_SYSVIEW.
Driver Selection Guide
| Driver | Output | Use Case |
|---|---|---|
| NOTERAM | In-memory circular buffer (/dev/note/ram) | Default, read via app or crash dump |
| NOTEFILE | File/device path | Stream to serial/file |
| NOTELOG | Syslog | Integrate with system logging |
| NOTESNAP | Last-N scheduling records | Crash post-mortem |
| NOTERTT | Segger J-Link RTT | Real-time via J-Link |
| SYSVIEW | Segger SystemView | Visual timeline analysis |
| NOTERPMSG | RPMSG to remote core | Multi-core tracing |
| NOTEITM | ARM CoreSight ITM | Hardware trace port |
| NOTELOWEROUT | Lower output interface | Custom output backend |
Multiple drivers can be active simultaneously (up to DRIVERS_NOTE_MAX).
Reference
For complete Kconfig option details (types, defaults, dependencies), see references/kconfig-options.md.
