diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-09-22 16:21:12 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-12-11 08:17:16 +0100 |
commit | d0c39838146c6a186ddda3d95dac71c3fa90f11e (patch) | |
tree | 1f96df0fd4b6e5ee9658060529b69bea1a46de4a /cpukit/sapi/include/rtems/init.h | |
parent | m32r/configure.ac: Looked for m32rsim to exist and now is gone (diff) | |
download | rtems-d0c39838146c6a186ddda3d95dac71c3fa90f11e.tar.bz2 |
Use linker set for system initialization
Make rtems_initialize_data_structures(),
rtems_initialize_before_drivers() and rtems_initialize_device_drivers()
static. Rename rtems_initialize_start_multitasking() to
rtems_initialize_executive() and call the registered system
initialization handlers in this function. Add system initialization API
available via #include <rtems/sysinit.h>. Update the documentation
accordingly.
This is no functional change, only the method to call the existing
initialization routines changes. Instead of direct function calls a
table of function pointers contained in the new RTEMS system
initialization linker set is used. This table looks like this (the
actual addresses depend on the target).
nm *.exe | grep _Linker | sort
0201a2d0 D _Linker_set__Sysinit_begin
0201a2d0 D _Linker_set__Sysinit_bsp_work_area_initialize
0201a2d4 D _Linker_set__Sysinit_bsp_start
0201a2d8 D _Linker_set__Sysinit_rtems_initialize_data_structures
0201a2dc D _Linker_set__Sysinit_bsp_libc_init
0201a2e0 D _Linker_set__Sysinit_rtems_initialize_before_drivers
0201a2e4 D _Linker_set__Sysinit_bsp_predriver_hook
0201a2e8 D _Linker_set__Sysinit_rtems_initialize_device_drivers
0201a2ec D _Linker_set__Sysinit_bsp_postdriver_hook
0201a2f0 D _Linker_set__Sysinit_end
Add test sptests/spsysinit01.
Update #2408.
Diffstat (limited to '')
-rw-r--r-- | cpukit/sapi/include/rtems/init.h | 45 |
1 files changed, 7 insertions, 38 deletions
diff --git a/cpukit/sapi/include/rtems/init.h b/cpukit/sapi/include/rtems/init.h index ccb6ecd783..b92bf8590e 100644 --- a/cpukit/sapi/include/rtems/init.h +++ b/cpukit/sapi/include/rtems/init.h @@ -46,46 +46,16 @@ extern const rtems_multiprocessing_table #endif /** - * @brief RTEMS data structures initialization. + * @brief Initializes the system and starts multitasking. * - * This routine implements the portion of the RTEMS initializatin process - * that involves initializing data structures to a state that scheduling - * can occur in a consistent manner. - */ -void rtems_initialize_data_structures(void); - -/** - * @brief RTEMS initialization before the device drivers are initialized. - * - * This routine implements the portion of RTEMS initialization that - * is done immediately before device drivers are initialized. - */ -void rtems_initialize_before_drivers(void); - -/** - * @brief RTEMS initialization that initializes all device drivers. - * - * This routine implements the portion of RTEMS initialization that - * initializes all device drivers. - */ -void rtems_initialize_device_drivers(void); - -/** - * @brief Starts the multitasking. - * - * This directive initiates multitasking and performs a context switch to the - * first user application task and may enable interrupts as a side-effect of - * that context switch. The context switch saves the executing context. The - * application runs now. The directive rtems_shutdown_executive() will return - * to the saved context. The exit() function will use this directive. + * Iterates through the system initialization linker set and invokes the + * registered handlers. The final step is to start multitasking. * - * After a return to the saved context a fatal system state is reached. The - * fatal source is RTEMS_FATAL_SOURCE_EXIT with a fatal code set to the value - * passed to rtems_shutdown_executive(). + * This directive should be called by boot_card() only. * * This directive does not return. */ -void rtems_initialize_start_multitasking(void) +void rtems_initialize_executive(void) RTEMS_NO_RETURN; /** @@ -93,9 +63,8 @@ void rtems_initialize_start_multitasking(void) * * This routine implements the rtems_shutdown_executive directive. The * invocation of this directive results in the RTEMS environment being - * shutdown and multitasking halted. From the application's perspective, - * invocation of this directive results in the rtems_initialize_executive - * directive exitting to the startup code which invoked it. + * shutdown and multitasking halted. The system is terminated with a fatal + * source of RTEMS_FATAL_SOURCE_EXIT and the specified result code. */ void rtems_shutdown_executive( uint32_t result |