Skip to content

Commit

Permalink
GenAVB/TSN SDK release 6.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexandreHoward committed Jul 11, 2024
1 parent 7165af2 commit e1f72ad
Show file tree
Hide file tree
Showing 930 changed files with 200,037 additions and 0 deletions.
63 changes: 63 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#
# NOTE! Don't add files that are generated in specific
# subdirectories here. Add them in the ".gitignore" file
# in that subdirectory instead.
#
# NOTE! Please use 'git ls-files -i --exclude-standard'
# command after changing this file, to see if there are
# any tracked files which get ignored after the change.
#
# Normal rules
#
.*
*.o
*.o.*
*.a
*.s
*.ko
*.so
*.so.dbg
*.mod.c
*.i
*.lst
*.elf
*.bin
*.gz
*.bz2
*.lzma
*.xz
*.lzo
*.patch
*.gcno
*.orig
*.rej
*~

# Track the XDP program
!linux/firmware/genavb-xdp.bin

!.gitignore

# Default build directory
/build

# Generated include files
/common/version.h

# local config files
local_config*.mk

# CMake
local_config*.cmake
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps

# cscope files
cscope.*
51 changes: 51 additions & 0 deletions CMakeLists.linux
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
option(BUILD_KERNEL_MODULE "Build kernel module" ON)
option(BUILD_APPS "Build example applications" ON)

set(modules_obj_dir ${CMAKE_BINARY_DIR}/modules)

set(modules_extra_flags
MAKEFLAGS=
KERNELDIR=${KERNELDIR}
GENAVB_INCLUDE=${TOPDIR}/include
MODULES_OBJ_DIR=${modules_obj_dir}
GENAVB_ROOT_DIR=${TOPDIR}
target=${TARGET}
config=${CONFIG}
PREFIX="\$ENV{DESTDIR}/${CMAKE_INSTALL_PREFIX}"
)

add_custom_target(modules-dir
COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/linux/modules modules_sources
${modules_extra_flags}
COMMENT "Generate modules src files"
)

if(${CMAKE_VERSION} VERSION_LESS "3.15.0")
set_property(DIRECTORY PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${modules_obj_dir})
else()
set_property(TARGET modules-dir APPEND PROPERTY ADDITIONAL_CLEAN_FILES ${modules_obj_dir})
endif()

if(BUILD_KERNEL_MODULE)

add_custom_target(modules ALL
COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/linux/modules modules
${modules_extra_flags}
DEPENDS modules-dir
COMMENT "Building modules"
)

add_custom_target(modules-install
COMMAND $(MAKE) -C ${CMAKE_SOURCE_DIR}/linux/modules modules_install
${modules_extra_flags}
DEPENDS modules-dir
COMMENT "Installing modules"
)

install(CODE "execute_process(COMMAND make -C ${CMAKE_SOURCE_DIR}/linux/modules modules_install ${modules_extra_flags})")

endif()

if(BUILD_APPS)
add_subdirectory(${CMAKE_SOURCE_DIR}/apps/linux)
endif()
0 README → CMakeLists.rtos
100755 → 100644
File renamed without changes.
57 changes: 57 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
cmake_minimum_required(VERSION 3.10)

project(GenAVB/TSN)

set(TOPDIR ${CMAKE_CURRENT_SOURCE_DIR})

set(VERSION_FILE common/version.h)

add_custom_target(stack)

if(NOT DEFINED TARGET)
message(FATAL_ERROR "Target not defined")
endif()
message(STATUS "TARGET: ${TARGET}")

set(target_file "${CMAKE_CURRENT_SOURCE_DIR}/config_${TARGET}.cmake")
if(NOT EXISTS ${target_file})
message(FATAL_ERROR "cannot find ${target_file}")
endif()

set(CMAKE_INSTALL_MESSAGE LAZY)
# If not explicetly defined, set install prefix to build directory
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/target"
CACHE PATH "default install path" FORCE)
endif()

include(configs/configs.cmake)
include(${target_file})
include(extensions.cmake)

list(APPEND maindirs
${TARGET_OS}
management
gptp
srp
maap
hsr
avtp
avdecc
api
public
common
)

foreach(dir ${maindirs})
include(${dir}/${dir}.cmake)
endforeach()

