Network drivers are considered part of the BSD network package and as such
are to be compiled with the appropriate flags. This can be accomplished by
adding -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
to the command line
.
If the driver is inside the RTEMS source tree or is built using the
RTEMS application Makefiles, then adding the following line accomplishes
this:
DEFINES += -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
This is equivalent to the following list of definitions. Early versions of the RTEMS BSD network stack required that all of these be defined.
-D_COMPILING_BSD_KERNEL_ -DKERNEL -DINET -DNFS \ -DDIAGNOSTIC -DBOOTP_COMPAT
Defining these macros tells the network header files that the driver is to be compiled with extended visibility into the network stack. This is in sharp contrast to applications that simply use the network stack. Applications do not require this level of visibility and should stick to the portable application level API.
As a direct result of being logically internal to the network stack,
network drivers use the BSD memory allocation routines This means,
for example, that malloc takes three arguments. See the SONIC
device driver (c/src/lib/libchip/network/sonic.c
) for an example
of this. Because of this, network drivers should not include
<stdlib.h>
. Doing so will result in conflicting definitions
of malloc()
.
Application level code including network servers such as the FTP
daemon are not part of the BSD kernel network code and should not be
compiled with the BSD network flags. They should include
<stdlib.h>
and not define the network stack visibility
macros.
Copyright © 1988-2008 OAR Corporation