summaryrefslogtreecommitdiffstats
path: root/user/migration/v4_11-to-v5.rst
diff options
context:
space:
mode:
Diffstat (limited to 'user/migration/v4_11-to-v5.rst')
-rw-r--r--user/migration/v4_11-to-v5.rst174
1 files changed, 174 insertions, 0 deletions
diff --git a/user/migration/v4_11-to-v5.rst b/user/migration/v4_11-to-v5.rst
new file mode 100644
index 0000000..2dc97ec
--- /dev/null
+++ b/user/migration/v4_11-to-v5.rst
@@ -0,0 +1,174 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 Chris Johns
+.. Copyright (C) 2020 embedded brains GmbH & Co. KG
+
+.. _Migration_4_11_to_5:
+
+RTEMS 4.11 to RTEMS 5
+=====================
+
+This section provides helpful information when migrating from RTEMS 4.11 to
+RTEMS 5.
+
+Application Configuration Options
+---------------------------------
+
+The evaluation of application configuration options in ``<rtems/confdefs.h>``
+was reworked during the RTEMS 5 development cycle. All options which let the
+user define data structures were removed, this includes
+
+* ``CONFIGURE_HAS_OWN_CONFIGURATION_TABLE``,
+
+* ``CONFIGURE_HAS_OWN_BDBUF_TABLE``,
+
+* ``CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE``,
+
+* ``CONFIGURE_HAS_OWN_FILESYSTEM_TABLE``,
+
+* ``CONFIGURE_HAS_OWN_INIT_TABLE``,
+
+* ``CONFIGURE_HAS_OWN_MOUNT_TABLE``,
+
+* ``CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE``, and
+
+* ``CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE``.
+
+The configuration of SMP schedulers changed. For example,
+:c:func:`RTEMS_SCHEDULER_EDF_SMP` has now only one parameter. Please read
+section `Clustered Scheduler Configuration` in the `RTEMS Classic API Guide`.
+
+A number of configurations options have moved or are obsolete as a result of
+internal changes in RTEMS. Some of these will produce a warning indicating the
+new configuration settings you need to define. If you need to run an application
+on RTEMS 4.11 and RTEMS 5 the following code example shows how to conditionally
+define the settings. The example is:
+
+.. code-block:: c
+
+ #include <rtems.h>
+
+ #if __RTEMS_MAJOR__ < 5
+ #define CONFIGURE_MAXIMUM_FIFOS 10
+ #define CONFIGURE_MAXIMUM_PIPES 10
+ #else
+ #define CONFIGURE_IMFS_ENABLE_MKFIFO
+ #endif
+
+ #define MAX_FILE_DESCRIPTORS 200
+ #if __RTEMS_MAJOR__ < 5
+ #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS MAX_FILE_DESCRIPTORS
+ #else
+ #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS MAX_FILE_DESCRIPTORS
+ #endif
+
+Clock Manager
+-------------
+
+The directive :c:func:`rtems_clock_get` was removed. See section
+`Transition Advice for the Removed rtems_clock_get()` in the
+`RTEMS Classic API Guide` for alternatives.
+
+File Descriptors
+----------------
+
+In RTEMS 5.1, the list of free file descriptors has a LIFO ordering in contrast
+to previous versions where it was a FIFO. This means if an application
+regularly opens and closes files (or sockets) it sees the whole range of file
+descriptors. The reason for this change was to increase the time before file
+descriptors are reused to more likely catch a file descriptor use after close.
+
+This change may surface application issues. If the configured file descriptor
+maximum (``CONFIGURE_MAXIMUM_FILE_DESCRIPTORS``) is greater than the
+``FD_SETSIZE`` defined by Newlib to 64, then calls to ``select()`` are undefined
+behaviour and may corrupt the thread stack. In particular, ``FD_SET()`` may
+result in an out of bounds access. It is possible to define a custom
+``FD_SETSIZE``. The application must ensure that the custom ``FD_SETSIZE`` is
+defined before ``<sys/select.h>`` is included in all modules used by the
+application, for example via a global compiler command line define. This
+applies also to all third-party libraries used by the application.
+
+Networking
+----------
+
+The following code samples provides a simple way to initialise and start
+networking with the BSD Library's (``libbsd``) networking stack. The simplest
+method to configure the networking stack is to provide a :file:`/etc/rc,conf`
+file on your target. If your target has no non-volatile media for a file system
+create the :file:`rc.conf` file each time your application starts.
+
+The :file:`rc.conf` support in ``libbsd`` provides a number of needed support
+settings. We recommend you search for FreeBSD and ``rc.conf`` to view the
+available online documentation that FreeBSD provides.
+
+In this example the network interface is ``cgem0``, replace with your
+interface name.
+
+.. code-block:: c
+
+ static const char* rc_conf =
+ "# /etc/rc.conf\n" \
+ "hostname=\"rtems5-libbsd\"\n" \
+ "ifconfig_cgem0=\"inet 10.1.2.3 netmask 255.255.255.0 rxcsum txcsum\"\n" \
+ "ifconfig_cgem0_alias0=\"ether 00:80:81:82:83:84\"\n" \
+ "defaultrouter=\"10.1.2.1\"\n" \
+ "telnetd_enable=\"YES\"\n";
+
+ void start_network(void)
+ {
+ FILE *rc;
+ int r;
+
+ /*
+ * Initialise libbsd.
+ */
+ rtems_bsd_initialize();
+
+ /*
+ * Create the /etc/rc,conf, assume /etc exists.
+ */
+ rc = fopen("/etc/rc.conf", "w");
+ if (rc_conf == NULL) {
+ printf("error: cannot create /etc/rc.conf\n");
+ exit(1);
+ }
+
+ fprintf(rc, rc_conf);
+ fclose(rc);
+
+ /*
+ * Arguments are timeout and trace
+ */
+ r = rtems_bsd_run_etc_rc_conf(30, false);
+ if (r < 0) {
+ printf("error: loading /etc/rc.conf failed: %s\n",strerror(errno));
+ exit(1);
+ }
+ }
+
+Shell Environment
+-----------------
+
+To address resource leaks in the RTEMS shell, the management of shell
+environments changed. This change may break existing code. Here is an example
+how a broken Telnet shell can be fixed:
+
+.. code-block:: c
+
+ static void
+ telnet_shell( char *name, void *arg )
+ {
+ rtems_shell_env_t env;
+
+ /* Previous WRONG approach: memset( &env, 0, sizeof( env) ); */
+
+ /* Correct way to initialize the shell environment */
+ rtems_shell_dup_current_env( &env );
+
+ env.devname = name;
+ env.taskname = "TLNT";
+ env.login_check = NULL;
+ env.forever = false;
+
+ rtems_shell_main_loop( &env );
+ }