Skip to content

examples/xedge: Add Xedge example with BAS integration #3120

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

JorgeGzm
Copy link
Contributor

@JorgeGzm JorgeGzm commented Jul 3, 2025

Create new example application that:

  • Integrates BAS (Barracuda Application Server) library
  • Automatically downloads BAS and BAS-Resources repositories
  • Generates XedgeZip.c for embedded web resources
  • Provides complete build configuration for NuttX

Summary

I'm supporting @surfskidude to update xedge support with nuttx.

This commit covers conversations:
apache/nuttx#16352
#3071

Impact

Xedge a lightweight Lua-based web framework for building secure, real-time IoT applications

Xedge <https://realtimelogic.com/products/xedge/>_ is a robust IoT and web framework that is designed for microcontrollers. It is based on the industrial-grade Barracuda Application Server, designed for seamless OEM integration. Xedge accelerates embedded firmware development by providing a flexible, Lua-based environment and a full stack of industrial-strength protocols, including:

  • OPC UA
  • Modbus
  • MQTT
  • SMQ
  • WebSockets
  • HTTP/HTTPS

This Xedge port for NuttX comes pre-configured and requires:

  • TCP/IP v4 and v6 support
  • File System support
  • 2 MB RAM allocated statically in xedge/xedge_main.c

.. note::
These instructions set up Xedge in development mode. Xedge supports many configuration options that differ between development and production builds. For production settings and optimization, refer to the general Xedge build instructions (details below).

Why Use Lua and Xedge in Embedded Systems

Great Lua developers don't treat it as a "better C"; they treat it as a complement. Lua is an extension language, which means it's designed to work alongside C, not replace it. Smart embedded programmers use C for performance-critical, low-level code and Lua for high-level business logic, such as processing sensor data and managing secure cloud connectivity.

Writing embedded business logic purely in C often means hundreds of lines of boilerplate code to manage memory, handle complex APIs, and handle errors. Lua, especially when paired with a framework like Xedge, lifts that burden. It provides high-level libraries and modules out of the box for protocols, networking, file systems, and more.

