SDK upgrade guide
nRF Connect SDK 2.6 to nRF Connect SDK 2.7: what needs attention
Migratorisk's knowledge base lists 16 documented changes between nRF Connect SDK 2.6 and nRF Connect SDK 2.7 across 2 releases. 12 of them are rated likely to break code, configuration or builds that use them. Below is each change, what a scan also reviews on this path, and how to see which ones apply to your project.
Find which of these affect your firmware
Migratorisk scans your project on your own computer and reports only the changes your code, configuration and build actually touch. Your source code is not uploaded.
python -m pip install migratorisk migratorisk scan --project ./your-firmware --from ncs-2.6.0 --to ncs-2.7.0 --out report.html
Requires Python 3.12 or newer. Results are free and complete without sign-up; sharing a report with us is optional.
Set up the local scanOr answer a few questions insteadWhere the changes are
What changes between nRF Connect SDK 2.6 and nRF Connect SDK 2.7
Ordered by impact. Each item names the release that introduced it and links to the official source. A change only matters if your project uses what changed; the scan checks that.
Kconfig options CONFIG_BT_MESH_TX_SEG_RETRANS_COUNT and 4 more were removed
Removed the CONFIG_BT_MESH_TX_SEG_RETRANS_COUNT, CONFIG_BT_MESH_TX_SEG_RETRANS_TIMEOUT_UNICAST, CONFIG_BT_MESH_TX_SEG_RETRANS_TIMEOUT_GROUP, CONFIG_BT_MESH_SEG_ACK_BASE_TIMEOUT, CONFIG_BT_MESH_SEG_ACK_PER_HOP_TIMEOUT, BT_MESH_SEG_ACK_PER_SEGMENT_TIMEOUT Kconfig options. Covers 5 names.
FEM tx gain functions replaced
NCS 2.7 replaces fem_tx_gain_set() with fem_tx_power_control_set() and fem_default_tx_gain_get() with fem_default_tx_output_power_get(). Covers 2 names.
Kconfig options CONFIG_BT_HCI_RESERVE and 1 more were removed
The CONFIG_BT_HCI_RESERVE and CONFIG_BT_HCI_RAW_RESERVE Kconfig options were removed. All buffers get by default one byte of headroom now, which HCI transport implementations can rely on (whether they need it or not). Covers 2 names.
Kconfig options CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_DYNAMIC and 1 more were renamed
The CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_DYNAMIC and CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC zbus options are renamed. Instead, the new CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC and CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC options should be used. Covers 2 names.
API ZSR_ALLOCA was renamed
Scratch registers ZSR_ALLOCA has been renamed to ZSR_A0SAVE.
API lorawan_set_battery_level_callback was renamed
The API to register a callback to provide battery level information to the LoRaWAN stack has been renamed from lorawan_set_battery_level_callback to lorawan_register_battery_level_callback and the return type is now void. This is more consistent with similar functions for downlink and data rate changed callbacks.
Devicetree compatible zephyr,native-posix-linux-can was renamed
The devicetree compatible was renamed from zephyr,native-posix-linux-can to zephyr,native-linux-can.
Kconfig option CONFIG_BT_RPMSG was renamed
The HCI implementation for both the Host and the Controller sides has been renamed for the IPC transport. The CONFIG_BT_RPMSG Kconfig option is now CONFIG_BT_HCI_IPC, and the zephyr,bt-hci-rpmsg-ipc Devicetree chosen is now zephyr,bt-hci-ipc. The existing sample has also been renamed, from samples/bluetooth/hci_rpmsg to samples/bluetooth/hci_ipc.
Kconfig option CONFIG_CAN_NATIVE_POSIX_LINUX was renamed
The main Kconfig option was renamed from CONFIG_CAN_NATIVE_POSIX_LINUX to CONFIG_CAN_NATIVE_LINUX.
Kconfig option CONFIG_COAP_OBSERVER_EVENTS was removed
CoAP observer events have moved from a callback function in a CoAP resource to the Network Events subsystem. The CONFIG_COAP_OBSERVER_EVENTS configuration option has been removed.
Kconfig option CONFIG_ZEPHYR_TRY_MASS_ERASE was removed
MCUboot's deprecated CONFIG_ZEPHYR_TRY_MASS_ERASE Kconfig option has been removed. If an erase is needed when flashing MCUboot, this should now be provided directly to the west command e.g. west flash --erase.
MQTT helper certificate file option replaced by a folder
NCS 2.7 replaces CONFIG_MQTT_HELPER_CERTIFICATES_FILE with CONFIG_MQTT_HELPER_CERTIFICATES_FOLDER, and provisioned certificates must be standard PEM files.
IPC radio is the default network-core image
NCS 2.7 builds ipc_radio as the default network/radio core image for multi-core SoCs instead of hci_ipc/hci_rpmsg, 802154_rpmsg or multiprotocol_rpmsg. Covers 4 names.
Matter factory data and OTA options moved to sysbuild
NCS 2.7 deprecates CONFIG_CHIP_FACTORY_DATA_BUILD, CONFIG_CHIP_FACTORY_DATA_MERGE_WITH_FIRMWARE and CONFIG_CHIP_OTA_IMAGE_FILE_NAME in favour of SB_CONFIG_MATTER_* sysbuild options. Covers 3 names.
dfu_application.zip format version changed
NCS 2.7 generates dfu_application.zip with format version 1 (new manifest and file names); DFU host tools must support it. Covers 2 names.
Modem trace UART backend option deprecated
NCS 2.7 deprecates CONFIG_NRF_MODEM_LIB_TRACE_BACKEND_UART_ZEPHYR; use the nrf91-modem-trace-uart snippet.
What a scan of this path also reviews
Beyond the documented changes, Migratorisk reviews these upgrade risks for nRF Connect SDK projects on this path. Each one is reported only when the project shows the trigger.
Custom board must be ported to hardware model v2
When it applies: The project contains a custom board definition and the selected path crosses NCS 2.7.0, which introduced hardware model v2.
Why it matters: Board directory layout, naming, board.yml and Kconfig files changed with hardware model v2, so v1 boards must be ported before other build errors are meaningful.
What to do: Port the custom board to hardware model v2 (board.yml, board directory layout, SoC and revision naming) before debugging application-level errors.
Devicetree binding error in build log
When it applies: The build log reports a devicetree binding error.
Why it matters: Bindings and compatibles change between releases; overlay and board errors must be fixed before source-level errors are meaningful.
What to do: Update overlays and board files to the target release bindings before addressing source errors.
Undefined Kconfig symbol in build log
When it applies: The build log reports an assignment to an undefined Kconfig symbol.
Why it matters: Symbols are renamed or removed between NCS releases; Kconfig errors stop the build before later problems appear.
What to do: Look up each undefined symbol in the migration notes of every release on the path and replace or remove it.
Multi-image (child image) build must move to sysbuild
When it applies: The project uses child image configuration and the selected path crosses NCS 2.7.0, where sysbuild replaces the child and parent image system.
Why it matters: MCUboot settings that are not moved to sysbuild are replaced by sysbuild defaults, which can make new firmware updates incompatible with images built by earlier NCS versions.
What to do: Move child_image/*.conf settings into sysbuild (sysbuild.conf and sysbuild/<image>.conf) and keep the MCUboot mode, signature type, key and slot layout identical to the field firmware.
MCUboot enabled in application config must move to sysbuild
When it applies: CONFIG_BOOTLOADER_MCUBOOT is set in an image configuration while the selected path crosses NCS 2.7.0.
Why it matters: From NCS 2.7.0 the bootloader is selected at sysbuild level (SB_CONFIG_BOOTLOADER_MCUBOOT); image-level MCUboot settings are otherwise overridden by sysbuild defaults.
What to do: Enable MCUboot with SB_CONFIG_BOOTLOADER_MCUBOOT in sysbuild.conf and carry over the MCUboot mode, signature type and key path at sysbuild level.
Verify OTA from the current field firmware
When it applies: The project uses MCUboot, so devices in the field keep their current bootloader after the upgrade.
Why it matters: The new application image must still be accepted by the existing bootloader (signature type, key, slot layout and image header).
What to do: Keep the signing key, signature type and slot layout unchanged and test an OTA update from the current production image to the upgraded image on hardware.
Static partition layout must stay identical across the upgrade
When it applies: pm_static.yml fixes the flash layout used by devices in the field.
Why it matters: Minor releases can change default partition sizes or image composition; any address change breaks OTA compatibility with devices in the field.
What to do: Compare the generated partition report before and after the upgrade and keep MCUboot slots, settings and storage partitions at the same addresses and sizes.
West manifest references an older SDK revision
When it applies: west.yml pins an NCS or Zephyr revision.
Why it matters: The manifest must point at the target release, and pinned module revisions must match it.
What to do: Update the sdk-nrf revision in west.yml to the target release tag, re-check pinned modules, then run west update.
Signing key configured in project files
When it applies: A signing key path is configured in the project.
Why it matters: The same key must keep signing upgraded images so bootloaders in the field accept them; production keys should not live in shared project files.
What to do: Confirm the production signing key and signature type are unchanged for the upgraded build and kept outside shared repositories.
Fix the first build error first
When it applies: The build log contains errors.
Why it matters: Later errors in an SDK upgrade are often caused by the first configuration or devicetree failure.
What to do: Resolve the first reported error, rebuild, and re-run the scan with the new build log.
VelocityCreate
Want us to handle the upgrade?
VelocityCreate can review your assessment, agree on the migration scope, and carry out the firmware changes and agreed verification. Discuss your deadline, hardware, and requirements with an embedded engineer.
Discuss my migrationBook a technical callThe initial discussion is free. Implementation is quoted separately.
Related upgrade paths
- nRF Connect SDK 2.6 to nRF Connect SDK 3.0
- nRF Connect SDK 2.6 to nRF Connect SDK 3.4
- nRF Connect SDK 2.5 to nRF Connect SDK 2.6
- nRF Connect SDK 2.7 to nRF Connect SDK 2.8
Generated from the rule catalog of Migratorisk 0.3.0. This is an automated summary of published SDK changes, not a review of your project, and it does not replace builds and device tests. How the scanner is validated.