博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RTEMS-libbsd实现FDT support for BBB
阅读量:6293 次
发布时间:2019-06-22

本文共 4268 字,大约阅读时间需要 14 分钟。

上篇博文描述了如何在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 *  
* * Copyright (c) 2016 Chris Johns
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
#include
#include
#if defined(LIBBSP_ARM_REALVIEW_PBX_A9_BSP_H)#include
RTEMS_BSD_DRIVER_SMC0(0x4e000000, RVPBXA9_IRQ_ETHERNET);#elif defined(LIBBSP_ARM_LPC32XX_BSP_H)#include
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
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
#include
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
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支持的方法。

转载于:https://www.cnblogs.com/sichenzhao/p/9320263.html

你可能感兴趣的文章
php--------获取当前时间、时间戳
查看>>
Spring MVC中文文档翻译发布
查看>>
docker centos环境部署tomcat
查看>>
JavaScript 基础(九): 条件 语句
查看>>
Linux系统固定IP配置
查看>>
配置Quartz
查看>>
Linux 线程实现机制分析
查看>>
继承自ActionBarActivity的activity的activity theme问题
查看>>
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>