This shift doesn't just make development easier; it makes it faster. What used to take weeks in C can now be done in days. Lua's simplicity encourages rapid prototyping and quick iteration, which is essential in modern IoT and embedded development, where both time-to-market and security are critical. For a conceptual overview of why this hybrid development model is so powerful, check out the tutorial `Why Smart C Coders Love Lua.

Testing

Run xedge example with qemu-armv8a board

 $ ./tools/configure.sh qemu-armv8a:xedge
 $ make

Running with QEMU:

   $ qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic \
     -machine virt,virtualization=on,gic-version=3 \
     -chardev stdio,id=con,mux=on -serial chardev:con \
     -global virtio-mmio.force-legacy=false \
     -netdev user,id=u1,hostfwd=tcp:127.0.0.1:8080-10.0.2.15:80,hostfwd=tcp:127.0.0.1:8443-10.0.2.15:443,hostfwd=tcp:127.0.0.1:10023-10.0.2.15:23 \
     -device virtio-net-device,netdev=u1,bus=virtio-mmio-bus.0 \
     -mon chardev=con,mode=readline -kernel ./nuttx

Running Xedge in NuttX terminal

   nsh> xedge
    [    3.020000] [CPU0] Error: cannot set root to /mnt/lfs
    [    3.020000] [CPU0] Installing DiskIo failed!
    [    3.070000] [CPU0] Xedge: Server listening on IPv4 port 80
    [    3.080000] [CPU0] Xedge: SharkSSL server listening on IPv4 port 443
    [   13.720000] [CPU0] Xedge: Received invalid browser localStorage
    [   20.090000] [CPU1] 10.0.2.2 GET "rtl/assets/favicon.ico" t
    [   20.090000] [CPU1] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138
    [   20.090000] [CPU1] .0.0.0 Safari/537.36
    [   20.090000] [CPU1] Host: 127.0.0.1:8080
    [   20.090000] [CPU1] Connection: keep-alive
    [   20.090000] [CPU1] sec-ch-ua-platform: "Linux"
    [   20.090000] [CPU1] User-Agent: a
    [   20.090000] [CPU1] Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138
    [   20.090000] [CPU1] .0.0.0 Safari/537.36
    [   20.090000] [CPU1] sec-ch-ua: "Not)A;Brand";v="8", "Chromium";v="138", "Google Chrome";v="138"
    [   20.090000] [CPU1] sec-ch-ua-mobile: ?0
    [   20.090000] [CPU1] Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
    [   20.090000] [CPU1] Sec-Fetch-Site: same-origin
    [   20.090000] [CPU1] Sec-Fetch-Mode: no-cors
    [   20.090000] [CPU1] Sec-Fetch-Dest: image
    [   20.090000] [CPU1] Referer: http://127.0.0.1:8080/rtl/
    [   20.090000] [CPU1] Accept-Encoding: gzip, deflate, br, zstd
    [   20.090000] [CPU1] Accept-Language: en-US,en;q=0.9,pt-BR;q=0.8,pt;q=0.7
    [   20.090000] [CPU1] If-None-Match: 6866b8fe
    [   20.090000] [CPU1] If-Modified-Since: Thu, 03 Jul 2025 17:08:14 GMT
    [   20.090000] [CPU1]
    [   20.090000] [CPU0] 10.0.2.2 Response:
    T
    [   20.090000] [CPU0] Thu, 03 Jul 2025 19:32:12 GMT
    Content-Encoding: gzip
    Vary: Accept-Encoding
    Con
    [   20.090000] [CPU0] tent-Length: 3436
    Keep-Alive: Keep-Alive

Launch your web browser and access 127.0.0.1:8080

image

Create new example application that:
- Integrates BAS (Barracuda Application Server) library
- Automatically downloads BAS and BAS-Resources repositories
- Generates XedgeZip.c for embedded web resources
- Provides complete build configuration for NuttX

Signed-off-by: Jorge Guzman <[email protected]>
@JorgeGzm JorgeGzm marked this pull request as draft July 3, 2025 01:24
@xiaoxiang781216
Copy link
Contributor

do you follow the suggestion from #3071?

@xiaoxiang781216
Copy link
Contributor

Testing

This routine is incomplete and still needs to be fixed.

./tools/configure.sh linum-stm32h753bi:netnsh

Open the menu config and enable the flags bellow:

NETUTILS_NTPCLIENT=y ALLOW_GPL_COMPONENTS=y EXAMPLES_XEDGE=y

$ make -j
Create version.h
LN: platform/board to /home/jaga/nuttxspace/apps/platform/dummy
Downloading BAS from hash 9f74a2f778b002ad8441471b8a7a5b13172dbe76...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 3867k    0 3867k    0     0  4078k      0 --:--:-- --:--:-- --:--:-- 4078k
Downloading BAS-Resources from hash 227a4b998300fa4cfde871dc7dac92c09e1636c2...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  813k    0  813k    0     0  1192k      0 --:--:-- --:--:-- --:--:-- 1192k
Creating XedgeZip.c
Register: nsh
Register: sh
Register: ping
Register: dd
Register: telnetd
Register: xedge
Register: alarm
CPP:  /home/jaga/nuttxspace/nuttx/boards/arm/stm32h7/linum-stm32h753bi/scripts/flash.ld-> /home/jaga/nuttxspace/nuttx/boards/arm/stm32h7LD: nuttx
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/nuttx section `.bss' will not fit in region `sram'
arm-none-eabi-ld: region `sram' overflowed by 1621920 bytes
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `luaD_throw':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:11775: undefined reference to `longjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `luaD_rawrunprotected':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:11801: undefined reference to `setjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `lua_strx2number':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:16759: undefined reference to `localeconv'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `l_str2d':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:16857: undefined reference to `localeconv'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `tostringbuff':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:16956: undefined reference to `localeconv'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `num2straux':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:21029: undefined reference to `localeconv'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `quotefloat':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:21149: undefined reference to `localeconv'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `l_strcmp':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:23289: undefined reference to `strcoll'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `os_execute':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:25147: undefined reference to `system'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `os_setlocale':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:25423: undefined reference to `setlocale'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `read_number':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:26782: undefined reference to `localeconv'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `DeadProp_save':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:83645: undefined reference to `setjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `LockNode_setOwner':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:85492: undefined reference to `setjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `cachelevel':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:86369: undefined reference to `setjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:86478: undefined reference to `setjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `resetstate':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:86702: undefined reference to `setjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o):/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:86798: more undefined references to `setjmp' follow
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `SlException_set':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:92496: undefined reference to `longjmp'
arm-none-eabi-ld: /home/jaga/nuttxspace/nuttx/staging/libapps.a(BAS.c.home.jaga.nuttxspace.apps.examples.xedge_1.o): in function `SXmlRoot_parse':
/home/jaga/nuttxspace/apps/examples/xedge/BAS/src/BAS.c:92507: undefined reference to `setjmp'
make[1]: *** [Makefile:217: nuttx] Error 1
make: *** [tools/Unix.mk:552: nuttx] Error 2

why still contain error in your log?

@JorgeGzm
Copy link
Contributor Author

JorgeGzm commented Jul 3, 2025

do you follow the suggestion from #3071?

Yes, I tried to implement all the suggestions, please if I forget something that is violating the nuttx rules tell me.

@JorgeGzm
Copy link
Contributor Author

JorgeGzm commented Jul 3, 2025

Testing

This routine is incomplete and still needs to be fixed.

