.. SPDX-License-Identifier: CC-BY-SA-4.0 .. Copyright (C) 2020 Chris Johns .. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de) .. _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 ```` 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 #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. 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 ); }