From d0c39838146c6a186ddda3d95dac71c3fa90f11e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 22 Sep 2015 16:21:12 +0200 Subject: 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 . 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. --- cpukit/sapi/include/rtems/init.h | 45 +++++++--------------------------------- 1 file changed, 7 insertions(+), 38 deletions(-) (limited to 'cpukit/sapi/include/rtems/init.h') 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 -- cgit v1.2.3