I'm trying to talk to @surfskidude to fix the build error.

@xiaoxiang781216
Copy link
Contributor

xiaoxiang781216 commented Jul 3, 2025

do you follow the suggestion from #3071?

Yes, I tried to implement all the suggestions, please if I forget something that is violating the nuttx rules tell me.

examples and 3rd party project shouldn't bundle, but split and put into the different folder.

@surfskidude
Copy link

why still contain error in your log?

The two functions longjmp and setjmp, which are part of the standard C library, are required by Lua. The fact that you get a link error for setjmp alone indicates that there is an issue with the NuttX stm32h753bi build. Since NuttX is POSIX compliant, it should also include function setlocale, but this function can be removed if it’s generally not part of NuttX. However, that would mean NuttX is not POSIX-compliant. Regarding the SRAM issue: Note that Xedge is not designed for microcontrollers without external RAM, so your RAM sections must be adjusted accordingly. I have configured a 2Mbyte allocator in xedge_main.c. This is a static array and can typically not be in sram on a micro.

Please note that I only tested Xedge in the host simulator.

@acassis
Copy link
Contributor

acassis commented Jul 3, 2025

why still contain error in your log?

The two functions longjmp and setjmp, which are part of the standard C library, are required by Lua. The fact that you get a link error for setjmp alone indicates that there is an issue with the NuttX stm32h753bi build. Since NuttX is POSIX compliant, it should also include function setlocale, but this function can be removed if it’s generally not part of NuttX. However, that would mean NuttX is not POSIX-compliant. Regarding the SRAM issue: Note that Xedge is not designed for microcontrollers without external RAM, so your RAM sections must be adjusted accordingly. I have configured a 2Mbyte allocator in xedge_main.c. This is a static array and can typically not be in sram on a micro.

Please note that I only tested Xedge in the host simulator.

I think it is happening because you forgot to enable CONFIG_ARCH_SETJMP_H

Copy link
Contributor

@cederom cederom left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @JorgeGzm :-)

This seems to be a copy of #3071 but why it was closed before problem resolution and merge? I guess you took over the work right? :-)

Please take a look at:

  1. https://github.com/apache/nuttx/blob/master/CONTRIBUTING.md
  2. https://nuttx.apache.org/docs/latest/contributing/index.html
  3. https://nuttx.apache.org/docs/latest/

Hopefully we can make it this time when fixes are ready and all works as expected, thanks again :-)

@JorgeGzm
Copy link
Contributor Author

JorgeGzm commented Jul 4, 2025

@xiaoxiang781216 Could you check if there's anything else that needs to be fixed.

In the PR apache/nuttx#16665 I added an example of how to use xedge with qemu-armv8a board.

Comment on lines +2 to +16
# Xedge IoT Toolkit - NuttX Kconfig integration
#
# Xedge is an embedded software toolkit designed to enable high-level developers
# (e.g., web and Lua programmers) to create sophisticated, secure IoT and industrial
# device applications. It abstracts low-level embedded development through a lightweight
# runtime built on top of the Barracuda App Server and Lua, giving developers direct access
# to HTTP(S), WebSockets, MQTT, file system, and device I/O - all from high-level Lua scripts.
#
# This NuttX integration allows developers to compile and run Xedge as a user application,
# bringing powerful device control capabilities and an embedded web server to NuttX-based
# systems.
#
# Use this if you want to build smart, networked embedded devices with minimal C code,
# and maximum productivity.
#
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it should be moved to ---help--- since normally people don't read what is inside the Kconfig, but they (should) read the Help from menuconfig

@cederom
Copy link
Contributor

cederom commented Jul 4, 2025

Hmm I have this build error on FreeBSD, any hints welcome :-) Is 11.3 compiler too old and I should use 14.2? :-)

% ./tools/configure.sh -B qemu-armv8a:xedge
% gmake -j24 CROSSDEV=aarch64-none-elf-
(..)
done
Register: iperf
Register: xedge
Register: nxplayer
Register: renew
Register: hello
Register: dd
Register: nsh
Register: sh
Register: nxrecorder
Register: ping
Register: fdtdump
Register: ostest
Register: getprime
Register: taskset
Register: telnetd
Register: smp
LD: nuttx
aarch64-none-elf-ld: /usr/lib/libm.a(e_acos.o): Relocations in generic ELF (EM: 62)
aarch64-none-elf-ld: /usr/lib/libm.a(e_acos.o): Relocations in generic ELF (EM: 62)
aarch64-none-elf-ld: /usr/lib/libm.a(e_acos.o): Relocations in generic ELF (EM: 62)
aarch64-none-elf-ld: /usr/lib/libm.a(e_acos.o): Relocations in generic ELF (EM: 62)
aarch64-none-elf-ld: /usr/lib/libm.a: error adding symbols: file in wrong format
gmake[1]: *** [Makefile:190: nuttx] Error 1
gmake: *** [tools/Unix.mk:552: nuttx] Error 2