include(CMakeLists.${TARGET_OS})
include(doc/CMakeLists.txt)

genavb_generate_version()

genavb_generate_archives()

genavb_install()
178 changes: 178 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
GenAVB/TSN
----------
GenAVB/TSN is a generic AVB/TSN stack developed by NXP for NXP MCUs and MPUs.
It is cross-platform, currently supporting Linux, FreeRTOS and Zephyr.


Supported hardware targets and configurations
---------------------------------------------
This project supports several hardware targets and several different
configuration modes. The table below summarizes the supported combinations,
and their status for this specific release:
- **O**: supported by the project and validated for this release
- x: supported by the project, but not validated for this release
- empty cell: unsupported combination

| Compilation target | Hardware target | AVB endpoint | TSN endpoint | AVB/TSN bridge | AVB hybrid |
| :--------------------: | :--------------------------------------------: | :----------: | :----------: | :------------: | :--------: |
| `linux i.MX6` | `i.MX 6Q`, `i.MX 6QP`, `i.MX 6D`, `i.MX 6SX` | x | | | |
| `linux i.MX6ULL` | `i.MX 6ULL` | **O** | | | |
| `linux i.MX8` | `i.MX 8MM` | **O** | | | |
| `linux i.MX8` | `i.MX 8MP`, `i.MX 8DXL`, `i.MX 93` | **O** | **O** | | |
| `linux i.MX8` | `i.MX 8DXL + SJA1105Q` | | | **O** | |
| `linux i.MX8` | `i.MX 93 + SJA1105Q` | | | **O** | **O** |
| `linux LS1028` | `LS1028A` | | | **O** | |
| `freertos RT1052` | `i.MX RT1052` | x | x | | |
| `freertos RT1176` | `i.MX RT1176` | x | x | | |
| `freertos RT1187 M33` | `i.MX RT1187` | | | x | |
| `freertos RT1187 M7 ` | `i.MX RT1187` | | x | | |
| `freertos RT1189 M33` | `i.MX RT1189` | | | x | |
| `freertos RT1189 M7 ` | `i.MX RT1189` | | x | | |
| `freertos i.MX8MM A53` | `i.MX 8MM` | **O** | **O** | | |
| `freertos i.MX8MN A53` | `i.MX 8MN` | **O** | **O** | | |
| `freertos i.MX8MP A53` | `i.MX 8MP` | **O** | **O** | | |
| `freertos i.MX93 A55` | `i.MX 93` | **O** | **O** | | |
| `zephyr i.MX8MM A53` | `i.MX 8MM` | **O** | **O** | | |
| `zephyr i.MX8MN A53` | `i.MX 8MN` | **O** | **O** | | |
| `zephyr i.MX8MP A53` | `i.MX 8MP` | **O** | **O** | | |
| `zephyr i.MX93 A55` | `i.MX 93` | **O** | **O** | | |

Features
--------
- IEEE-802.1AS-2020 implementation, both time-aware Bridge and Endpoint support.
- IEEE-802.1Q-2022 implementation, both Bridge and Endpoint Support
- VLAN/FDB
- Stream Reservation Protocol (Qat-2010)
- Scheduled Traffic (Qbv-2015)
- Frame preemption (Qbu-2016)
- Per Stream Filtering and Policing (Qci-2017)
- Forwarding and Queuing for Time-Sensitive Streams (Qav-2009)
- IEEE 802.1CB-2017 implementation for Frame Replication and Elimination for Reliability.
- IEEE 802.3br-2016 implementation for Interspersing Express Traffic.
- IEEE-1722-2016 implementation, with MAAP support.
- IEEE-1722.1-2013 implementation, with support for Milan v1.2 mode.
- IEC 62439-3:2022
- High-availability Seamless Redundancy (HSR)
- Protocol stacks running in standalone userspace processes for Linux, and dedicated threads for FreeRTOS.
- Public C API provided by library plus header files.
- Example applications.


