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
AtomVM currently supports the following versions of ESP-IDF:
68
70
@@ -97,13 +99,13 @@ AtomVM tests this build on the latest Ubuntu github runner.
97
99
98
100
### Raspberry Pi Pico Support
99
101
100
-
AtomVM supports deployment on the [Raspberry Pico RP2040](https://www.raspberrypi.com/documentation/microcontrollers/rp2040.html) architecture.
102
+
AtomVM supports deployment on the [Raspberry Pico RP2040](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico-1-family) architecture.
101
103
102
104
AtomVM currently supports the following Raspberry Pico development boards:
103
105
104
106
| Development Board | AtomVM support |
105
107
|------------------------------|----------------|
106
-
| [Raspberry Pico and Pico H](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html#raspberry-pi-pico-and-pico-h) | ✅ |
107
-
| [Raspberry Pico W and Pico WH](https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html#raspberry-pi-pico-w-and-pico-wh) | ✅ |
108
+
| [Raspberry Pico and Pico H](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#pico-1-technical-specification) | ✅ |
109
+
| [Raspberry Pico W and Pico WH](https://www.raspberrypi.com/documentation/microcontrollers/pico-series.html#picow-technical-specification) | ✅ |
108
110
109
111
Building the AtomVM virtual machine for Raspberry Pico is optional. In most cases, you can simply download a release image from the AtomVM [release](https://github.com/atomvm/AtomVM/releases) repository. If you wish to work on development of the VM or use one on the additional drivers that are available in the [AtomVM repositories](https://github.com/atomvm) you will to build AtomVM from source. See the [Build Instructions](build-instructions.md) for information about how to build AtomVM from source code.
Copy file name to clipboardExpand all lines: doc/src/atomvm-tooling.md
+1-6Lines changed: 1 addition & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -347,11 +347,6 @@ For instructions about how to install AtomVM on the `generic_unix` platform, see
347
347
348
348
The [`ExAtomVM`](https://github.com/atomvm/ExAtomVM) plugin supports flash targets for various device types. These targets are described in more detail below.
349
349
350
-
```{attention}
351
-
Currently, the [`ExAtomVM`](https://github.com/atomvm/ExAtomVM) tool only supports flash targets for the ESP32 and
352
-
STM32 platforms.
353
-
```
354
-
355
350
#### ESP32 flash task
356
351
357
352
To flash AtomVM packbeam file to an ESP32 device, use the `mix.esp32.flash` target. Users will typically specify the device port and baud rate as command-line options to this target.
@@ -401,7 +396,7 @@ You can now use a serial console program such as [minicom](https://en.wikipedia.
401
396
I (922) AtomVM: Starting esp32init.beam...
402
397
---
403
398
AtomVM init.
404
-
I (932) sys: Loaded BEAM partition main.avm at address 0x210000 (size=1048576 bytes)
399
+
I (932) sys: Loaded BEAM partition main.avm at address 0x250000 (size=1048576 bytes)
Copy file name to clipboardExpand all lines: doc/src/build-instructions.md
+39-23Lines changed: 39 additions & 23 deletions
Original file line number
Diff line number
Diff line change
@@ -231,6 +231,11 @@ $ cd <atomvm-source-tree-root>
231
231
$ cd src/platforms/esp32
232
232
```
233
233
234
+
If you want to build an image with Elixir modules included you must first have a version of Elixir installed that is compatible with your OTP version, then add the following line to sdkconfig.defaults:
@@ -404,9 +405,9 @@ The flash layout is roughly as follows (not to scale):
404
405
| | |
405
406
| | |
406
407
+-----------------+ |
407
-
| boot.avm | 256KB v
408
-
+-----------------+ ------------- 0x210000
409
-
| | ^
408
+
| boot.avm | 256-512KB v
409
+
+-----------------+ ------------- 0x210000 for Erlang only images or
410
+
| | ^ 0x250000 for images with Elixir modules
410
411
| | |
411
412
| main.avm | 1MB+ | Erlang/Elixir
412
413
| | | Application
@@ -418,22 +419,25 @@ The following table summarizes the partitions created on the ESP32 when deployin
418
419
419
420
| Partition | Offset | Length | Description |
420
421
|:----------|:-------|:-------|:------------|
421
-
| Secure Boot | 0x00 | 4kB | Initialization vectors and other data needed for ESP32 secure boot. |
422
-
| Bootloader | 0x1000 | 28kB | The ESP32 bootloader, as built from the IDF-SDK. AtomVM does not define its own bootloader. |
422
+
| Bootloader | 0x0 \| 0x1000 \| 0x2000 | 28kB | The ESP32 bootloader, as built from the IDF-SDK. AtomVM does not define its own bootloader. The offset of the bootloader varies by chip.|
| NVS | 0x9000 | 24kB | Space for non-volatile storage. |
425
425
| PHY_INIT | 0xF000 | 4kB | Initialization data for physical layer radio signal data. |
426
426
| AtomVM virtual machine | 0x10000 | 1.75mB | The AtomVM virtual machine (compiled from C code). |
427
427
| boot.avm | 0x1D0000 | 256k | The AtomVM BEAM library, compiled from Erlang and Elixir files in the AtomVM source tree. |
428
-
| main.avm | 0x210000 | 1mB | The user application. This is where users flash their compiled Erlang/Elixir code |
428
+
| main.avm |`0x210000`\|`0x250000`| 1mB | The user application. This is where users flash their compiled Erlang/Elixir code |
429
+
430
+
```{warning}
431
+
There is an important difference in the partition layout between the minimal images and those build with Elixir support. To accommodate the extra Elixir modules the boot.avm partition on these images is larger, and the application offset is moved accordingly. When working with Elixir supported images it is important to always use the offset `0x250000` whether using `mix` or the `atomvm_rebar3_plugin` (possibly to test an Erlang app), otherwise part of the boot.avm partition (specifically the area where many Elixir modules are located) will be overwritten with the application, but the VM will still be trying to load from the later `0x250000` offset. This should be kept in mind reading the rest of build instructions, and [AtomVM Tooling](./atomvm-tooling.md) sections of the docs that cover the use of rebar3, for these sections an Erlang only image is assumed.
432
+
```
429
433
430
434
### The `boot.avm` and `main.avm` partitions
431
435
432
436
The `boot.avm` and `main.avm` partitions are intended to store Erlang/Elixir libraries (compiled down to BEAM files, and assembled as AVM files).
433
437
434
438
The `boot.avm` partition is intended for core Erlang/Elixir libraries that are built as part of the AtomVM build. The release image of AtomVM (see below) includes both the AtomVM virtual machine and the `boot.avm` partition, which includes the BEAM files from the `estdlib` and `eavmlib` libraries.
435
439
436
-
In contrast, the `main.avm` partition is intended for user applications. Currently, the `main.avm` partition starts at address `0x210000`, and it is to that location to which application developers should flash their application AVM files.
440
+
In contrast, the `main.avm` partition is intended for user applications. Currently, the `main.avm` partition starts at address `0x210000` for thin images or `0x250000` for images with Elixir modules, and it is to that location to which application developers should flash their application AVM files.
437
441
438
442
The AtomVM search path for BEAM modules starts in the `main.avm` partition and falls back to `boot.avm`. Users should not have a need to override any functionality in the `boot.avm` partition, but if necessary, a BEAM module of the same name in the `main.avm` partition will be loaded instead of the version in the `boot.avm` partition.
439
443
@@ -456,20 +460,31 @@ you target a different build directory when running CMake.
456
460
457
461
Running this script will generate a single `atomvm-<sha>.img` file in the `build` directory of the esp32 source tree, where `<sha>` is the git hash of the current checkout. This image contains the ESP32 bootloader, AtomVM executable, and the `eavmlib` and `estdlib` Erlang libraries in one file, which can then be flashed to address `0x1000` for the esp32. The bootloader address varies for other chip variants. See the [flashing a binary image to ESP32](./getting-started-guide.md#flashing-a-binary-image-to-esp32) section of the [Getting Started Guide](./getting-started-guide.md) for a chart with the bootloader offset address of each model.
458
462
459
-
The`mkimage.sh` script is run from the `src/platform/esp32` directory as follows:
463
+
To build a thin image with only Erlang libraries`mkimage.sh` script is run from the `src/platform/esp32` directory as follows:
460
464
461
465
```shell
462
466
$ ./build/mkimage.sh
463
-
Writing output to /home/joe/AtomVM/src/platforms/esp32/build/atomvm-esp32-0.6.0
464
-
-dev+git.602e6bc.img
467
+
Writing output to /home/joe/AtomVM/src/platforms/esp32/build/atomvm-esp32.img
468
+
=============================================
469
+
Wrote bootloader at offset 0x1000 (4096)
470
+
Wrote partition-table at offset 0x8000 (32768)
471
+
Wrote AtomVM Virtual Machine at offset 0x10000 (65536)
472
+
Wrote AtomVM Core BEAM Library at offset 0x1D0000 (1114112)
473
+
```
474
+
475
+
To build a full image with Erlang and Elixir libraries the path to the previously (during the generic_unix build) built `elixir_esp32boot.avm` must be passed to the `mkimage.sh` script as follows (Note: this is still run from the AtomVM/src/platforms/esp32 directory for the relative path to work - feel free to use the absolute path to this file):
Writing output to /home/joe/AtomVM/src/platforms/esp32/build/atomvm-esp32.img
465
480
=============================================
466
481
Wrote bootloader at offset 0x1000 (4096)
467
482
Wrote partition-table at offset 0x8000 (32768)
468
483
Wrote AtomVM Virtual Machine at offset 0x10000 (65536)
469
-
Wrote AtomVM Core BEAM Library at offset 0x110000 (1114112)
484
+
Wrote AtomVM Core BEAM Library at offset 0x1D0000 (1114112)
470
485
```
471
486
472
-
Users can then use the `esptool.py` directly to flash the entire image to the ESP32 device, and then flash their applications to the `main.app` partition at address `0x210000`,
487
+
Users can then use the `esptool.py` directly to flash the entire image to the ESP32 device, and then flash their applications to the `main.app` partition at address `0x210000`, (or `0x250000` for Elixir images)
473
488
474
489
But first, it is a good idea to erase the flash, e.g.,
475
490
@@ -488,7 +503,7 @@ Hard resetting...
488
503
489
504
#### Flashing Release Images
490
505
491
-
After preparing a release image you can use the `flashimage.sh`, which is generated with each build that will flash the full image using the correct flash offset for the chip the build was configured for.
506
+
After preparing a release image you can use the `flashimage.sh`, which is generated with each build that will flash the full image using the correct flash offset for the chip the build was configured for using the either the default Erlang only `partitions.cvs` table, or the `partitions-elixir.cvs` table if that was used during the configuration.
492
507
493
508
```shell
494
509
$ ./build/flashimage.sh
@@ -497,7 +512,7 @@ $ ./build/flashimage.sh
497
512
To perform this action manually you can use the `./build/flash.sh` tool (or `esptool.py` directly, if you prefer):
@@ -562,12 +578,12 @@ applications for the AtomVM platform.
562
578
563
579
#### Flashing the core libraries
564
580
565
-
If you are doing development work on the core Erlang/Elixir libraries and wish to test changes that do not involve the `C` code in the core VM you may flash `atomvmlib.avm` to the avm.lib partition (offset 0x1D0000) by using the `flash.sh` script in the esp32 build directory as follows:
581
+
If you are doing development work on the core Erlang/Elixir libraries and wish to test changes that do not involve the `C` code in the core VM you may flash `esp32boot.avm`(or `elixir_esp32boot.avm` when using an Elixir partition table) to the boot.avm partition (offset 0x1D0000) by using the `flash.sh` script in the esp32 build directory as follows:
0 commit comments