% aarch64-none-elf-gcc --version
aarch64-none-elf-gcc (FreeBSD Ports Collection for aarch64noneelf) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

% uname -a
FreeBSD hexagon 14.2-RELEASE-p1 FreeBSD 14.2-RELEASE-p1 GENERIC amd64

@cederom
Copy link
Contributor

cederom commented Jul 4, 2025

Yup :-) GCC 14.2 AARCH64 needs to be used :-)

% ./tools/configure.sh -B qemu-armv8a:xedge
% gmake -j24 CROSSDEV=aarch64-none-elf-
(..)
Register: ping
Register: renew
Register: iperf
Register: dd
Register: hello
Register: xedge
Register: fdtdump
Register: nsh
Register: sh
Register: nxrecorder
Register: nxplayer
Register: getprime
Register: taskset
Register: telnetd
Register: ostest
Register: smp
LD: nuttx
Memory region         Used Size  Region Size  %age Used
CP: nuttx.hex
CP: nuttx.bin

% aarch64-none-elf-gcc --version
aarch64-none-elf-gcc (gcc) 14.2.1 20241119
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


% qemu-system-aarch64
hexagon%    $ qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic \
     -machine virt,virtualization=on,gic-version=3 \
     -chardev stdio,id=con,mux=on -serial chardev:con \
     -global virtio-mmio.force-legacy=false \
     -netdev user,id=u1,hostfwd=tcp:127.0.0.1:8080-10.0.2.15:80,hostfwd=tcp:127.0.0.1:8443-10.0.2.15:443,hostfwd=tcp:127.0.0.1:10023-10.0.2.15:23 \
     -device virtio-net-device,netdev=u1,bus=virtio-mmio-bus.0 \
     -mon chardev=con,mode=readline -kernel ./nuttx
zsh: command not found: $
hexagon% qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic \
     -machine virt,virtualization=on,gic-version=3 \
     -chardev stdio,id=con,mux=on -serial chardev:con \
     -global virtio-mmio.force-legacy=false \
     -netdev user,id=u1,hostfwd=tcp:127.0.0.1:8080-10.0.2.15:80,hostfwd=tcp:127.0.0.1:8443-10.0.2.15:443,hostfwd=tcp:127.0.0.1:10023-10.0.2.15:23 \
     -device virtio-net-device,netdev=u1,bus=virtio-mmio-bus.0 \
     -mon chardev=con,mode=readline -kernel ./nuttx
telnetd [8:100]

NuttShell (NSH) NuttX-10.4.0
nsh> uname -a
NuttX  10.4.0 ffecbaa4a2 Jul  4 2025 16:02:01 arm64 qemu-armv8a
nsh> help
help usage:  help [-v] [<cmd>]

    .           cmp         free        mkdir       pwd         umount
    [           dirname     get         mkfatfs     rm          unset
    ?           df          help        mkrd        rmdir       uptime
    alias       dmesg       hexdump     mount       set         usleep
    unalias     echo        ifconfig    mv          sleep       watch
    arp         env         ifdown      nfsmount    source      wget
    basename    exec        ifup        nslookup    test        xd
    break       exit        kill        pidof       time        wait
    cat         expr        pkill       printf      true
    cd          false       ls          ps          truncate
    cp          fdinfo      md5         put         uname

Builtin Apps:
    dd            iperf         ostest        smp
    fdtdump       nsh           ping          taskset
    getprime      nxplayer      renew         telnetd
    hello         nxrecorder    sh            xedge
nsh> free
      total       used       free    maxused    maxfree  nused  nfree name
  126701568     142848  126558720     143544  126558064     51      3 Umem
nsh> xedge
[   34.940000] [CPU0] Error: cannot set root to /mnt/lfs
[   34.940000] [CPU0] Installing DiskIo failed!
[   35.000000] [CPU0] Xedge: Server listening on IPv4 port 80
[   35.000000] [CPU0] Xedge: SharkSSL server listening on IPv4 port 443

@JorgeGzm
Copy link
Contributor Author

JorgeGzm commented Jul 4, 2025

I followed the qemu-armv8a board tutorial to set up the build environment:

https://nuttx.apache.org/docs/latest/platforms/arm64/qemu/boards/qemu-armv8a/index.html

Compile Toolchain

Host environment: GNU/Linux: Ubuntu 18.04 or greater

Download and Install

wget https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz
xz -d gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz
tar xf gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar

Put gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf/bin/ on your host PATH environment variable, like:

export PATH=$PATH:/opt/software/arm/linaro-toolchain/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf/bin

check the toolchain:

aarch64-none-elf-gcc -v

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants