You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+27-20
Original file line number
Diff line number
Diff line change
@@ -80,19 +80,25 @@ Unlike traditional Arduino implementations, where the final output is a standalo
80
80
81
81
The `loader` is responsible for managing the interaction between your sketches and the underlying Zephyr system. After the initial bootloader installation, the `loader` takes over the sketch loading process automatically.
82
82
83
-
To ensure flexibility, the `loader` project is designed to be generic. Any necessary modifications for specific boards should be made in the corresponding `DTS overlay` or a special `fixup` file, using appropriate guards to maintain stability.
83
+
To ensure flexibility, the `loader` project is designed to be generic. Any necessary modifications for specific boards should be made in the corresponding "DTS overlay" or a special "fixup" file, using appropriate guards to maintain compatibility.
84
84
85
-
The behavior of the `loader` can be adjusted through the `Mode` menu:
85
+
The behavior of the `loader` can be adjusted through the `Mode` menu of the IDE:
86
86
-`Standard`: The sketch is loaded automatically.
87
87
-`Debug`: The user must type `sketch` in Zephyr's shell, which is accessible via the default Serial.
88
88
89
89
The most important components of this project are:
> ## Using the Core in Arduino IDE/CLI without installing Zephyr
99
+
>
100
+
> To help core developers who might not be interested at all in setting up a full Zephyr build system, we are providing [sync-zephyr-artifacts](/extra/sync-zephyr-artifacts) utility. After compiling it via `go build`, run as `sync-zephyr-artifacts .` to retrieve the files needed to compile sketches and flash the loader.
101
+
> Next, follow the instructions in [Using the Core in Arduino IDE/CLI](#using-the-core-in-arduino-ide-cli) to finish the set-up.
96
102
97
103
## 🛠️ Setup the environment
98
104
@@ -105,6 +111,7 @@ Shell scripts are available to simplify the installation process (Windows is not
Before running the installation script, ensure that Python, `pip` and `venv` are installed on your system. The script will automatically install `west` and manage the necessary dependencies.
110
117
@@ -124,7 +131,9 @@ download all packages required for a Zephyr build in addition to the toolchains
124
131
in the Zephyr SDK.
125
132
126
133
> [!NOTE]
127
-
> This core is validated with version v0.17.0. Compatibility with later versions has not been tested yet.
134
+
> This core is validated with version v0.17.0 of the SDK. Compatibility with later versions has not been tested yet.
135
+
136
+
## 🛠️ Regenerate the core from Zephyr sources
128
137
129
138
### Build the Loader
130
139
@@ -154,29 +163,27 @@ If the board is fully supported by Zephyr, you can flash the firmware directly o
154
163
```bash
155
164
west flash
156
165
```
166
+
This can also be performed via the "Burn bootloader" action in the IDE if the core is properly installed, as detailed below.
157
167
158
168
### Using the Core in Arduino IDE/CLI
159
169
160
-
After running the `bootstrap` script, you can symlink the core to `$sketchbook/hardware/arduino-git/zephyr`. Once linked, it will appear in the IDE/CLI, and the board's Fully Qualified Board Name (FQBN) will be formatted as `arduino-git:zephyr:name_from_boards_txt`.
161
-
162
-
### Using the Core in Arduino IDE/CLI (without installing Zephyr toolchain)
163
-
164
-
To help core developers (who might not be interested at all in setting up a full Zephyr build system) we are providing [sync-zephyr-artifacts](/extra/sync-zephyr-artifacts) utility. After compiling it via `go build`, run as `sync-zephyr-artifacts .` to retrieve the files needed to compile sketches and flash the loader.
170
+
After running the `bootstrap.sh` script, you can symlink the core to `$sketchbook/hardware/arduino-git/zephyr`. Once linked, it will appear in the IDE/CLI, and the board's Fully Qualified Board Name (FQBN) will be formatted as `arduino-git:zephyr:name_from_boards_txt`.
165
171
166
-
## 🚀 Adding a new target
172
+
###🚀 Adding a new target
167
173
168
-
To add a new board that is already supported by mainline Zephyr, follow these steps:
174
+
To add a new board that is already supported by mainline Zephyr with the target `$your_board`, follow these steps:
169
175
170
-
* Create the `DTS overlay` and `.conf` files in the [loader](/loader/boards) directory.
176
+
* Get the variant name from your board by running `extra/get_variant_name.sh $your_board`.
177
+
* Create a folder in the [`variants/`](/variants) directory with the same name as the variant for your new board.
178
+
* Create the DTS `<variant>.overlay` and Kconfig `<variant>.conf` files in that directory.
171
179
The overlay must include:
172
180
* A flash partition called `user_sketch`, tipically located near the end of the flash.
173
181
* A `zephyr,user` section containing the description for GPIOs, Analog, UART, SPI and I2C devices. Feel free to leave some fields empty in case Zephyr support is missing. This will result in some APIs not being available at runtime (eg. `analogWrite` if PWM section is empty).
174
-
* Build the Loader: run `./extra.build.sh $your_board $your_board` and start debugging the errors. :grin:
182
+
The Kconfig file must include any board-specific options required by this target.
183
+
* Build the Loader: run `./extra/build.sh $your_board` (with any additional arguments as required) and start debugging the errors. :grin:
175
184
* Update the `boards.txt`: add an entry for your board, manually filling the required fields.
176
-
* Implement touch support: if your board supports the `1200bps touch` method, implement `_on_1200_bps` in a file located inside the `variant/your_board` folder.
177
-
* ⏳ Temporary steps
178
-
* Create `includes.txt` based on `llext-edk/Makefile.cflags`, taking inspiration for other variants.
179
-
* Amend `your_board.compiler.zephyr.*` with information from `llext-edk/Makefile.cflags`.
185
+
In particular, set `build.zephyr_target` and `build.zephyr_args` to the arguments used in the `build.sh` call, and `build.variant` to the variant name identified above.
186
+
* Implement touch support: if your board supports the "1200bps touch" method, implement `_on_1200_bps` in a file located inside the variant folder of your board.
180
187
181
188
## 🐛 Bug Reporting
182
189
@@ -194,10 +201,10 @@ Contributions are always welcome. The preferred way to receive code contribution
194
201
-[x] Unify overlay in [loader](/loader/boards) with the one provided in [variant](/variant) for interoperability with GSoC project
195
202
-[x] Autogenerate `defines.txt`, `includes.txt`, `cflags.txt` from `llext-edk` output
196
203
-[x] Network: support UDP and TLS
197
-
-[ ] USB: switch to USB_DEVICE_STACK_NEXT to support PluggableUSB
204
+
-[ ] USB: switch to `USB_DEVICE_STACK_NEXT` to support PluggableUSB
198
205
-[ ] Relocate RODATA in flash to accomodate sketches with large assets
199
206
-[ ] Provide better error reporting for failed llext operations
200
-
-[ ] Replace [llext_exports.c](/loader/llext_exports.c) with proper symbols generation (via includes)
207
+
-[ ] Replace [`llext_exports.c`](/loader/llext_exports.c) with proper symbols generation (via includes)
201
208
-[x] Provide better usability for `Debug` builds (eg. shell over USB)
202
209
-[ ] Fix corner cases with `std::` includes (like `<iterator>`)
0 commit comments