summaryrefslogtreecommitdiffstats
path: root/user/migration/v4_11-to-v5.rst
blob: a0cab0244e8ff68f3b8c9fb98373e3490569f72d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
.. 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 ``<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.

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);
      }
    }