Difference between revisions of "Xtensa"
m (Fix spelling of tips) |
|||
Line 67: | Line 67: | ||
== Xtensa-Linux == | == Xtensa-Linux == | ||
+ | |||
+ | === To use with QEMU === | ||
+ | |||
+ | Get and unpack binutils sources. | ||
+ | |||
+ | ... | ||
+ | |||
+ | ==== Build FPC ==== | ||
+ | Get latest trunk and build it with: | ||
+ | |||
+ | make FPC=fpc all OVERRIDEVERSIONCHECK=1 -j "CROSSOPT=-Cfhard -Cawindowed -Tlinux" "OS_TARGET=linux" "CPU_TARGET=xtensa" | ||
+ | |||
+ | Create a hello world in the FPC top level directory. Compile it with: | ||
+ | |||
+ | compiler/ppcrossxtensa hello.pp -Tlinux -Furtl/units/xtensa-linux | ||
+ | |||
+ | Run it with: | ||
+ | |||
+ | qemu-xtensa ./hello | ||
== Xtensa-Embedded == | == Xtensa-Embedded == | ||
[[Category:Embedded]] | [[Category:Embedded]] |
Revision as of 19:37, 26 April 2020
Warning: The ESP32 support is highly experimental and prone to be broken. This description is work in progress.
So far Linux and Mac hosts only
Xtensa-FreeRTOS
Preparations
Native stable FPC must be installed and working on the system.
Install esp-idf based on the instructions given here:
Get Started (for Stable Release)
Follow the instructions to a least step 8 where you build the hello_word demo project.
copy all the freshly compiled .a files from the current project directory to a directory of your choice:
mkdir ~/esp/xtensa-esp32-elf-libs find ~/esp/ -name "*.a" -exec cp {} ~/esp/xtensa-esp32-elf-libs \;
Notes:
- One should not copy libraries from the project/build/bootloader directory, since these libraries do not contain full functionality.
- Some of the required libraries are located in the esp-idf/components folder. Important to also copy the libraries in the ~/esp/esp-idf/component directory if the demo project was copied to outside the esp-idf directory.
Now you are ready to compile fpc and rtl.
execute
export IDF_PATH=~/esp/esp-idf source ~/esp/esp-idf/export.sh
to get the path and environment set (namely tools path and $IDF_PATH are needed)
Build FPC
Change into the fpc directory and run
make FPC=fpc CPU_TARGET=xtensa OS_TARGET=freertos "CROSSOPT=-Cplx6 -XPxtensa-esp32-elf- -Cfhard" all -j
Tips & Tricks
If linking fails due to missing libraries, you can search them by (replace missing_symbol by the missing symbol):
xtensa-esp32-elf-objdump -t ~/esp/xtensa-esp32-elf-libs/*.a | grep 'missing_symbol\|xtensa-esp32-elf-libs'
Compile and run test program
Create a hello world program in the fpc dir and compile it with
compiler/ppcrossxtensa -Furtl/units/xtensa-freertos/ -Tfreertos -XPxtensa-esp32-elf- -O3 -Wpesp32 -Fl~/esp/xtensa-esp32-elf-libs -Fl~/.espressif/tools/xtensa-esp32-elf/esp-2019r2-8.2.0/xtensa-esp32-elf/xtensa-esp32-elf/lib/ hello
Get partition-table.bin and bootloader.bin from the hello_world example compiled above and copy them into the same dir as the compiled hello.bin
Flash with
esptool.py -p /dev/ttyUSB0 -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x1000 bootloader.bin 0x8000 partition-table.bin 0x10000 hello.bin
Monitor the output with:
idf_monitor.py --port /dev/ttyUSB0 hello.elf
Note:
- Once the bootloader and partition table has been flashed once one could also just flash the application only:
esptool.py -p /dev/ttyUSB0 -b 460800 --before default_reset --after hard_reset --chip esp32 write_flash --flash_mode dio --flash_size detect --flash_freq 40m 0x10000 hello.bin
Xtensa-Linux
To use with QEMU
Get and unpack binutils sources.
...
Build FPC
Get latest trunk and build it with:
make FPC=fpc all OVERRIDEVERSIONCHECK=1 -j "CROSSOPT=-Cfhard -Cawindowed -Tlinux" "OS_TARGET=linux" "CPU_TARGET=xtensa"
Create a hello world in the FPC top level directory. Compile it with:
compiler/ppcrossxtensa hello.pp -Tlinux -Furtl/units/xtensa-linux
Run it with:
qemu-xtensa ./hello