change bsp

Gedare Bloom gedare at rtems.org
Wed Jan 10 15:36:21 UTC 2018


Hello,

On Tue, Jan 2, 2018 at 8:35 AM, bin.wang at qkmtech.com
<bin.wang at qkmtech.com> wrote:
> hi
>
> 1:i want to change the bsp according to the zynq zedboard。it only has
> console driver and i2c driver。 so i want to add some drviers i used in
> bare-metal software before (such as gpio)。i do not know how to start。
>
You can add the drivers to the BSP. Probably you can just make your
baremetal drivers work correctly by initializing them at the right
time.

> please give me some advice。
>
> i find the function in bootcard.c       "rtems_initialize_device_drivers"
> i think i need add code here, but the bsp i used installed as lib.    so ,
> can i  change the source code?
>
> i do not understand the RTEMS_DRVMGR_STARTUP level 1,2,3,4   ,is there a
> example to add my device driver to the rtems architecture?
>
This DRVMGR stuff interacts with the cpukit/libdrvmgr, which is from
Gaisler folks and mostly supports Sparc targets.

What version of rtems do you use? I guess it is 4.11.x?

You could initialize baremetal drivers at any point even in your
application itself.

> void rtems_initialize_device_drivers(void)
> {
>   /*
>    *  Initialize all the device drivers and initialize the MPCI layer.
>    *
>    *  NOTE:  The MPCI may be build upon a device driver.
>    */
>
>   #ifdef RTEMS_DRVMGR_STARTUP
>   /* BSPs has already registered their "root bus" driver in the
>    * bsp_predriver hook or so.
>    *
>    * Init Drivers to Level 1, constraints:
>    *   - Interrupts and system clock timer does not work.
>    *   - malloc() work, however other memory services may not
>    *     have been initialized yet.
>    *   - initializes most basic stuff
>    *
>    * Typical setup in Level 1:
>    *   - Find most devices in system, do PCI scan and configuration.
>    *   - Reset hardware if needed.
>    *   - Install IRQ driver
>    *   - Install Timer driver
>    *   - Install console driver and debug printk()
>    *   - Install extra memory.
>    */
>   _DRV_Manager_init_level(1);
>   bsp_driver_level_hook(1);
>   #endif
>
>   /* Initialize I/O drivers.
>    *
>    * Driver Manager note:
>    * All drivers may not be registered yet. Drivers will dynamically
>    * be initialized when registered in level 2,3 and 4.
>    */
>   _IO_Initialize_all_drivers();
>
>   #ifdef RTEMS_DRVMGR_STARTUP
>   /* Init Drivers to Level 2, constraints:
>    *  - Interrupts can be registered and enabled.
>    *  - System Clock is running
>    *  - Console may be used.
>    *
>    * This is typically where drivers are initialized
>    * for the first time.
>    */
>   _DRV_Manager_init_level(2);
>   bsp_driver_level_hook(2);
>
>   /* Init Drivers to Level 3
>    *
>    * This is typically where normal drivers are initialized
>    * for the second time, they may depend on other drivers
>    * API inited in level 2
>    */
>   _DRV_Manager_init_level(3);
>   bsp_driver_level_hook(3);
>
>   /* Init Drivers to Level 4,
>    * Init drivers that depend on services initialized in Level 3
>    */
>   _DRV_Manager_init_level(4);
>   bsp_driver_level_hook(4);
>   #endif
>
>   #if defined(RTEMS_MULTIPROCESSING)
>     if ( _System_state_Is_multiprocessing ) {
>       _MPCI_Initialization();
>       _MPCI_Internal_packets_Send_process_packet(
> MPCI_PACKETS_SYSTEM_VERIFY
>       );
>     }
>   #endif
>
>   /*
>    *  Run the APIs and BSPs postdriver hooks.
>    *
>    *  The API extensions are supposed to create user initialization tasks.
>    */
>   _API_extensions_Run_postdriver();
> }
>
>
>
>
> 2:another question is how can i enable the interrupt? in the init task is
> ok?
>
Interrupts will be already enabled when Init() is called. They get
turned on during the RTEMS initialization sequence.

>
> ________________________________
> bin.wang at qkmtech.com
>
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users


More information about the users mailing list