summaryrefslogtreecommitdiffstats
path: root/user/migration/v4_11-to-v5.rst
blob: 43297718138a582ed10163270792137a0356fa28 (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
.. SPDX-License-Identifier: CC-BY-SA-4.0

.. Copyright (C) 2020 Chris Johns

.. _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.

Configuration
-------------

A number of configurations macros have moved as a result of internal changes in
RTEMS. Some of these will produce a warning indicating the new configuration
setings you need to define. If you need to run an application on RTEMS 4.11 and
RTEMS 5 the following code exmaple 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

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