NDK 2.25.00.09 GA Release Notes
February 05, 2016
This GA release of the NDK contains documentation updates, support
for graphical configuration pages, and major bug fixes.
This release is intended to support
SYS/BIOS 6.45.00.20 or greater.
Introduction,
Documentation,
What's New,
Upgrade Info,
Compatibility Information,
Device Support,
Validation Info,
Known Issues,
Benchmarks,
Examples,
Rebuilding The NDK Core Libraries,
Version Information,
Technical Support.
The Network Developer's Kit (NDK) is a platform for development
and demonstration of network enabled applications on TI embedded
processors,
currently limited to the TMS320C6000 family and ARM processors.
The code included in this NDK release is generic C code which runs
on any C66, C674, ARM9, Cortex-A8, Cortex-A9, Cortex-A15, Cortex-M3,
or Cortex-M4 device (support for COFF targets is no longer shipped).
Users can obtain an appropriate NDK Support Package (NSP) for the various
supported
platforms separately. The NDK Support Packages include demonstration
software
showcasing capabilities across a range of network enabled
applications. In addition, the stack serves as a rapid prototype
platform
for the development of network and packet processing applications, or
to add
network connectivity to existing applications for communications,
configuration, and control. Using the components provided in the NDK,
developers can quickly move from development concepts to working
implementations attached to the network. Please check the
release website
for previous release notes and NDK Support Packages.
The following documents provide an overview of the NDK, the networking
programming API, and how to port the software to other platforms:
-
NDK User's
Guide: Documents the NDK basics, and describes how to develop or
port a network-enabled application. It also describes how to customize
the network environment to fit your embedded environment.
- NDK Programmer's
Reference Guide: Describes the NDK library API calls in detail.
It also includes a description of the stack's internal object based
API functions.
- NDK Microsoft HTML
.chm API Guide: Doxygen generated API documentation
which includes IPv6 APIs.
- NDK Support
Package Ethernet Driver Design Guide:
Describes the NIMU based architecture of the Ethernet and serial drivers
packaged in the NSPs.
-
C6000 NDK Getting Started Guide: Note that this older document contains
an outdated set of lab exercises, relative to this latest NDK release.
However, the document does provide an overview of networking and it is
still a good reference guide in relation to gaining a better understanding
of how the NDK works. It highly recommended that the user use the guide for
informational purposes only and not to attempt the lab steps.
- SNTP API
Documentation: API guide describing the SNTP module and
how it can be used.
-
Static Analysis Reports
In addition, users are encouraged to monitor (and contribute to!) the
TI Embedded Processors Wiki.
Release notes from previous releases are also available in the release notes archive directory and the
release website.
New Features
- The family member of all socket address structs has been changed to be type short (16-bit) instead of the previous type of char (8-bit). This is consistent with the BSD sockets implementation.
- This major change breaks binary compatibility with previous versions of the NDK!
- See the Upgrade Info section for further details.
- The SNTP client is being deprecated. See the Upgrade Info section for further details.
- The MYTIME module has been removed. See the Upgrade Info section for further details.
- NDK now built against a new version of SYS/BIOS and XDC tools (constitutes a major version dependency change).
- Removed build support for COFF target libraries.
- Removed empty header file unistd.h, as it is now provided by SYS/BIOS. See the Upgrade Info section for further details.
- TaskCreate now specifies an Error Block.
- Fixed a bug in the SNTP Client, in which another Task's socket could be closed by SNTP.
- Added additional APIs to the BSD layer which were previously missing.
- getaddrinfo now supports passing a NULL argument for the hints parameter.
- getaddrinfo now properly handles arguments of zero for the ai_protocol and ai_socktype hints (for TCP and UDP)
- Updated NDK User's Guide, API Guide, and Ethernet Driver Design Guide
Bug Fixes in NDK 2.25.00.09
- SDOCM00119981 getaddrinfo should handle 0 values for ai_socktype and ai_protocol hints for TCP/UDP
- SDOCM00119825 add support for a NULL hints arg in getaddrinfo
- SDOCM00119781 NDK header files do not have C++ guards
- SDOCM00119587 in.h defines type but doesn't include proper header
- SDOCM00119582 unistd.h should move to BIOS
- SDOCM00118868 The Task_create example in SPRU523 should note the priority restriction
- SDOCM00118691 TaskCreate() should specify an Error_Block when calling Task_create()
- SDOCM00118042 SNTP client doesn't reset its socket handle, results in it closing another task's socket!
- SDOCM00117982 need to define standard macro INET6_ADDRSTRLEN and INET_ADDRSTRLEN
- SDOCM00117747 struct sockaddr has wrong type in definition
- SDOCM00115879 BSD layer missing a few socket APIs
- SDOCM00115023 IGMPJoinHostGroup and IGMPLeaveHostGroup APIs should be removed from NDK docs
- SDOCM00113941 NDK 2.24 documentation items
- SDOCM00113026 NDK API Guide Bugs (spru524i.pdf)
- SDOCM00112646 NDK docs missing ACD hook info
- SDOCM00093562 NDK DNS sample code in documentation is incorrect
All the libraries in this release support either IPv4 or IPv6 (or both)
and NIMU. The low-level (LL) packet driver architecture has been
deprecated since NDK v2.0.0 release.
The NDK stack in this release supports SYS/BIOS 6.45.00.20 (or
greater) and is meant to be used with CCSv6.1 and up.
Network Support Packages (NSPs), which contains Ethernet drivers, are released
independently of this product and are usually shipped as part of a sofware
development kit (SDK). The NSPs for evmOMAPL138 and evm6748 platforms can be
obtained from the
NDK website.
Ethernet drivers for MCU devices can be found in the TI-RTOS product (see the
TI-RTOS download website).
For other devices, please contact your FAE for where to obtain the appropriate
SDK.
Type change for "family" members of the socket address structures
Starting in NDK 2.25, the socket address structures have been redefined to use a 16-bit type for the family members:
- sa_family
- sin_family
- sin6_family
Applications and/or libraries which contain references to these fields must be rebuilt due to this change!
This was done in order to make the NDK conform to industry standards, in which the 16-bit type 'sa_family_t' is used for these family fields.
The NDK's socket address structures are now defined as follows:
/* ******** "legacy" NDK layer: ******** */
struct sockaddr {
UINT16 sa_family; /* address family */
char sa_data[14]; /* socket data */
};
struct sockaddr_in {
UINT16 sin_family; /* address family */
UINT16 sin_port; /* port */
struct in_addr sin_addr;
INT8 sin_zero[8]; /* fixed length address value */
};
struct sockaddr_in6 {
UINT16 sin6_family; /* address family */
UINT16 sin6_port; /* port */
UINT32 sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
UINT32 sin6_scope_id; /* scope id */
};
/* ******** BSD compatibility layer: ******** */
struct sockaddr {
sa_family_t sa_family; /* address family */
char sa_data[14]; /* socket data */
};
struct sockaddr_in {
sa_family_t sin_family; /* address family */
unsigned short sin_port; /* port */
struct in_addr sin_addr;
char sin_zero[8]; /* fixed length address value */
};
struct sockaddr_in6 {
sa_family_t sin6_family; /* address family */
unsigned short sin6_port; /* port */
unsigned int sin6_flowinfo; /* IPv6 flow information */
struct in6_addr sin6_addr; /* IPv6 address */
unsigned int sin6_scope_id; /* scope id */
};
The SNTP Client Is Now Contained In Its Own Library
As of NDK 2.25, the SNTP client is still available in the NDK, however it is no longer part of the nettools library. It has now been factored out of nettools and into its own library. It can still be found in the nettools directory of the NDK:
- ti/ndk/nettools/lib/sntp.lib (dual IPv4/IPv6 support)
- ti/ndk/nettools/lib/sntp_ipv4.lib (pure IPv4)
(Note: the library extenstion ".lib" is used here, the actual file names will have an extension that matches the target type.)
Due to this change, it is necessary for users to manually update their project to link in the sntp library, as it will no longer be linked automatically.
The MYTIME module has been removed
Starting in NDK 2.25, the MYTIME module is no longer supported. User's must update their application code to use the SYS/BIOS Seconds module, as this is the replacement for MYTIME.
Please refer to the SNTP documentation for further details on using the Seconds module with the SNTP client, and the SYS/BIOS API guide for details on the Seconds module.
unistd.h has been removed from the NDK BSD layer
Starting in NDK 2.25, unistd.h is no longer provided in the NDK. This file is now shipped in the SYS/BIOS product. If your application includes unistd.h, you must update your compiler options to add the proper path location for this file. It should typically be something like "<SYS/BIOS install dir>/packages/ti/sysbios/posix". It may also be necessary to update your *.cfg file to use the posix package's Settings.xdc module [i.e. xdc.useModule('ti.sysbios.posix.Settings');] in order to link in the posix libraries into your application.
This release must be used with following component versions (or higher):
- SYS/BIOS 6.45.00.20
- CCS 6.1
- XDCtools 3.32.00.06_core
- TI Code Generation Tools Versions
- 66xx: Code Generation Tools 7.2.0
- 674x+: Code Generation Tools 7.2.0
- Arm9: Code Generation Tools 5.2.4
- Cortex-A8: Code Generation Tools 5.2.4
- GNU Code Generation Tools Versions (for ARM only)
- Arm version gcc-arm-none-eabi-4_8-2014q3 or later
- IAR Code Generation Tools Versions (for ARM Cortex-M only)
This release supports the following devices:
- 66xx: ELF format, big and little endian
- 674x+: ELF format, little endian
- Arm9: ELF format
- Cortex-A8: ELF format and GCC
- Cortex-A9: GCC only
- Cortex-A15: GCC only
- Cortex-M3: ELF format, GCC and IAR
- Cortex-M4: ELF format, GCC and IAR
The following component versions were used to build and run test applications
to validiate this release:
- SYS/BIOS 6.45.00.20
- NSP 1.10.03.15 (evm6748)
- CCS 6.1
- TI-RTOS 2.15.00.17 (EK-TM4C1294XL)
- XDCtools 3.32.00.06_core
- Code Generation Tools 5.1.5 (evm6748 ARM9 Application Build)
- Code Generation Tools 7.2.0 (evm6748 C674X Application Build)
- Code Generation Tools 5.2.2 (EK-TM4C1294XL Application Build)
- GNU Code Generation Tools gcc-arm-none-eabi-4_8-2014q3 (EK-TM4C1294XL Application Build)
- IAR Code Generation Tools 6.70.1 (EK-TM4C1294XL Application Build)
This release was validated using the following hardware platforms:
- EVM OMAPL138 (ARM9 and C674)
- EK-TM4C1294XL
GNU Applications Must Define _POSIX_SOURCE:
Both the NDK and GNU define the fd_set structure. Since SYS/BIOS ships GNU
header files, this conflict may arise when building NDK applications using GCC.
In order to avoid such conflicts, GCC apps need to throw -D_POSIX_SOURCE in
the application's compiler options in order to take the NDK's definition of
fd_set.
Terminated Tasks Must Be Automatically Deleted:
The NDK has been updated to take advantage of the new SYS/BIOS feature
which automatically deletes dynamically created Task objects which have
reached the terminated state. If your application configuration
is loading the package 'ti.ndk.config' and/or using the
'ti.ndk.config.Global.xdc' module, then Task clean up will be set up
correctly for you.
However, if your application configuration is
not loading the 'ti.ndk.config' package or the
'ti.ndk.config.Global.xdc' module, then you must add the following
lines of code to your application configuration (*.cfg) file:
var Task = xdc.useModule('ti.sysbios.knl.Task');
Task.deleteTerminatedTasks = true;
If not, you may experience out of memory issues due to improper Task clean up. Please refer to section 5.2.2 TaskCreate(), TaskExit(), and TaskDestroy() of the NDK User's
Guide for more information.
Known Bugs:
- SDOCM00115751 - PPP does not work with Linux modem manager
- SDOCM00115654 - HDLC and PPP shut down the stack if a bad packet received
- SDOCM00098788 - ARM9 IPv6 telnet console echo application shows negative number for send rate
- SDOCM00075040 - running ping command within a telnet session on the ndk causes the terminal and telnet session to hang
- SDSCM00025064 - DSP crash on Reboot with a PPPoE server on NDK.
Workaround: Ensure that the PPPoE server of the NDK stack is closed
before rebooting the stack.
- SDSCM00024506 - PPPoE client connection handle is not removed after
PPPoE session timeout. Workaround: Ensure that the session timeout on the
PPPoE server is configured to be a large value to avoid this issue.
NDK sizing benchmarks were obtained from applications that, although basic,
demonstrate "real world" usage of the TCP/IP stack. The following
summarizes the size benchmark applications:
- basic - The base application; a
bare minimum, ping-able NDK application. Contains no sockets, uses
DHCP to obtain IP address.
- tcpSocket
- Minimized configuration for the TI-RTOS tcpEcho example that
contains a single TCP socket running in a single task. The TCP
send/receive buffers have been lowered to a value of 512 bytes. Uses
DHCP to obtain IP address.
- tcpEchoServer
- Minimal configuration for application that creates a TCP echo daemon
for the NDK library function "dtask_tcp_echo" (from
ti/ndk/tools/servers). The program echoes data received back to
its sender. Uses DHCP to obtain IP address.
- udpSocket
- Minimized configuration of the TI-RTOS udpEcho example that
contains a single UDP socket running in a single task. The UDP
receive buffer has been lowered to a value of 512 bytes. Uses
DHCP to obtain IP address.
- udpEchoServer
- Minimal configuration for application that creates a UDP echo daemon
for the NDK library function "dtask_udp_echo" (from
ti/ndk/tools/servers). The program echoes data received back to
its sender. Uses DHCP to obtain IP address.
- httpServer - Minimal
configuration for an HTTP server with a very basic web page and CGI
script. Uses DHCP to obtain IP address.
Please find the bench mark results here:
NDK Size Benchmarks
NDK examples are no longer included as part of the NDK core release. All
examples are now located in a seperate Network Support Package (NSP).
This NDK release was validated using the latest NSP 1.10.03.15 product for the
evmOMAPL138 and evm6748 and so works best with the examples found in that
product. Users who have the evmOMAPL138 or evm6748 hardware platforms should
make sure to use the latest NSP product with this NDK release.
The latest NSP product may be downloaded from the
NDK website
For all other hardware platforms, the corresponding NSP products and
examples may be found in the previous NDK 2.00 and NDK 2.01.00 products,
which are also found at the
NDK website.
The NDK product includes source files and build scripts that allow the user to modify its sources and rebuild its libraries.
You can do this in order to modify, update, or add functionality. If you
edit
the NDK source code and/or corresponding build scripts, you must also
rebuild the NDK in order to create new libraries containing these
modifications.
The NDK ships with a make file which may be used to rebuild the NDK libraries after sources have been modified.
Please refer to the following web page for instructions on how to rebuild
the NDK: Rebuilding The NDK Core With Gmake
This product's version follows a version format, M.mm.pp.bb,
where M is a single digit Major number, mm is 2 digit
minor number, pp is a 2 digit patch number, and b is an
unrestricted set of digits used as an incrementing build counter.
To support multiple side-by-side installations of the product, the
product version is encoded in the top level directory,
ex. ndk_2_25_00_09.
Subsequent releases of patch upgrades will be identified by the patch
number, ex. NDK 2.20.01 with directory ndk_2_20_01.
Typically, these patches only include critical bug fixes.
Check
the NDK
website for updates.
Last updated: February 05, 2016 Build Ver: ndk_2_25_00_09 Rev: f09