Repository structure
--------------------
- api: the public API
- apps: source code and makefiles for example applications
- avdecc: IEEE 1722.1-2013/Milan v1.2 component stack
- avtp: IEEE 1722-2016 component stack
- common: common code
- configs: configuration files
- doc: documentation
- rtos: RTOS specific code
- gptp: IEEE 802.1AS-2020 component stack
- hsr: IEC 62439-3:2022 HSR component stack
- linux: Linux specific code
- maap: MAAP component code
- public: common code shared between applications and stack
- srp: IEEE 802.1Qat-2010 component stack


Build
-----
GenAVB/TSN is using Cmake to generate build system.

Some preliminary configuration is required to provide path to the toolchain,
staging directory and external components.

Local configuration files can be included by the build system in order to
to define some variables specific to the developer environment.
The local config file name is `./local_config_${target}.cmake`


Build requirements
------------------
- Linux host system and development tools (git, make, doxygen for the docs, ...)
- An ARM gcc toolchain is sufficient for the stack. However building the linux
applications requires a more complete cross-compilation SDK (because of
additional dependencies such as alsa and gstreamer).
- AVB endpoint builds depend on custom changes to the Linux kernel and specific Yocto distribution: https://www.nxp.com/design/software/development-software/real-time-edge-software:REALTIME-EDGE-SOFTWARE
- FreeRTOS builds require additional MCUXpresso SDK software: https://www.nxp.com/design/software/development-software/mcuxpresso-software-and-tools-/wired-communications-middleware-for-nxp-microcontrollers:WIRED-COMM-MIDDLEWARE?fpsp=1&#avb-tsn
- Zephyr builds require the usage of an [RTOS abstraction layer](https://github.com/NXP/rtos-abstraction-layer) and additional NXP software. Refer to [Harpoon Software](https://github.com/NXP/harpoon-apps) for reference.

### FreeRTOS
Currently GenAVB/TSN stack support only ARM gcc toolchain for FreeRTOS targets.
To be able to build the stack, ARMGCC_DIR environment variable pointing
to arm-gcc toolchain must be defined.
```
export ARMGCC_DIR=/path/to/gcc-arm-none-eabi-xxx
```

The local config file should define:
```
set(MCUX_SDK "/path/to/freertos_MCUXpresso_SDK" CACHE PATH "Path to MCUXpresso SDK")
set(RTOS_APPS "/path/to/freertos_application" CACHE PATH "Path to FreeRTOS application repository")
```

### Zephyr
The GenAVB/TSN stack can be built as a Cmake subdirectory of a top level Zephyr application
Refer to [Harpoon Software](https://github.com/NXP/harpoon-apps) for an example application.

### Linux
The Linux target is usually built using a complete toolchain, which helps
setting most of the environment variables required for cross-compilation.
In the case of a Yocto SDK/toolchain for example, the following command will
setup $CROSS_COMPILE as well as other related environment variables:

```
source /path/to/yocto/toolchain/environment-setup-xxx
```

The local config should however define:
```
set(KERNELDIR "/path/to/linux_avb" CACHE PATH "Path to Linux kernel")
```


Build commands
--------------
Syntax is:
```
cmake . -B<build directory> -DTARGET=<target name> -DCONFIG=<config name>
make -C <build directory> install
```

The GenAVB/TSN stack also provides a couple shell functions with auto-completion
to facilitate the build process.
Usage is
```
# Setup environment, see Build paragraph above
source environment-genavb
make_genavb [target] [config_list]
clean_genavb [target]
```
where target and config_list are optional. If no config_list is defined, all available
configurations for specified target are built. If no target is specified the default
is linux_imx6.
config_list is of the form: configA configB ..., with one or more members.

To generate doxygen HTML documentation:
```
cmake . -B<build directory> -DBUILD_DOC=ON -DTARGET=<target name> -DCONFIG=<config name>
make -C <build directory> doc_doxygen
```

The generated documentation is available under `<build_directory>/doc`
To install documentation under a custom path: use cmake variable `-DDOC_OUTPUT_DIR=<custom absolute path>`

### Generated binaries
The generated binaries are installed under `<build directory>/`

### Installing binaries to target

#### Linux
Copy the content of `<build directory>/target/` to the root directory of the target filesystem

#### FreeRTOS
Refer to the FreeRTOS application README.

#### Zephyr
Refer to the Harpoon application README.
Loading

0 comments on commit e1f72ad

Please sign in to comment.