From 0eb595a8393ecb56ba023622cc8fcecc09904f3d Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 22 Aug 2008 16:38:00 +0000 Subject: [PATCH] 2008-08-22 Joel Sherrill * bsp_howto/Makefile.am, bsp_howto/init.t, bsp_howto/intro.t, bsp_howto/makefiles.t, bsp_howto/support.t: Update initialization sequence. Add another figure. * bsp_howto/BSPInitFlowchart-49.eps, bsp_howto/BSPInitFlowchart-49.png: New files. --- doc/ChangeLog | 7 + doc/bsp_howto/BSPInitFlowchart-49.eps | Bin 0 -> 74709 bytes doc/bsp_howto/BSPInitFlowchart-49.png | Bin 0 -> 39470 bytes doc/bsp_howto/Makefile.am | 2 +- doc/bsp_howto/init.t | 224 +++++++++++++++++++------- doc/bsp_howto/intro.t | 19 +++ doc/bsp_howto/makefiles.t | 4 +- doc/bsp_howto/support.t | 144 ++++++++--------- 8 files changed, 258 insertions(+), 142 deletions(-) create mode 100644 doc/bsp_howto/BSPInitFlowchart-49.eps create mode 100644 doc/bsp_howto/BSPInitFlowchart-49.png diff --git a/doc/ChangeLog b/doc/ChangeLog index cfe45bdc6b..39f60f9867 100644 --- a/doc/ChangeLog +++ b/doc/ChangeLog @@ -1,3 +1,10 @@ +2008-08-22 Joel Sherrill + + * bsp_howto/Makefile.am, bsp_howto/init.t, bsp_howto/intro.t, + bsp_howto/makefiles.t, bsp_howto/support.t: Update initialization + sequence. Add another figure. + * bsp_howto/BSPInitFlowchart-49.eps, bsp_howto/BSPInitFlowchart-49.png: New files. + 2008-08-21 Joel Sherrill * index.html.in: Reorder manuals. diff --git a/doc/bsp_howto/BSPInitFlowchart-49.eps b/doc/bsp_howto/BSPInitFlowchart-49.eps new file mode 100644 index 0000000000000000000000000000000000000000..b856353d052e81dd3852dabdbb3cf9c20d2b5e04 GIT binary patch literal 74709 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 Cr3#S% literal 0 HcmV?d00001 diff --git a/doc/bsp_howto/BSPInitFlowchart-49.png b/doc/bsp_howto/BSPInitFlowchart-49.png new file mode 100644 index 0000000000000000000000000000000000000000..da5171441565677460da910bde49f2b10c452df0 GIT binary patch literal 39470 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. +The BSP author probably should be aware of the @code{Configuration} +Table structure generated by @code{} during debug but +should not explicitly reference it in the source code. There are helper +routines provided by RTEMS to access individual fields. -@end itemize +In older RTEMS versions, the BSP included a number of required global +variables. We have made every attempt to eliminate these in the interest +of simplicity. @section Board Initialization This section describes the steps an application goes through from the time the first BSP code is executed until the first application task -executes. The routines invoked during this will be discussed and -their location in the RTEMS source tree pointed out. +executes. The following figure illustrates the program flow during +this sequence: + +@ifset use-ascii +IMAGE NOT AVAILABLE IN ASCII VERSION +@end ifset + +@ifset use-tex +@image{BSPInitFlowchart-49,6in,,Initialization Sequence,.png} +@c @image{FILENAME[, WIDTH[, HEIGHT[, ALTTEXT[, EXTENSION]]]]} +@end ifset + +@ifset use-html +@html +
+Initialization Sequence +
+@end html +@end ifset + +The above figure illustrates the flow from assembly language start code +to the shared @code{bootcard.c} framework then through the C Library, +RTEMS, device driver initialization phases, and the context switch +to the first application task. After this, the application executes +until it calls @code{exit}, @code{rtems_shutdown_executive}, or some +other normal termination initiating routine and control is returned +to @code{bootcard.c} which allows the BSP to perform some clanup in C +(@code{bsp_cleanup}) and then @code{boot_card} returns to the assembly +language which initially invoked it. + +The routines invoked during this will be discussed and their location +in the RTEMS source tree pointed out as we discuss each. @subsection Start Code - Assembly Language Initialization -The assembly language code in the directory @code{start} is -the first part of the application to execute. It is -responsible for initializing the processor and board enough to execute -the rest of the BSP. This includes: +The assembly language code in the directory @code{start} is the first part +of the application to execute. It is responsible for initializing the +processor and board enough to execute the rest of the BSP. This includes: @itemize @bullet @item initializing the stack @@ -82,26 +117,28 @@ the rest of the BSP. This includes: @item copy the initialized data from ROM to RAM @end itemize -The general rule of thumb is that the -start code in assembly should do the minimum necessary to allow C code -to execute to complete the initialization sequence. +The general rule of thumb is that the start code in assembly should +do the minimum necessary to allow C code to execute to complete the +initialization sequence. The initial assembly language start code completes its execution by invoking the shared routine @code{boot_card()}. The label (symbolic name) associated with the starting address of the -program is typically called @code{start}. The start object file -is the first object file linked into the program image so it is insured -that the start code is at offset 0 in the @code{.text} section. It is -the responsibility of the linker script in conjunction with the -compiler specifications file to put the start code in the correct location -in the application image. +program is typically called @code{start}. The start object file is the +first object file linked into the program image so it is ensured that +the start code is at offset 0 in the @code{.text} section. It is the +responsibility of the linker script in conjunction with the compiler +specifications file to put the start code in the correct location in +the application image. @subsection boot_card() - Boot the Card -The @code{boot_card()} is the first C code invoked. Most of the BSPs -use the same shared version of @code{boot_card()} which is located in -the following file: +The @code{boot_card()} is the first C code invoked. This file is the +core component in the RTEMS BSP Initialization Framework and provides +the proper sequencing of initialization steps for the BSP, RTEMS and +device drivers. All BSPs use the same shared version of @code{boot_card()} +which is located in the following file: @example c/src/lib/libbsp/shared/bootcard.c @@ -111,23 +148,88 @@ The @code{boot_card()} routine performs the following functions: @itemize @bullet -@item invokes the BSP specific routine @code{bsp_start()}, +@item It disables processor interrupts. -@item invokes the RTEMS directive @code{rtems_initialize_executive_early()} -to initialize the executive, C Library, and all device drivers but -return without initiating multitasking or enabling interrupts, +@item It sets the global program name and command line argument variables +for later use by the application. -@item invokes the shared @code{main()} in the same file as -@code{boot_card()} which does not return until the -@code{rtems_shutdown_executive} directive is called, and +@item If the macro is BSP_BOOTCARD_HANDLES_RAM_ALLOCATION is defined, it +will invoke the BSP specific @code{bsp_get_work_area} function to obtain +information on the amount and location of BSP RAM that is available to +be allocated to the C Program Heap and RTEMS Workspace. If the amount +of memory available for the RTEMS Workspace is less than that required +by the application (e.g. @code{rtems_configuration_get_work_space_size()}, +then a message is printed using @code{printk}, @code{bsp_cleanup} is +invoked, and -1 is return to the assembly language start code. BSPs which +use this memory allocation functionality in @code{bootcard.c} +must invoke the RTEMS specific autoconf macro +@code{RTEMS_BSP_BOOTCARD_HANDLES_RAM_ALLOCATION} in the BSP's +@code{configure.ac} file. -@item invokes the BSP specific routine @code{bsp_cleanup()} to perform -any necessary board specific shutdown actions. +@item It invokes the BSP specific routine @code{bsp_start()} which is +written in C and thus able to perform more advanced initialization. +Often MMU and bus initialization occurs here. + +@item It invokes the RTEMS directive +@code{rtems_initialize_data_structures()} to initialize the RTEMS +executive to a state where objects can be created but tasking is not +enabled. + +@item If the macro is BSP_BOOTCARD_HANDLES_RAM_ALLOCATION is defined, +it will calculate the memory available for the C Program Heap and invoke +the initialization routine for the C Library with this information. + +@item It invokes the BSP specific routine @code{bsp_pretasking_hook}. On +most BSPs which utilize the framework, this routine does nothing. + +@item If @code{RTEMS_DEBUG} is enabled, then the RTEMS debug mask level +is inialized appropriately. + +@item It invokes the RTEMS directive +@code{rtems_initialize_before_drivers()} to initialize the MPCI Server +thread in a multiprocessor configuration and execute API specific +extensions. + +@item It invokes the BSP specific routine @code{bsp_predriver_hook}. For +most BSPs, the implementation of this routine does nothing. However, +on some BSPs, required subsystems which utilize the C Library +(e.g. @code{malloc} in particular) may be initialized at this point. + +@item It invokes the RTEMS directive +@code{rtems_initialize_device_drivers()} to initialize the statically +configured set of device drivers in the order they were specified in +the Configuration Table. + +@item It invokes the BSP specific routine @code{bsp_postdriver_hook}. For +most BSPs, the implementation of this routine does nothing. However, some +BSPs use this hook and perform some initialization which must be done at +this point in the initialization sequence. This is the last opportunity +for the BSP to insert BSP specific code into the initialization sequence. + +@item It invokes the RTEMS directive +@code{rtems_initialize_start_multitasking()} which starts multitasking and context switches to the first task. @code{boot_card()} will not return until the application is shutdown. As part of this sequence the following actions occur: + +@itemize @bullet + +@item RTEMS will context switch to the first application task. As a +side-effect of this context switch, processor interrupts will be enabled. +This is often the source of a fatal error during BSP development because +the BSP did not clear and/or disable all interrupt sources and a spurious +interrupt will occur . + +@item When in the context of the first task but before its body has been +entered, any C++ Global Constructors will be invoked. @end itemize -It is important to note that the executive and much of the -support environment must be initialized before invoking @code{main()}. +@item Finally after the application shutsdown RTEMS and control is +return to @code{boot_card()} from RTEMS, it invokes the BSP specific +routine @code{bsp_cleanup()} to perform any necessary board specific +shutdown actions. + +@end itemize + +That's it. We just went through the entire sequence. @subsection bsp_start() - BSP Specific Initialization @@ -180,7 +282,7 @@ support library and, most importantly, invokes the C++ global constructors. The precise placement of when @code{main()} is invoked in the -RTEMS initialization sequence insures that C Library and non-blocking +RTEMS initialization sequence ensures that C Library and non-blocking calls can be made in global C++ constructors. The shared implementation of this routine is located in the following file: diff --git a/doc/bsp_howto/intro.t b/doc/bsp_howto/intro.t index cce6302277..1d4c1bdfa6 100644 --- a/doc/bsp_howto/intro.t +++ b/doc/bsp_howto/intro.t @@ -55,3 +55,22 @@ this manual as the result of his experiences. At that time, this document was viewed internally as the most important "missing manual" in the RTEMS documentation set. +The gen68340 BSP is a good example of the life of an RTEMS BSP. It is +based upon a part not recommended for new designs and none of the core RTEMS +Project team members have one of these boards. Thus we are unlikely to +perform major updates on this BSP. So as long as it compiles and links all +tests, it will be available. + +The RTEMS Project team members are always trying to identify common +code across BSPs and refactoring the code into shared routines. +As part of this effort, the we will enhance the common BSP Framework. +Not surprisingly, not every BSP takes advantage of every feature in +the framework. The gen68340 does not take advantage of as many features +as the ERC32 BSP does. So in many ways, the ERC32 is a better example +BSP at this point. But even the ERC32 BSP does not include examples +of every driver template and framework available to the BSP author. +So in this guide we will try to point out good examples from other BSPs. + +Our goal is for you to be able to reuse as much code as possible and +write as little board specific code as possible. + diff --git a/doc/bsp_howto/makefiles.t b/doc/bsp_howto/makefiles.t index baeb3bf5b2..b75f07dd06 100644 --- a/doc/bsp_howto/makefiles.t +++ b/doc/bsp_howto/makefiles.t @@ -1,5 +1,5 @@ @c -@c COPYRIGHT (c) 1988-2002. +@c COPYRIGHT (c) 1988-2008. @c On-Line Applications Research Corporation (OAR). @c All rights reserved. @c @@ -27,11 +27,9 @@ of four phases as shown here: @end example @end ifset - @ifset use-tex @image{Developer-User-Timeline,6in,,Developer User Timeline,.png} @c @image{FILENAME[, WIDTH[, HEIGHT[, ALTTEXT[, EXTENSION]]]]} - @end ifset @ifset use-html diff --git a/doc/bsp_howto/support.t b/doc/bsp_howto/support.t index f9548d2b96..c056650f97 100644 --- a/doc/bsp_howto/support.t +++ b/doc/bsp_howto/support.t @@ -18,29 +18,19 @@ file from the PowerPC psim BSP: @example @group -%rename cpp old_cpp -%rename lib old_lib %rename endfile old_endfile %rename startfile old_startfile %rename link old_link -*cpp: -%(old_cpp) %@{qrtems: -D__embedded__@} -Asystem(embedded) - -*lib: -%@{!qrtems: %(old_lib)@} %@{qrtems: --start-group \ -%@{!qrtems_debug: -lrtemsall@} %@{qrtems_debug: -lrtemsall_g@} \ --lc -lgcc --end-group ecrtn%O%s \ -%@{!qnolinkcmds: -T linkcmds%s@}@} - *startfile: -%@{!qrtems: %(old_startfile)@} %@{qrtems: ecrti%O%s \ -%@{!qrtems_debug: startsim.o%s@} \ -%@{qrtems_debug: startsim_g.o%s@}@} +%@{!qrtems: %(old_startfile)@} \ +%@{!nostdlib: %@{qrtems: ecrti%O%s rtems_crti%O%s crtbegin.o%s start.o%s@}@} *link: -%@{!qrtems: %(old_link)@} %@{qrtems: -Qy -dp -Bstatic \ --T linkcmds%s -e _start -u __vectors@} +%@{!qrtems: %(old_link)@} %@{qrtems: -Qy -dp -Bstatic -e _start -u __vectors@} + +*endfile: +%@{!qrtems: %(old_endfile)@} %@{qrtems: crtend.o%s ecrtn.o%s@} @end group @end example @@ -50,26 +40,19 @@ embedded their original definition. The subsequent sections specify what behavior is expected when the @code{-qrtems} or @code{-qrtems_debug} option is specified. -The @code{*cpp} definition specifies that when @code{-qrtems} -is specified, predefine the preprocessor symbol @code{__embedded__}. - -The @code{*lib} section insures that the RTEMS library, BSP specific -linker script, gcc support library, and the EABI specific @code{ecrtn} -file are used. - The @code{*startfile} section specifies that the BSP specific file -@code{startsim.o} will be used instead of @code{crt0.o}. In addition, -the EABI specific file @code{ecrti.o} will be linked in with the -executable. +@code{start.o} will be used instead of @code{crt0.o}. In addition, +various EABI support files (@code{ecrti.o} etc.) will be linked in with +the executable. -The @code{*link} section specifies the arguments that will be passed to -the linker. +The @code{*link} section adds some arguments to the linker when it is +invoked by GCC to link an application for this BSP. The format of this file is specific to the GNU Compiler Suite. The argument used to override and extend the compiler built-in specifications -is relatively new to the toolset. The @code{-specs} option is present -in all @code{egcs} distributions and @code{gcc} distributions starting -with version 2.8.0. +is available in all recent GCC versions. The @code{-specs} option is +present in all @code{egcs} distributions and @code{gcc} distributions +starting with version 2.8.0. @section README Files @@ -126,16 +109,11 @@ as a starting point. Many @code{bsp.h} files provide prototypes of variables defined in the linker script (@code{linkcmds}). -There are a number of fields in this file that are used only by the -RTEMS Test Suites. The following is a list of these: +@section tm27.h Include File + +The @code{tm27} test from the RTEMS Timing Test Suite is designed to measure the length of time required to vector to and return from an interrupt handler. This test requires some help from the BSP to know how to cause and manipulate the interrupt source used for this measurement. The following is a list of these: @itemize @bullet -@item @code{MAX_LONG_TEST_DURATION} - the longest length of time a -"long running" test should run. - -@item @code{MAX_SHORT_TEST_DURATION} - the longest length of time a -"short running" test should run. - @item @code{MUST_WAIT_FOR_INTERRUPT} - modifies behavior of @code{tm27}. @item @code{Install_tm27_vector} - installs the interrupt service @@ -153,6 +131,14 @@ can generate a nested interrupt. @end itemize +All members of the Timing Test Suite are designed to run @b{WITHOUT} +the Clock Device Driver installed. This increases the predictability +of the tests' execution as well as avoids occassionally including the +overhead of a clock tick interrupt in the time reported. Because of +this it is sometimes possible to use the clock tick interrupt source +as the source of this test interrupt. On other architectures, it is +possible to directly force an interrupt to occur. + @section Calling Overhead File The file @code{include/coverhd.h} contains the overhead associated @@ -168,40 +154,35 @@ The numbers in this file are obtained by running the "Timer Overhead" overhead is subtracted from the directive execution times reported by the Timing Suite. +There is a shared implementation of @code{coverhd.h} which sets all of +the overhead constants to 0. On faster processors, this is usually the +best alternative for the BSP as the calling overhead is extremely small. +This file is located at: + +@example +c/src/lib/libbsp/shared/include/coverhd.h +@end example + @section sbrk() Implementation -If the BSP wants to dynamically extend the heap used by the -C Library memory allocation routines (i.e. @code{malloc} family), -then this routine must be functional. The following is the -prototype for this routine: +Although nearly all BSPs give all possible memory to the C Program Heap +at initialization, it is possible for a BSP to configure the initial +size of the heap small and let it grow on demand. If the BSP wants +to dynamically extend the heap used by the C Library memory allocation +routines (i.e. @code{malloc} family), then the@code{sbrk} routine must +be functional. The following is the prototype for this routine: @example void * sbrk(size_t increment) @end example The @code{increment} amount is based upon the @code{sbrk_amount} -parameter passed to the @code{RTEMS_Malloc_Initialize} during system -initialization. -See @ref{Initialization Code RTEMS Pretasking Callback} for more -information. +parameter passed to the @code{bsp_libc_init} during system initialization. +Historically initialization of the C Library was done as part of the +BSP's Pretasking Hook but now the BSP Boot Card Framework can perform +this operation. -There is a default implementation which returns an error to indicate -that the heap can not be extended. This implementation can be -found in @code{c/src/lib/libbsp/shared/sbrk.c}. Many of the BSPs -use this shared implementation. In order to use this implementation, -the file @code{Makefile.am} in the BSP's @code{startup} directory -must be modified so that the @code{$VPATH} variable searches -both the @code{startup} directory and the shared directory. The following -illustates the @code{VPATH} setting in the PowerPC psim BSP's -@code{startup/Makefile.am}: - -@example -VPATH = @@srcdir@@:@@srcdir@@/../../../shared -@end example - -This instructs make to look in all of the directories in the @code{VPATH} -for the source files. The directories will be examined in the order -they are specified. +If your BSP does not want to support dynamic heap extension, then you do not have to do anything special. However, if you want to support @code{sbrk}, you must provide an implementation of this method and define @code{CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK} in @code{bsp.h}. This informs @code{rtems/confdefs.h} to configure the Malloc Family Extensions which support @code{sbrk}. @section bsp_cleanup() - Cleanup the Hardware @@ -215,20 +196,28 @@ c/src/lib/libbsp/shared/bspclean.c The @code{bsp_cleanup()} routine can be used to return to a ROM monitor, insure that interrupt sources are disabled, etc.. This routine is the -last place to insure a clean shutdown of the hardware. +last place to insure a clean shutdown of the hardware. On some BSPs, +it prints a message indicating that the application completed execution +and waits for the user to press a key before resetting the board. +The PowerPC/gen83xx and PowerPC/gen5200 BSPs do this when they are built +to support the FreeScale evaluation boards. This is convenient when +using the boards in a development environment and may be disabled for +production use. @section set_vector() - Install an Interrupt Vector -The @code{set_vector} routine is responsible for installing an interrupt -vector. It invokes the support routines necessary to install an -interrupt handler as either a "raw" or an RTEMS interrupt handler. Raw -handlers bypass the RTEMS interrupt structure and are responsible for -saving and restoring all their own registers. Raw handlers are useful -for handling traps, debug vectors, etc.. +On targets with Simple Vectored Interrupts, the BSP must provide +an implementation of the @code{set_vector} routine. This routine is +responsible for installing an interrupt vector. It invokes the support +routines necessary to install an interrupt handler as either a "raw" +or an RTEMS interrupt handler. Raw handlers bypass the RTEMS interrupt +structure and are responsible for saving and restoring all their own +registers. Raw handlers are useful for handling traps, debug vectors, +etc.. -The @code{set_vector} routine is a central place to perform -interrupt controller manipulation and encapsulate that information. -It is usually implemented as follows: +The @code{set_vector} routine is a central place to perform interrupt +controller manipulation and encapsulate that information. It is usually +implemented as follows: @example @group @@ -251,7 +240,8 @@ rtems_isr_entry set_vector( /* returns old vector */ @end group @end example - -@b{NOTE:} @code{set_vector} is provided by the majority of BSPs but -not all. In particular, the i386 BSPs use a different scheme. +@b{NOTE:} The i386, PowerPC and ARM ports use a Programmable +Interrupt Controller model which does not require the BSP to implement +@code{set_vector}. BSPs for these architectures must provide a different +set of support routines.