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