RTEMS-libbsd实现FDT support for BBB

来源:互联网 发布:长歌门成女捏脸数据 编辑:程序博客网 时间:2024/05/16 17:12

上篇博文描述了如何在RTEMS上实现FDT,这篇文章将展示如何在RTEMS-libbsd上实现FDT support。


rtems-libbsd 管理总线的实现在nexus-devices.h文件中,也就是: rtemsbsd/include/bsp/nexus-devices.h

/* * Copyright (c) 2013-2015 embedded brains GmbH.  All rights reserved. * *  embedded brains GmbH *  Dornierstr. 4 *  82178 Puchheim *  Germany *  <rtems@embedded-brains.de> * * Copyright (c) 2016 Chris Johns <chrisj@rtems.org> All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */#if !defined(BSP_NEXUS_DEVICES_h)#define BSP_NEXUS_DEVICES_h#include <bsp.h>#include <rtems/bsd/bsd.h>#include <machine/rtems-bsd-nexus-bus.h>#if defined(LIBBSP_ARM_REALVIEW_PBX_A9_BSP_H)#include <bsp/irq.h>RTEMS_BSD_DRIVER_SMC0(0x4e000000,  RVPBXA9_IRQ_ETHERNET);#elif defined(LIBBSP_ARM_LPC32XX_BSP_H)#include <bsp/irq.h>RTEMS_BSD_DRIVER_LPC32XX_PWR;RTEMS_BSD_DRIVER_LPC32XX_LPE;RTEMS_BSD_DRIVER_ICSPHY;RTEMS_BSD_DRIVER_LPC32XX_OHCI;SYSINIT_DRIVER_REFERENCE(usbus, ohci);RTEMS_BSD_DRIVER_USB;RTEMS_BSD_DRIVER_USB_MASS;#elif defined(LIBBSP_M68K_GENMCF548X_BSP_H)RTEMS_BSD_DRIVER_FEC;#elif defined(LIBBSP_ARM_XILINX_ZYNQ_BSP_H)#include <bsp/irq.h>RTEMS_BSD_DRIVER_XILINX_ZYNQ_SLCR;RTEMS_BSD_DRIVER_XILINX_ZYNQ_CGEM0(ZYNQ_IRQ_ETHERNET_0);RTEMS_BSD_DRIVER_E1000PHY;#elif defined(LIBBSP_ARM_ATSAM_BSP_H)RTEMS_BSD_DRIVER_USB;RTEMS_BSD_DRIVER_USB_MASS;#elif defined(LIBBSP_ARM_ALTERA_CYCLONE_V_BSP_H)#include <bsp/socal/hps.h>#include <bsp/irq.h>RTEMS_BSD_DRIVER_DWC0((unsigned long) ALT_EMAC1_ADDR,      ALT_INT_INTERRUPT_EMAC1_IRQ);RTEMS_BSD_DRIVER_MIPHY;RTEMS_BSD_DRIVER_DWCOTG0((unsigned long) ALT_USB1_ADDR, ALT_INT_INTERRUPT_USB1_IRQ);RTEMS_BSD_DRIVER_DWC_MMC;RTEMS_BSD_DRIVER_MMC;RTEMS_BSD_DRIVER_USB;RTEMS_BSD_DRIVER_USB_MASS;#elif defined(LIBBSP_ARM_LPC24XX_BSP_H)RTEMS_BSD_DEFINE_NEXUS_DEVICE(ohci, 0, 0, NULL);SYSINIT_DRIVER_REFERENCE(usbus, ohci);RTEMS_BSD_DRIVER_USB;RTEMS_BSD_DRIVER_USB_MASS;#elif defined(LIBBSP_I386_PC386_BSP_H)RTEMS_BSD_DRIVER_PC_LEGACY;RTEMS_BSD_DRIVER_PCI_LEM;RTEMS_BSD_DRIVER_PCI_IGB;RTEMS_BSD_DRIVER_PCI_EM;RTEMS_BSD_DRIVER_PCI_RE;RTEMS_BSD_DRIVER_REPHY;#elif defined(LIBBSP_POWERPC_QORIQ_BSP_H)#if !QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT)#include <bsp/irq.h>RTEMS_BSD_DEFINE_NEXUS_DEVICE(ofwbus, 0, 0, NULL);SYSINIT_DRIVER_REFERENCE(simplebus, ofwbus);SYSINIT_DRIVER_REFERENCE(tsec, simplebus);SYSINIT_DRIVER_REFERENCE(ukphy, miibus);#endif /* !QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT) */#endif#endif


可以看出里面并没有包含对BBB的支持,因此需要添加以下字段:

#elif defined(LIBBSP_ARM_BEAGLE_BSP_H)

然后就是添加总线支持,FreeBSD的设备树是root_bus是总线,然后nexus挂载在root_bus,然后ofwbus挂载在nexus上,接着simplebus挂在ofwbus上。然后其他的uhub或者其他设备挂载在simplebus上。


因此需要添加如下代码:


RTEMS_BSD_DEFINE_NEXUS_DEVICE(ofwbus, 0, 0, NULL);SYSINIT_DRIVER_REFERENCE(simplebus, ofwbus);SYSINIT_DRIVER_REFERENCE(ti_scm, simplebus);SYSINIT_DRIVER_REFERENCE(am335x_prcm, simplebus);SYSINIT_DRIVER_REFERENCE(usbss, simplebus);SYSINIT_DRIVER_REFERENCE(musbotg, usbss);

第一行表示将ofwbus挂载在nexus上,后面几行则是其他挂载关系。这样就能在bsp层实现FDT support。


除此之外,查看opt_platform.h文件,可以看出,如果需要使能FDT,还应该定义宏BSP_FDT_IS_SUPPORTED。

因此我们需要在rtems 源码的bsp.h中添加:

#define BSP_FDT_IS_SUPPORTED


以上就是RTEMS-libbsd添加FDT支持的方法。


原创粉丝点击