Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
d086f2a
packaging: add gen-rodata-ld tool
pennam Feb 5, 2026
cbeea18
misc: Implement two-pass linking to separate rodata sections.
iabdalkader Nov 3, 2025
82fd964
platform: let older toolchains merge rodata
pillo79 Feb 16, 2026
990cb59
ci: remove Ethernet examples from known issues list
pillo79 Feb 16, 2026
0e4d567
platform.txt: Add missing -Os to cflags.
iabdalkader Feb 18, 2026
5f535d6
doc: add instructions to use custom core in arduino app lab
leonardocavagnis Feb 19, 2026
2891f19
ci: remove install remoteocd script
dido18 Feb 24, 2026
74672d6
ci: remove install pyocd
dido18 Feb 24, 2026
d4e9210
treewide: fix SPDX tags on existing files
pillo79 Feb 25, 2026
a0cb759
loader/blobs: additional docs for c33_bl.bin
pillo79 Feb 11, 2026
ddb0398
libraries: add missing SPDX license identifiers
pillo79 Feb 19, 2026
4546085
ci/license_check: switch to scancode-action and custom checks
pillo79 Feb 19, 2026
a6133ff
prj: move CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE to prj.conf
pennam Feb 20, 2026
15f296d
prj: avoid llext ro data relocation
pennam Feb 20, 2026
44327ce
doc: tick Relocate RODATA item in upcoming features list
pennam Feb 26, 2026
d0a13c6
unoq: enable i2c target
pennam Feb 27, 2026
5e3be77
cores: arduino: Arduino.h: Fix typo
soburi Mar 1, 2026
04ad96b
llext: libc: Added missing lib exports
andreagilardoni Mar 2, 2026
f9b7789
llext: adding missing time functions export
andreagilardoni Feb 25, 2026
27f4278
llext: add missing ldexp libc function export
andreagilardoni Feb 27, 2026
02ac2e3
ci/package_core: cleanup test results only on positive result
pillo79 Feb 26, 2026
57dcdd2
leave_pr_comment: only run if PR_NUM is set
pillo79 Mar 3, 2026
8397f02
scancode: fix new file detection to ignore submodules
pillo79 Mar 4, 2026
c404256
scancode: skip processing if no new files found
pillo79 Feb 26, 2026
b6a5dfc
core: update to zephyr 4.3.0+
facchinm Jan 8, 2026
f69d2d1
wifi: airoc: fix for zephyr v4.3.0+
facchinm Jan 8, 2026
831597d
camera: stm32: fix for zephyr v4.3.0+
facchinm Jan 8, 2026
1c25aa2
overlay: stm32: fix for zephyr v4.3.0+
facchinm Jan 8, 2026
f6ed4ed
conf: all: switch to USB_NEXT for zephyr v4.3.0+
facchinm Jan 8, 2026
5e822dc
loader: disable usb before jumping to sketch
facchinm Jan 9, 2026
03a3a31
variants: stm32h7: specify flash bank2 size
facchinm Jan 9, 2026
afe2da3
overlays: formatting
facchinm Jan 9, 2026
e33afdc
variants: complete switch to USB_NEXT on supported boards
facchinm Jan 9, 2026
d174b8a
cores: provide long-call veneers for libc functions.
iabdalkader Feb 9, 2026
a6b3d90
variants: giga, opta, portenta, frdm: fix legacy CONFIG_POSIX
gibix Feb 25, 2026
7587149
libraries: SocketWrapper: fix broken posix api
gibix Feb 26, 2026
509fc26
llext: support errno
gibix Feb 26, 2026
c0041b5
libraries: SocketWrapper: support errno in read
gibix Feb 26, 2026
c0c9fd1
variants: unoq: fix removed scratch_partition
gibix Feb 26, 2026
37cad61
giga: fix CONFIG_POSIX as the other boards
dani-clo Mar 2, 2026
a703561
tls: fix getaddrinfo
dani-clo Mar 4, 2026
1e9d328
feat: ota: basic
gibix Mar 10, 2026
cd047f5
feat: ota: support giga and opta
gibix Mar 11, 2026
a0a754d
feat: ota: c33
gibix Mar 11, 2026
12081d9
feat: ota: loader and legacy mode
gibix Mar 16, 2026
b358a0c
fix: loader: early enable serial
gibix Mar 16, 2026
c79f210
fix licence
gibix Mar 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 0 additions & 16 deletions .github/license_config.yml

This file was deleted.

