There are multiple layers of stuff: IDE Build, ArduinoCore-zephyr build, Zephyr build.
Sorry in advance if this is too much information:
zephyr
Start at the bottom: Zephyr
You can setup a build environment to build using the zephyr setup using the
instructions up at:
zephyrproject-rtos/zephyr: Primary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.
I have it setup on my machines (mainly windows, some Ubuntu, recently added to old MAC (I think)). I use this to test things directly out on Zephyr and to create and test
out Pull Requests to zephyr components. Like I have few in review stages now.
And for example to test out one now that outputs to the RGB leds on Arduino GIGA
I might switch to their sample app and issue a build command like:
(.venv) D:\zephyrproject\zephyr\samples\drivers\led\is31fl319x>west build -p auto -b arduino_giga_r1//m7
note actually the command I should have used was:
(.venv) D:\zephyrproject\zephyr\samples\drivers\led\is31fl319x>west build -p auto -b arduino_giga_r1//m7 --shield arduino_giga_display_shield
But in this case it built anyway...
and to flash the GIGA with this, I use the command
west flash
Which writes out the generated binary and now the leds
This writes out the whole binary in the same way building for MBED on the GIGA would
Note: I showed the above on GIGA as, AFAIK I can build for the arduino_uno_q here and maybe use debugger, but there was no currently defined flash binary...
Note: I have some of my own test apps up on github in:
GitHub - KurtE/zephyr_test_sketches: My test sketches for native zephyr sketches
Note: After you update your board using this, and then wish to run Arduino Zephyr
sketches, you must use the burn bootloader command in Arduino IDE, or
Arduino
ArduinoCore-zephyr
You can install ArduinoCore-zephyr following the instructions up at:
arduino/ArduinoCore-zephyr: Arduino Core based on Zephyr+llext
Note: while Zephyr has a native setup for building on Windows, Arduino does not.
A few of us setup a round about way to do it using WSL, where we build under
Ubuntu and either build it in the Windows directory space or copy it into the
Windows file system... I usually do the later.
With this setup you might do something like:
kurte@KurtXPS8950:~$ cd git
kurte@KurtXPS8950:~/git$ cd ArduinoCore-zephyr/
kurte@KurtXPS8950:~/git/ArduinoCore-zephyr$ ./extra/build.sh unoq
The end result of this is it generates the "Bootloader" that use in Arduino world.
The Device Tree is defined here and you can not change it in the "Arduino" builds.
Note to build all of the boards defined in here use the command:
./extra/build_all.sh
When this completes, I copy the appropriate stuff in the Windows File system:
in my case: d:\github\ArduinoCore-zephyr.
But where Arduino wishes to see it is under the Arduino Sketch folder in hardware...
In my case:
(.venv) C:\Users\kurte\Documents\Arduino\hardware\arduino-git>ls -l
total 945
lrwxrwxrwx 1 kurte 197609 28 Dec 9 2024 ArduinoCore-zephyr -> /d/github/ArduinoCore-zephyr
-rw-r--r-- 1 kurte 197609 114 Nov 29 2024 github.sublime-project
-rw-r--r-- 1 kurte 197609 962910 Nov 29 2024 github.sublime-workspace
lrwxrwxrwx 1 kurte 197609 13 Nov 7 2024 mbed -> /d/mbed_debug
I have a symbolic link to it. Then when you restart Arduino IDE you will see them
under boards:
To use your built version you need to select board here, and do the command
tools->burn bootloader
And then you can build with all of the new stuff that you may have added or changed.
Arduino
When Arduino decides to generate a release, they run some additional scripts
which split up the above build of board into 3 parts:

You install each of these separately within the boards manager.
And as I have mentioned before when you switch between the bootloaders you build
your self and the released versions you may or may not have to burn the bootloader
(Make sure to select the board from the right group first)
Hope that helps and again sorry for being probably overly verbose.