mirror of
https://git.rtems.org/rtems-docs/
synced 2025-05-14 07:19:35 +08:00
Address several issues from compiling examples
Compiling the code from examples "code-block:: c" along with public includes and a bsp exposed a few issues amongst a lot of false positives. Address some of these: * Terminate struct declarations with ';'. Mainly for pedantic correctness. * Show ptrdiff_t instead of size_t for the sbrk() prototype, matching the current argument type in rtems. * Replace some occurrences of unsigned16 with uint16_t. * Fix odd type declaration, "uint8_t char*" -> "char*". * Use appropriate helper to get chain head instead of invalid access to nonexistent struct member. * Remove several excess '\' escapes. * Use RTEMS_SELF instead of undefined SELF. * Use rtems_task instead of void for task functions. * Add missing stack size parameter in task creation. * Use rtems_interrupt_level instead of undefined rtems_interrupt. * Correct return value format for rtems_object_id_get_api() rtems_object_id_get_index() (enum and uint16_t) and also fix corresponding print formatting. * Correct return value documentation for rtems_object_id_get_class(), rtems_object_id_get_node() and rtems_object_id_get_index() int -> uint32_t. * Use RTEMS_SUCCESSFUL instead of undefined RTEMS_STATUS_SUCCESSFUL and fix return value variable name in rate monotonic examples. * Use RTEMS_TIMEOUT instead of undefined TIMEOUT and RTEMS_PERIOD_STATUS instead of undefined STATUS. * Add missing fields to ftpd configuration. * Correct parameter types in ftpd hook prototype, unsigned char * -> void *. * Fix various code-block:: attributes, c -> makefile and c -> shell. * Add missing parenthesis in socket buffer memory calculation example. * Remove typedef in declaration of mq_attr since it is defiend without typedef in reality. * Update siginfo_t declaration to match current reality. * Update shell user command definition example to include mode, uid and gid.
This commit is contained in:
parent
b836c43f19
commit
2e711f2b4b
@ -168,7 +168,7 @@ The handler table for the polled mode should look like the following.
|
|||||||
.set_attributes = my_driver_set_attributes,
|
.set_attributes = my_driver_set_attributes,
|
||||||
.ioctl = my_driver_ioctl, /* optional, may be NULL */
|
.ioctl = my_driver_ioctl, /* optional, may be NULL */
|
||||||
.mode = TERMIOS_POLLED
|
.mode = TERMIOS_POLLED
|
||||||
}
|
};
|
||||||
|
|
||||||
The :c:func:`my_driver_poll_write()` routine is responsible for writing ``n``
|
The :c:func:`my_driver_poll_write()` routine is responsible for writing ``n``
|
||||||
characters from ``buf`` to the serial device specified by ``base``.
|
characters from ``buf`` to the serial device specified by ``base``.
|
||||||
|
@ -138,7 +138,7 @@ prototype for this routine:
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
void * sbrk(size_t increment)
|
void * sbrk(ptrdiff_t increment)
|
||||||
|
|
||||||
The ``increment`` amount is based upon the ``sbrk_amount`` parameter passed to
|
The ``increment`` amount is based upon the ``sbrk_amount`` parameter passed to
|
||||||
the ``bsp_libc_init`` during system initialization.
|
the ``bsp_libc_init`` during system initialization.
|
||||||
|
@ -67,8 +67,8 @@ table is below:
|
|||||||
|
|
||||||
bool dmv177_icm7170_probe(int minor)
|
bool dmv177_icm7170_probe(int minor)
|
||||||
{
|
{
|
||||||
volatile unsigned16 *card_resource_reg;
|
volatile uint16_t *card_resource_reg;
|
||||||
card_resource_reg = (volatile unsigned16 *) DMV170_CARD_RESORCE_REG;
|
card_resource_reg = (volatile uint16_t *) DMV170_CARD_RESORCE_REG;
|
||||||
if ( (*card_resource_reg & DMV170_RTC_INST_MASK) == DMV170_RTC_INSTALLED )
|
if ( (*card_resource_reg & DMV170_RTC_INST_MASK) == DMV170_RTC_INSTALLED )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -149,7 +149,7 @@ to the control. Consider a user structure and chain control:
|
|||||||
typedef struct foo
|
typedef struct foo
|
||||||
{
|
{
|
||||||
rtems_chain_node node;
|
rtems_chain_node node;
|
||||||
uint8_t char* data;
|
char* data;
|
||||||
} foo;
|
} foo;
|
||||||
rtems_chain_control chain;
|
rtems_chain_control chain;
|
||||||
|
|
||||||
@ -192,7 +192,7 @@ placed on another chain:
|
|||||||
|
|
||||||
rtems_chain_initialize_empty (out);
|
rtems_chain_initialize_empty (out);
|
||||||
|
|
||||||
node = chain->first;
|
node = rtems_chain_head (chain);
|
||||||
while (!rtems_chain_is_tail (chain, node))
|
while (!rtems_chain_is_tail (chain, node))
|
||||||
{
|
{
|
||||||
bar = (foo*) node;
|
bar = (foo*) node;
|
||||||
|
@ -3869,7 +3869,7 @@ that the two systems cannot interfere in an undesirable way.
|
|||||||
RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
|
RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
|
||||||
|
|
||||||
/* Configuration Step 3 - Scheduler Table */
|
/* Configuration Step 3 - Scheduler Table */
|
||||||
#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \\
|
#define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
|
||||||
RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
|
RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
|
||||||
io, \
|
io, \
|
||||||
rtems_build_name('I', 'O', ' ', ' ') \
|
rtems_build_name('I', 'O', ' ', ' ') \
|
||||||
|
@ -190,7 +190,7 @@ overrun.
|
|||||||
rtems_cbs_server_id server_id
|
rtems_cbs_server_id server_id
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
printk( "Budget overrun, fixing the task\\n" );
|
printk( "Budget overrun, fixing the task\n" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,8 +206,8 @@ overrun.
|
|||||||
params.budget = 4;
|
params.budget = 4;
|
||||||
|
|
||||||
rtems_cbs_initialize();
|
rtems_cbs_initialize();
|
||||||
rtems_cbs_create_server( ¶ms, &overrun_handler, &server_id )
|
rtems_cbs_create_server( ¶ms, &overrun_handler, &server_id );
|
||||||
rtems_cbs_attach_thread( server_id, SELF );
|
rtems_cbs_attach_thread( server_id, RTEMS_SELF );
|
||||||
rtems_rate_monotonic_create( argument, &rmid );
|
rtems_rate_monotonic_create( argument, &rmid );
|
||||||
|
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
|
@ -158,7 +158,7 @@ INTERNAL_ERROR_THREAD_EXITTED (5)
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
void task( rtems_arg arg )
|
rtems_task task( rtems_task_argument arg )
|
||||||
{
|
{
|
||||||
/* Classic API tasks must not return */
|
/* Classic API tasks must not return */
|
||||||
}
|
}
|
||||||
@ -171,6 +171,7 @@ INTERNAL_ERROR_THREAD_EXITTED (5)
|
|||||||
sc = rtems_task_create(
|
sc = rtems_task_create(
|
||||||
rtems_build_name('T', 'A', 'S', 'K'),
|
rtems_build_name('T', 'A', 'S', 'K'),
|
||||||
1,
|
1,
|
||||||
|
RTEMS_MINIMUM_STACK_SIZE,
|
||||||
RTEMS_DEFAULT_MODES,
|
RTEMS_DEFAULT_MODES,
|
||||||
RTEMS_DEFAULT_ATTRIBUTES,
|
RTEMS_DEFAULT_ATTRIBUTES,
|
||||||
&task_id
|
&task_id
|
||||||
@ -258,7 +259,7 @@ INTERNAL_ERROR_THREAD_QUEUE_ENQUEUE_STICKY_FROM_BAD_STATE (29)
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
void bad( rtems_id timer_id, void *arg )
|
rtems_timer_service_routine bad( rtems_id timer_id, void *arg )
|
||||||
{
|
{
|
||||||
rtems_id *sem_id;
|
rtems_id *sem_id;
|
||||||
|
|
||||||
@ -268,7 +269,7 @@ INTERNAL_ERROR_THREAD_QUEUE_ENQUEUE_STICKY_FROM_BAD_STATE (29)
|
|||||||
assert( 0 );
|
assert( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
void fire_bad_timer( rtems_task_argument arg )
|
rtems_task fire_bad_timer( rtems_task_argument arg )
|
||||||
{
|
{
|
||||||
rtems_status_code sc;
|
rtems_status_code sc;
|
||||||
rtems_id sem_id;
|
rtems_id sem_id;
|
||||||
|
@ -348,7 +348,7 @@ NOTES:
|
|||||||
|
|
||||||
void critical_section( void )
|
void critical_section( void )
|
||||||
{
|
{
|
||||||
rtems_interrupt level;
|
rtems_interrupt_level level;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Please note that the rtems_interrupt_disable() is a macro. The
|
* Please note that the rtems_interrupt_disable() is a macro. The
|
||||||
@ -363,7 +363,7 @@ NOTES:
|
|||||||
/* Critical section, maskable interrupts are disabled */
|
/* Critical section, maskable interrupts are disabled */
|
||||||
|
|
||||||
{
|
{
|
||||||
rtems_interrupt level2;
|
rtems_interrupt_level level2;
|
||||||
|
|
||||||
rtems_interrupt_disable( level2 );
|
rtems_interrupt_disable( level2 );
|
||||||
|
|
||||||
@ -503,7 +503,7 @@ NOTES:
|
|||||||
|
|
||||||
void local_critical_section( void )
|
void local_critical_section( void )
|
||||||
{
|
{
|
||||||
rtems_interrupt level;
|
rtems_interrupt_level level;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Please note that the rtems_interrupt_local_disable() is a macro.
|
* Please note that the rtems_interrupt_local_disable() is a macro.
|
||||||
@ -521,7 +521,7 @@ NOTES:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
{
|
{
|
||||||
rtems_interrupt level2;
|
rtems_interrupt_level level2;
|
||||||
|
|
||||||
rtems_interrupt_local_disable( level2 );
|
rtems_interrupt_local_disable( level2 );
|
||||||
|
|
||||||
|
@ -157,10 +157,10 @@ prototyped as follows:
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
uint32_t rtems_object_id_get_api( rtems_id );
|
Objects_APIs rtems_object_id_get_api( rtems_id );
|
||||||
uint32_t rtems_object_id_get_class( rtems_id );
|
uint32_t rtems_object_id_get_class( rtems_id );
|
||||||
uint32_t rtems_object_id_get_node( rtems_id );
|
uint32_t rtems_object_id_get_node( rtems_id );
|
||||||
uint32_t rtems_object_id_get_index( rtems_id );
|
uint16_t rtems_object_id_get_index( rtems_id );
|
||||||
|
|
||||||
An object control block is a data structure defined by RTEMS which contains the
|
An object control block is a data structure defined by RTEMS which contains the
|
||||||
information necessary to manage a particular object type. For efficiency
|
information necessary to manage a particular object type. For efficiency
|
||||||
|
@ -114,7 +114,7 @@ printing the values.
|
|||||||
void printObjectId(rtems_id id)
|
void printObjectId(rtems_id id)
|
||||||
{
|
{
|
||||||
printf(
|
printf(
|
||||||
"API=%d Class=%d Node=%d Index=%d\n",
|
"API=%d Class=%" PRIu32 " Node=%" PRIu32 " Index=%" PRIu16 "\n",
|
||||||
rtems_object_id_get_api(id),
|
rtems_object_id_get_api(id),
|
||||||
rtems_object_id_get_class(id),
|
rtems_object_id_get_class(id),
|
||||||
rtems_object_id_get_node(id),
|
rtems_object_id_get_node(id),
|
||||||
@ -157,13 +157,14 @@ parts and "pretty-printed."
|
|||||||
|
|
||||||
void prettyPrintObjectId(rtems_id id)
|
void prettyPrintObjectId(rtems_id id)
|
||||||
{
|
{
|
||||||
int tmpAPI, tmpClass;
|
int tmpAPI;
|
||||||
|
uint32_t tmpClass;
|
||||||
|
|
||||||
tmpAPI = rtems_object_id_get_api(id),
|
tmpAPI = rtems_object_id_get_api(id),
|
||||||
tmpClass = rtems_object_id_get_class(id),
|
tmpClass = rtems_object_id_get_class(id),
|
||||||
|
|
||||||
printf(
|
printf(
|
||||||
"API=%s Class=%s Node=%d Index=%d\n",
|
"API=%s Class=%s Node=%" PRIu32 " Index=%" PRIu16 "\n",
|
||||||
rtems_object_get_api_name(tmpAPI),
|
rtems_object_get_api_name(tmpAPI),
|
||||||
rtems_object_get_api_class_name(tmpAPI, tmpClass),
|
rtems_object_get_api_class_name(tmpAPI, tmpClass),
|
||||||
rtems_object_id_get_node(id),
|
rtems_object_id_get_node(id),
|
||||||
@ -373,8 +374,8 @@ OBJECT_ID_GET_CLASS - Obtain Class from Id
|
|||||||
CALLING SEQUENCE:
|
CALLING SEQUENCE:
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
int rtems_object_id_get_class(
|
uint32_t rtems_object_id_get_class(
|
||||||
rtems_id id
|
rtems_id id
|
||||||
);
|
);
|
||||||
|
|
||||||
DIRECTIVE STATUS CODES:
|
DIRECTIVE STATUS CODES:
|
||||||
@ -403,8 +404,8 @@ OBJECT_ID_GET_NODE - Obtain Node from Id
|
|||||||
CALLING SEQUENCE:
|
CALLING SEQUENCE:
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
int rtems_object_id_get_node(
|
uint32_t rtems_object_id_get_node(
|
||||||
rtems_id id
|
rtems_id id
|
||||||
);
|
);
|
||||||
|
|
||||||
DIRECTIVE STATUS CODES:
|
DIRECTIVE STATUS CODES:
|
||||||
@ -433,8 +434,8 @@ OBJECT_ID_GET_INDEX - Obtain Index from Id
|
|||||||
CALLING SEQUENCE:
|
CALLING SEQUENCE:
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
int rtems_object_id_get_index(
|
uint16_t rtems_object_id_get_index(
|
||||||
rtems_id id
|
rtems_id id
|
||||||
);
|
);
|
||||||
|
|
||||||
DIRECTIVE STATUS CODES:
|
DIRECTIVE STATUS CODES:
|
||||||
|
@ -522,8 +522,8 @@ executes every 100 clock ticks.
|
|||||||
rtems_status_code status;
|
rtems_status_code status;
|
||||||
name = rtems_build_name( 'P', 'E', 'R', 'D' );
|
name = rtems_build_name( 'P', 'E', 'R', 'D' );
|
||||||
status = rtems_rate_monotonic_create( name, &period );
|
status = rtems_rate_monotonic_create( name, &period );
|
||||||
if ( status != RTEMS_STATUS_SUCCESSFUL ) {
|
if ( status != RTEMS_SUCCESSFUL ) {
|
||||||
printf( "rtems_monotonic_create failed with status of %d.\n", rc );
|
printf( "rtems_monotonic_create failed with status of %d.\n", status );
|
||||||
exit( 1 );
|
exit( 1 );
|
||||||
}
|
}
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
@ -533,11 +533,11 @@ executes every 100 clock ticks.
|
|||||||
}
|
}
|
||||||
/* missed period so delete period and SELF */
|
/* missed period so delete period and SELF */
|
||||||
status = rtems_rate_monotonic_delete( period );
|
status = rtems_rate_monotonic_delete( period );
|
||||||
if ( status != RTEMS_STATUS_SUCCESSFUL ) {
|
if ( status != RTEMS_SUCCESSFUL ) {
|
||||||
printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status );
|
printf( "rtems_rate_monotonic_delete failed with status of %d.\n", status );
|
||||||
exit( 1 );
|
exit( 1 );
|
||||||
}
|
}
|
||||||
status = rtems_task_delete( SELF ); /* should not return */
|
status = rtems_task_delete( RTEMS_SELF ); /* should not return */
|
||||||
printf( "rtems_task_delete returned with status of %d.\n", status );
|
printf( "rtems_task_delete returned with status of %d.\n", status );
|
||||||
exit( 1 );
|
exit( 1 );
|
||||||
}
|
}
|
||||||
@ -568,21 +568,20 @@ ticks. The last thirty clock ticks are not used by this task.
|
|||||||
{
|
{
|
||||||
rtems_name name_1, name_2;
|
rtems_name name_1, name_2;
|
||||||
rtems_id period_1, period_2;
|
rtems_id period_1, period_2;
|
||||||
rtems_status_code status;
|
|
||||||
name_1 = rtems_build_name( 'P', 'E', 'R', '1' );
|
name_1 = rtems_build_name( 'P', 'E', 'R', '1' );
|
||||||
name_2 = rtems_build_name( 'P', 'E', 'R', '2' );
|
name_2 = rtems_build_name( 'P', 'E', 'R', '2' );
|
||||||
(void ) rtems_rate_monotonic_create( name_1, &period_1 );
|
(void ) rtems_rate_monotonic_create( name_1, &period_1 );
|
||||||
(void ) rtems_rate_monotonic_create( name_2, &period_2 );
|
(void ) rtems_rate_monotonic_create( name_2, &period_2 );
|
||||||
while ( 1 ) {
|
while ( 1 ) {
|
||||||
if ( rtems_rate_monotonic_period( period_1, 100 ) == TIMEOUT )
|
if ( rtems_rate_monotonic_period( period_1, 100 ) == RTEMS_TIMEOUT )
|
||||||
break;
|
break;
|
||||||
if ( rtems_rate_monotonic_period( period_2, 40 ) == TIMEOUT )
|
if ( rtems_rate_monotonic_period( period_2, 40 ) == RTEMS_TIMEOUT )
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
* Perform first set of actions between clock
|
* Perform first set of actions between clock
|
||||||
* ticks 0 and 39 of every 100 ticks.
|
* ticks 0 and 39 of every 100 ticks.
|
||||||
*/
|
*/
|
||||||
if ( rtems_rate_monotonic_period( period_2, 30 ) == TIMEOUT )
|
if ( rtems_rate_monotonic_period( period_2, 30 ) == RTEMS_TIMEOUT )
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
* Perform second set of actions between clock 40 and 69
|
* Perform second set of actions between clock 40 and 69
|
||||||
@ -590,14 +589,14 @@ ticks. The last thirty clock ticks are not used by this task.
|
|||||||
*
|
*
|
||||||
* Check to make sure we didn't miss the period_2 period.
|
* Check to make sure we didn't miss the period_2 period.
|
||||||
*/
|
*/
|
||||||
if ( rtems_rate_monotonic_period( period_2, STATUS ) == TIMEOUT )
|
if ( rtems_rate_monotonic_period( period_2, RTEMS_PERIOD_STATUS ) == RTEMS_TIMEOUT )
|
||||||
break;
|
break;
|
||||||
(void) rtems_rate_monotonic_cancel( period_2 );
|
(void) rtems_rate_monotonic_cancel( period_2 );
|
||||||
}
|
}
|
||||||
/* missed period so delete period and SELF */
|
/* missed period so delete period and SELF */
|
||||||
(void ) rtems_rate_monotonic_delete( period_1 );
|
(void ) rtems_rate_monotonic_delete( period_1 );
|
||||||
(void ) rtems_rate_monotonic_delete( period_2 );
|
(void ) rtems_rate_monotonic_delete( period_2 );
|
||||||
(void ) task_delete( SELF );
|
(void ) rtems_task_delete( RTEMS_SELF );
|
||||||
}
|
}
|
||||||
|
|
||||||
The above task creates two rate monotonic periods as part of its
|
The above task creates two rate monotonic periods as part of its
|
||||||
|
@ -1553,7 +1553,7 @@ EXAMPLE:
|
|||||||
#include <rtems.h>
|
#include <rtems.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
void task( rtems_task_argument arg );
|
rtems_task task( rtems_task_argument arg );
|
||||||
|
|
||||||
void example( void )
|
void example( void )
|
||||||
{
|
{
|
||||||
|
@ -60,7 +60,13 @@ Example hooks structure and configuration structure folllow.
|
|||||||
40, /* FTPD task priority */
|
40, /* FTPD task priority */
|
||||||
512*1024, /* Maximum hook 'file' size */
|
512*1024, /* Maximum hook 'file' size */
|
||||||
0, /* Use default port */
|
0, /* Use default port */
|
||||||
ftp_hooks /* Local ftp hooks */
|
ftp_hooks, /* Local ftp hooks */
|
||||||
|
0, /* Use / as root */
|
||||||
|
1, /* Max. connections */
|
||||||
|
0, /* Infinite idle timeout */
|
||||||
|
0, /* Read-write access */
|
||||||
|
0, /* Ignore login check */
|
||||||
|
true /* Say hello */
|
||||||
};
|
};
|
||||||
|
|
||||||
Specifying 0 for the well-known port causes FTPD to use the UNIX standard FTPD
|
Specifying 0 for the well-known port causes FTPD to use the UNIX standard FTPD
|
||||||
@ -75,7 +81,7 @@ The prototype for the ``untar`` hook (and hooks, in general) is:
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
int Untar_FromMemory(unsigned char *tar_buf, unsigned long size);
|
int Untar_FromMemory(void *tar_buf, size_t size);
|
||||||
|
|
||||||
An example FTP transcript which exercises this hook is:
|
An example FTP transcript which exercises this hook is:
|
||||||
|
|
||||||
|
@ -99,14 +99,14 @@ to be compiled with the appropriate flags. This can be accomplished by adding
|
|||||||
is inside the RTEMS source tree or is built using the RTEMS application
|
is inside the RTEMS source tree or is built using the RTEMS application
|
||||||
Makefiles, then adding the following line accomplishes this:
|
Makefiles, then adding the following line accomplishes this:
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: makefile
|
||||||
|
|
||||||
DEFINES += -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
|
DEFINES += -D__INSIDE_RTEMS_BSD_TCPIP_STACK__
|
||||||
|
|
||||||
This is equivalent to the following list of definitions. Early versions of the
|
This is equivalent to the following list of definitions. Early versions of the
|
||||||
RTEMS BSD network stack required that all of these be defined.
|
RTEMS BSD network stack required that all of these be defined.
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: makefile
|
||||||
|
|
||||||
-D_COMPILING_BSD_KERNEL_ -DKERNEL -DINET -DNFS \
|
-D_COMPILING_BSD_KERNEL_ -DKERNEL -DINET -DNFS \
|
||||||
-DDIAGNOSTIC -DBOOTP_COMPAT
|
-DDIAGNOSTIC -DBOOTP_COMPAT
|
||||||
|
@ -14,7 +14,7 @@ Including the required managers
|
|||||||
|
|
||||||
The FreeBSD networking code requires several RTEMS managers in the application:
|
The FreeBSD networking code requires several RTEMS managers in the application:
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: makefile
|
||||||
|
|
||||||
MANAGERS = io event semaphore
|
MANAGERS = io event semaphore
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ The networking tasks allocate a lot of memory. For most applications the heap
|
|||||||
should be at least 256 kbytes. The amount of memory set aside for the heap can
|
should be at least 256 kbytes. The amount of memory set aside for the heap can
|
||||||
be adjusted by setting the ``CFLAGS_LD`` definition as shown below:
|
be adjusted by setting the ``CFLAGS_LD`` definition as shown below:
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: makefile
|
||||||
|
|
||||||
CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0x80000
|
CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0x80000
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ the first two entries in this structure.
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
40 * (1024 + sizeof(struct sockaddr_in)
|
40 * (1024 + sizeof(struct sockaddr_in))
|
||||||
|
|
||||||
``unsigned long tcp_tx_buf_size``
|
``unsigned long tcp_tx_buf_size``
|
||||||
This configuration parameter specifies the maximum amount of buffer memory
|
This configuration parameter specifies the maximum amount of buffer memory
|
||||||
|
@ -77,7 +77,7 @@ queue.
|
|||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: c
|
||||||
|
|
||||||
typedef struct mq_attr{
|
struct mq_attr{
|
||||||
long mq_flags;
|
long mq_flags;
|
||||||
long mq_maxmsg;
|
long mq_maxmsg;
|
||||||
long mq_msgsize;
|
long mq_msgsize;
|
||||||
|
@ -400,16 +400,12 @@ The prototype of the ``siginfo_t`` structure is the following:
|
|||||||
{
|
{
|
||||||
int si_signo; /* Signal number */
|
int si_signo; /* Signal number */
|
||||||
int si_code; /* Cause of the signal */
|
int si_code; /* Cause of the signal */
|
||||||
pid_t si_pid; /* Sending process ID */
|
|
||||||
uid_t si_uid; /* Real user ID of sending process */
|
|
||||||
void* si_addr; /* Address of faulting instruction */
|
|
||||||
int si_status; /* Exit value or signal */
|
|
||||||
union sigval
|
union sigval
|
||||||
{
|
{
|
||||||
int sival_int; /* Integer signal value */
|
int sival_int; /* Integer signal value */
|
||||||
void* sival_ptr; /* Pointer signal value */
|
void* sival_ptr; /* Pointer signal value */
|
||||||
} si_value; /* Signal value */
|
} si_value; /* Signal value */
|
||||||
}
|
} siginfo_t;
|
||||||
|
|
||||||
**NOTES:**
|
**NOTES:**
|
||||||
|
|
||||||
@ -778,16 +774,12 @@ The prototype of the ``siginfo_t`` structure is the following:
|
|||||||
{
|
{
|
||||||
int si_signo; /* Signal number */
|
int si_signo; /* Signal number */
|
||||||
int si_code; /* Cause of the signal */
|
int si_code; /* Cause of the signal */
|
||||||
pid_t si_pid; /* Sending process ID */
|
|
||||||
uid_t si_uid; /* Real user ID of sending process */
|
|
||||||
void* si_addr; /* Address of faulting instruction */
|
|
||||||
int si_status; /* Exit value or signal */
|
|
||||||
union sigval
|
union sigval
|
||||||
{
|
{
|
||||||
int sival_int; /* Integer signal value */
|
int sival_int; /* Integer signal value */
|
||||||
void* sival_ptr; /* Pointer signal value */
|
void* sival_ptr; /* Pointer signal value */
|
||||||
} si_value; /* Signal value */
|
} si_value; /* Signal value */
|
||||||
}
|
} siginfo_t;
|
||||||
|
|
||||||
.. _sigtimedwait:
|
.. _sigtimedwait:
|
||||||
|
|
||||||
@ -837,7 +829,7 @@ The ``timespec`` structure is defined as follows:
|
|||||||
{
|
{
|
||||||
time_t tv_sec; /* Seconds */
|
time_t tv_sec; /* Seconds */
|
||||||
long tv_nsec; /* Nanoseconds */
|
long tv_nsec; /* Nanoseconds */
|
||||||
}
|
};
|
||||||
|
|
||||||
**NOTES:**
|
**NOTES:**
|
||||||
|
|
||||||
@ -895,7 +887,7 @@ The ``sigval`` union is specified as:
|
|||||||
{
|
{
|
||||||
int sival_int; /* Integer signal value */
|
int sival_int; /* Integer signal value */
|
||||||
void* sival_ptr; /* Pointer signal value */
|
void* sival_ptr; /* Pointer signal value */
|
||||||
}
|
};
|
||||||
|
|
||||||
**NOTES:**
|
**NOTES:**
|
||||||
|
|
||||||
|
@ -103,12 +103,15 @@ provided an alias for ``usercmd`` named ``userecho``.
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
rtems_shell_cmd_t Shell_USERCMD_Command = {
|
rtems_shell_cmd_t Shell_USERCMD_Command = {
|
||||||
"usercmd", /* name */
|
"usercmd", /* name */
|
||||||
"usercmd n1 \[n2 \[n3...]]", /* usage */
|
"usercmd n1 [n2 [n3...]]", /* usage */
|
||||||
"user", /* topic */
|
"user", /* topic */
|
||||||
main_usercmd, /* command */
|
main_usercmd, /* command */
|
||||||
NULL, /* alias */
|
NULL, /* alias */
|
||||||
NULL /* next */
|
NULL, /* next */
|
||||||
|
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH, /* mode */
|
||||||
|
0, /* uid */
|
||||||
|
0 /* gid */
|
||||||
};
|
};
|
||||||
rtems_shell_alias_t Shell_USERECHO_Alias = {
|
rtems_shell_alias_t Shell_USERECHO_Alias = {
|
||||||
"usercmd", /* command */
|
"usercmd", /* command */
|
||||||
|
@ -100,7 +100,7 @@ NOTES:
|
|||||||
EXAMPLES:
|
EXAMPLES:
|
||||||
The following is an example of how to use ``blksync``:
|
The following is an example of how to use ``blksync``:
|
||||||
|
|
||||||
.. code-block:: c
|
.. code-block:: shell
|
||||||
|
|
||||||
blksync /dev/hda1
|
blksync /dev/hda1
|
||||||
|
|
||||||
@ -1469,7 +1469,7 @@ ln - make links
|
|||||||
.. index:: ln
|
.. index:: ln
|
||||||
|
|
||||||
SYNOPSYS:
|
SYNOPSYS:
|
||||||
.. code-block:: c
|
.. code-block:: shell
|
||||||
|
|
||||||
ln [-fhinsv] source_file [target_file]
|
ln [-fhinsv] source_file [target_file]
|
||||||
ln [-fhinsv] source_file ... target_dir
|
ln [-fhinsv] source_file ... target_dir
|
||||||
@ -1729,7 +1729,7 @@ mkdir - create a directory
|
|||||||
.. index:: mkdir
|
.. index:: mkdir
|
||||||
|
|
||||||
SYNOPSYS:
|
SYNOPSYS:
|
||||||
.. code-block:: c
|
.. code-block:: shell
|
||||||
|
|
||||||
mkdir dir [dir1 .. dirN]
|
mkdir dir [dir1 .. dirN]
|
||||||
|
|
||||||
|
@ -1030,7 +1030,7 @@ time - time command execution
|
|||||||
.. index:: time
|
.. index:: time
|
||||||
|
|
||||||
SYNOPSYS:
|
SYNOPSYS:
|
||||||
.. code-block:: c
|
.. code-block:: shell
|
||||||
|
|
||||||
time command [argument ...]
|
time command [argument ...]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user