10 changes: 5 additions & 5 deletions .github/workflows/leave_pr_comment.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright ARDUINO SRL (https://www.arduino.cc)
# Copyright (c) Arduino s.r.l. and/or its affiliated companies
# SPDX-License-Identifier: Apache-2.0

name: Leave PR comment
Expand Down Expand Up @@ -32,18 +32,18 @@ jobs:
- name: Check PR number
id: check-pr
uses: carpentries/actions/check-valid-pr@2e20fd5ee53b691e27455ce7ca3b16ea885140e8 # v0.15.0
if: ${{ env.PR_NUM }}
with:
pr: ${{ env.PR_NUM }}
sha: ${{ github.event.workflow_run.head_sha }}

- name: Validate PR number
if: ${{ steps.check-pr.outputs.VALID != 'true' }}
if: ${{ env.PR_NUM && steps.check-pr.outputs.VALID != 'true' }}
run: |
echo "::error::PR number $PR_NUM validation failed"
exit 1
echo "::warning::PR #$PR_NUM is either invalid or includes changes to workflow"

- name: Update PR comment
if: ${{ steps.check-pr.outputs.VALID == 'true' }}
if: ${{ env.PR_NUM && steps.check-pr.outputs.VALID == 'true' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
Expand Down
32 changes: 0 additions & 32 deletions .github/workflows/license_check.yml

This file was deleted.

30 changes: 22 additions & 8 deletions .github/workflows/package_core.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright ARDUINO SRL (https://www.arduino.cc)
# Copyright (c) Arduino s.r.l. and/or its affiliated companies
# SPDX-License-Identifier: Apache-2.0

# CI workflow to build, package, test and upload the ArduinoCore-zephyr core.
Expand Down Expand Up @@ -435,7 +435,27 @@ jobs:
path: comment-request/
retention-days: 1

# teports are no longer needed now
# The last line makes the job fail if the 'result' file does not contain "PASSED".
# No further actions are allowed in case of error.
- run: |
cat result
grep -q "PASSED" result # otherwise CI test failed



# Clean up test results only if the verification actually passed, so that
# they are still available for action re-runs in case of failure.

clean-temps:
name: Clean up test results
runs-on: ubuntu-latest
if: ${{ needs.verify-core.result == 'success' }}
needs:
- build-env
- package-core
- verify-core
steps:

- name: Clean up intermediate artifacts
uses: geekyeggo/delete-artifact@v5.1.0
with:
Expand All @@ -444,12 +464,6 @@ jobs:
test-report-*
failOnError: false

# The last line makes the job fail if the 'result' file does not contain "PASSED".
# No further actions are allowed in case of error.
- run: |
cat result
grep "PASSED" result >& /dev/null # otherwise CI test failed



# Upload the built core packages to the S3 bucket for public distribution.
Expand Down
48 changes: 48 additions & 0 deletions .github/workflows/scancode.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Copyright (c) Arduino s.r.l. and/or its affiliated companies
# SPDX-License-Identifier: Apache-2.0

name: Scancode

on: [pull_request]

jobs:
verify-licenses:
runs-on: ubuntu-latest
name: Scan code for licenses
steps:
- name: Checkout the code
uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false

- name: Extract new files
run: |
mkdir scancode-inputs
git fetch origin $GITHUB_BASE_REF
# copy all new files to a separate directory for scanning
for NEW_FILE in $(git diff --name-only --diff-filter=A --ignore-submodules origin/$GITHUB_BASE_REF..HEAD) ; do
mkdir -p $(dirname "scancode-inputs/$NEW_FILE")
cp "$NEW_FILE" "scancode-inputs/$NEW_FILE"
echo 'NEW_FILES_FOUND=true' >> $GITHUB_ENV
done

- name: Scan the code
id: scancode
uses: aboutcode-org/scancode-action@beta
if: env.NEW_FILES_FOUND == 'true'
with:
check-compliance: true
output-formats: json xlsx

- name: Get the report
uses: actions/download-artifact@v4
if: env.NEW_FILES_FOUND == 'true'
with:
name: scancode-outputs

- name: Process the report
if: env.NEW_FILES_FOUND == 'true'
run: |
# the following will error on missing licenses or compliance issues
extra/ci_license_checks.sh scancode-inputs/ results-*.json
37 changes: 33 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -247,9 +247,38 @@ Remember to also install and/or update the officially published core in the IDE

### Using the Core in the Arduino App Lab

The Arduino App Lab currently relies on a specific FQBN in order to send
board commands. To be able to use your custom core with the Arduino UNO Q,
read [this guide](https://forum.arduino.cc/t/install-sources-built-zephyr-on-uno-q-for-applab/1429150/7).
> [!WARNING]
> Arduino App Lab expects a hardcoded FQBN (`arduino:zephyr:unoq` for the UNO Q), so the [technique used for Arduino IDE/CLI](#using-the-core-in-arduino-idecli) **does not** work. A small workaround is required.

1. Disable the release core

```bash
mv ~/.arduino15/packages/arduino/hardware/zephyr ~/.arduino15/packages/arduino/hardware/zephyr.disable
```
This ensures the installation of the development version of the core will be used instead of the release installation.

2. Install your custom core

Place your custom core in the following path:
```bash
~/Arduino/hardware/arduino/zephyr
```

3. Flash the new loader

Build and flash the loader from your custom core to overwrite the release version.
For example, on UNO Q:
```bash
arduino-cli burn-bootloader -b arduino:zephyr:unoq -P jlink
```

#### Revert to release core

If you want to use the official core again, change the directory names so the one in `~/.arduino15` is `zephyr`, and the one in your sketchbook's hardware folder is `zephyr.disable`:
```bash
mv ~/.arduino15/packages/arduino/hardware/zephyr.disable ~/.arduino15/packages/arduino/hardware/zephyr
mv ~/Arduino/hardware/arduino/zephyr ~/Arduino/hardware/arduino/zephyr.disable
```

## 🚀 Adding a new target

Expand Down Expand Up @@ -301,7 +330,7 @@ Contributions are always welcome. The preferred way to receive code contribution
## 📌 Upcoming features

- [ ] USB: switch to `USB_DEVICE_STACK_NEXT` to support PluggableUSB
- [ ] Relocate RODATA in flash to accommodate sketches with large assets
- [x] Relocate RODATA in flash to accommodate sketches with large assets
- [ ] Provide better error reporting for failed llext operations
- [ ] Replace [`llext_exports.c`](/loader/llext_exports.c) with proper symbols generation (via includes)
- [ ] Fix corner cases with `std::` includes (like `<iterator>`)
Expand Down
20 changes: 20 additions & 0 deletions boards.txt
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,11 @@ giga.debug.server.openocd.scripts.2=target/stm32h7x_dual_bank.cfg
giga.debug.cortex-debug.custom.request=attach
giga.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM7.svd

giga.build.ota.magic=0x23410266
giga.build.ota.sketch_offset=0xA0000
giga.build.ota.pack_command_legacy="{runtime.tools.ota-pack.path}/ota-pack" -loader "{runtime.platform.path}/firmwares/zephyr-{build.variant}.bin" -sketch "{build.path}/{build.project_name}.{upload.extension}" -offset {build.ota.sketch_offset} -magic {build.ota.magic} -output "{build.path}/{build.project_name}.legacy.ota"
giga.build.ota.pack_command="{runtime.tools.ota-pack.path}/ota-pack" --sketch-only -sketch "{build.path}/{build.project_name}.{upload.extension}" -magic {build.ota.magic} -output "{build.path}/{build.project_name}.ota"

##########################################################################################

nano33ble.name=Arduino Nano 33 BLE
Expand Down Expand Up @@ -311,6 +316,11 @@ portentah7.bootloader.interface=0
portentah7.bootloader.file=zephyr-{build.variant}.bin
portentah7.bootloader.address=0x08040000

portentah7.build.ota.magic=0x2341025B
portentah7.build.ota.sketch_offset=0xA0000
portentah7.build.ota.pack_command_legacy="{runtime.tools.ota-pack.path}/ota-pack" -loader "{runtime.platform.path}/firmwares/zephyr-{build.variant}.bin" -sketch "{build.path}/{build.project_name}.{upload.extension}" -offset {build.ota.sketch_offset} -magic {build.ota.magic} -output "{build.path}/{build.project_name}.legacy.ota"
portentah7.build.ota.pack_command="{runtime.tools.ota-pack.path}/ota-pack" --sketch-only -sketch "{build.path}/{build.project_name}.{upload.extension}" -magic {build.ota.magic} -output "{build.path}/{build.project_name}.ota"

portentah7.debug.tool=gdb
portentah7.debug.server.openocd.scripts.0=interface/{programmer.protocol}.cfg
portentah7.debug.server.openocd.scripts.1={programmer.transport_script}
Expand Down Expand Up @@ -493,6 +503,11 @@ portentac33.bootloader.interface=0
portentac33.bootloader.address=0x10000
portentac33.bootloader.dfuse=-Q

portentac33.build.ota.magic=0x23410068
portentac33.build.ota.sketch_offset=0xF0000
portentac33.build.ota.pack_command_legacy="{runtime.tools.ota-pack.path}/ota-pack" -sfu "{runtime.platform.path}/loader/blobs/c33_sfu.bin" -loader "{runtime.platform.path}/firmwares/zephyr-{build.variant}.bin" -sketch "{build.path}/{build.project_name}.{upload.extension}" -offset {build.ota.sketch_offset} -magic {build.ota.magic} -output "{build.path}/{build.project_name}.legacy.ota"
portentac33.build.ota.pack_command="{runtime.tools.ota-pack.path}/ota-pack" --sketch-only -sketch "{build.path}/{build.project_name}.{upload.extension}" -magic {build.ota.magic} -output "{build.path}/{build.project_name}.ota"

##########################################################################################

opta.name=Arduino Opta
Expand Down Expand Up @@ -561,6 +576,11 @@ opta.debug.server.openocd.scripts.2=target/stm32h7x_dual_bank.cfg
opta.debug.cortex-debug.custom.request=attach
opta.debug.svd_file={runtime.platform.path}/svd/STM32H747_CM7.svd

opta.build.ota.magic=0x23410064
opta.build.ota.sketch_offset=0xA0000
opta.build.ota.pack_command_legacy="{runtime.tools.ota-pack.path}/ota-pack" -loader "{runtime.platform.path}/firmwares/zephyr-{build.variant}.bin" -sketch "{build.path}/{build.project_name}.{upload.extension}" -offset {build.ota.sketch_offset} -magic {build.ota.magic} -output "{build.path}/{build.project_name}.legacy.ota"
opta.build.ota.pack_command="{runtime.tools.ota-pack.path}/ota-pack" --sketch-only -sketch "{build.path}/{build.project_name}.{upload.extension}" -magic {build.ota.magic} -output "{build.path}/{build.project_name}.ota"

##########################################################################################

nano_matter.name=Arduino Nano Matter
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/Arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
DIGITAL_PIN_GPIOS_FIND_PIN(DT_REG_ADDR(DT_PHANDLE_BY_IDX(node, gpios, 0)), \
DT_PHA_BY_IDX(node, gpios, 0, pin))

/* Return the index of it if matched, oterwise return 0 */
/* Return the index of it if matched, otherwise return 0 */
#define LED_BUILTIN_INDEX_BY_REG_AND_PINNUM(n, p, i, dev, num) \
(DIGITAL_PIN_EXISTS(n, p, i, dev, num) ? i : 0)

Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/SerialUSB.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/USB.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/abi.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/itoa.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
5 changes: 4 additions & 1 deletion cores/arduino/llext_wrappers.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@
W3(void *, memcpy, void *, const void *, size_t)
W3(void *, memmove, void *, const void *, size_t)
W1(size_t, strlen, const char *)
W2(size_t, strnlen, const char *, size_t)
W2(char *, strchr, const char *, int)
W2(char *, strrchr, const char *, int)
W2(char *, strstr, const char *, const char *)
Expand All @@ -75,6 +74,9 @@ W3(int, strncmp, const char *, const char *, size_t)
W2(int, strcasecmp, const char *, const char *)
W3(char *, strncpy, char *, const char *, size_t)
W2(char *, strcat, char *, const char *)
W2(char *, strcpy, char *, const char *)
W3(int, memcmp, const void *, const void *, int)
W2(void *, memset, void *, int)

/* stdlib.h - conversion */
W2(double, strtod, const char *, char **)
Expand Down Expand Up @@ -135,6 +137,7 @@ W1(float, tanf, float)
/* math.h - double(double, double) */
W2(double, atan2, double, double)
W2(double, pow, double, double)
W2(double, ldexp, double, double)

/* math.h - float(float, float) */
W2(float, atan2f, float, float)
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/new
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/new.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2024 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
7 changes: 7 additions & 0 deletions cores/arduino/new.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
/*
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/

// This file originally used a non-standard name for this Arduino core
// only, so still expose the old new.h name for compatibility.

#include "new"
6 changes: 6 additions & 0 deletions cores/arduino/overloads.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/

#ifdef CONFIG_DAC

void analogWrite(enum dacPins pinNumber, int value);
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/threads.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2025 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
6 changes: 6 additions & 0 deletions cores/arduino/time_macros.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
/*
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/

#pragma once

#include <zephyr/sys/time_units.h>
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/usb_device_descriptor.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2025 Arduino SA
* Copyright (c) Arduino s.r.l. and/or its affiliated companies
*
* SPDX-License-Identifier: Apache-2.0
*/
Expand Down
Loading