Yocto Project开发(七):板级支持包(BSP)

板级支持包(BSP)是一组信息,用于定义如何支持特定硬件设备,设备集或硬件平台。BSP包括有关设备上存在的硬件功能和内核配置信息以及所需的任何其他硬件驱动程序的信息。除了通用Linux软件堆栈之外,BSP还列出了基本和可选平台功能所需的任何其他软件组件。

BSP

BSP由基本目录中的文件结构组成。总的来说,你可以将基本目录、文件结构和内容看作一个BSP层。虽然不是严格的要求,但Yocto项目中的BSP层使用以下公认的命名约定:

     meta-bsp_root_name

字符串“meta-”前缀到机器或平台名称,即上面中的bsp_root_name
为了帮助理解BSP层的概念,请参考Yocto项目支持并提供的每个版本的BSP。你可以通过http://git.yocproject.org在Yocto项目源存储库中看到这些层。
每个存储库都是Yocto项目支持的BSP层(例如meta-raspberrypimeta-intel)。每个层本身都是一个存储库,单击一个层可以显示包含两个链接的信息,你可以从中选择在本地主机系统上设置该层存储库的克隆。下面是一个克隆树莓派BSP层的例子:

     $ git clone git://git.yoctoproject.org/meta-raspberrypi

除了BSP层之外,meta-yocto-bsp层也是附带的poky存储库的一部分。meta-yocto-bsp层维护几个BSP,比如Beaglebone、EdgeRouter以及32位和64位IA机器的通用版本。
层的基本目录(meta-bsp_root_name)是BSP层的根目录。这个目录是你添加到构建目录中的conf/BBLAYERS.conf文件中的BBLAYERS变量的目录,该文件是在运行OpenEmbedded构建环境设置脚本(即oe-init-build-env)之后建立的。举个例子:

     BBLAYERS ?= " \
       /usr/local/src/yocto/meta \
       /usr/local/src/yocto/meta-poky \
       /usr/local/src/yocto/meta-yocto-bsp \
       /usr/local/src/yocto/meta-mylayer \
       "

准备构建主机以使用BSP

下面的步骤使构建主机准备好使用BSP层。

  • 设置构建环境:确保设置为在shell中使用BitBake
  • 克隆poky存储库:你需要Yocto项目源目录的本地副本(即本地poky存储库)。
  • 确定你想要的BSP层:Yocto项目支持许多BSP,这些BSP在它们自己的层中维护,或者在设计为包含几个BSP的层中维护。
  • 可选地克隆meta-intel BSP层:如果你的硬件基于当前Intel cpu和设备,那么你可以利用这个BSP层。有关meta-intel BSP层的详细信息,请参阅该层的Readme文件。
     $ cd /home/you/poky
     $ git clone git://git.yoctoproject.org/meta-intel.git
     $ cd meta-intel
     $ git checkout -b warrior remotes/origin/warrior
  • 初始化构建环境:
     $ source oe-init-build-env

示例文件系统布局

下面是BSP层中文件结构的常见形式。虽然这个基本形式代表了标准,但是要认识到特定BSP的实际文件结构可能有所不同。

     meta-bsp_root_name/
     meta-bsp_root_name/bsp_license_file
     meta-bsp_root_name/README
     meta-bsp_root_name/README.sources
     meta-bsp_root_name/binary/bootable_images
     meta-bsp_root_name/conf/layer.conf
     meta-bsp_root_name/conf/machine/*.conf
     meta-bsp_root_name/recipes-bsp/*
     meta-bsp_root_name/recipes-core/*
     meta-bsp_root_name/recipes-graphics/*
     meta-bsp_root_name/recipes-kernel/linux/linux-yocto_kernel_rev.bbappend

下面描述了的BSP格式的重点部分。

  • 层配置文件:
     meta-bsp_root_name/conf/layer.conf

conf/layer.conf文件将文件结构标识为一个层,标识该层的内容,并包含有关构建系统应该如何使用它的信息。一般情况下,标准示例文件是这样的。

     # We have a conf and classes directory, add to BBPATH
     BBPATH .= ":${LAYERDIR}"

     # We have a recipes directory, add to BBFILES
     BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
                 ${LAYERDIR}/recipes-*/*/*.bbappend"

     BBFILE_COLLECTIONS += "bsp"
     BBFILE_PATTERN_bsp = "^${LAYERDIR}/"
     BBFILE_PRIORITY_bsp = "6"

     LAYERDEPENDS_bsp = "intel"
  • 硬件配置选项:
     meta-bsp_root_name/conf/machine/*.conf

机器文件将BSP中包含的所有信息绑定到构建系统可以理解的格式中。每个BSP层至少需要一个机器文件。如果BSP支持多台机器,则可以存在多个机器配置文件。
这些文件定义了要使用的内核包、要包含在不同类型镜像中的硬件驱动程序、需要的任何特殊软件组件、任何引导加载程序信息,以及任何特殊的镜像格式要求。
例如,BeagleBoneBeagleBone Black开发板的机器配置文件位于poky/meta-yocto-bsp/conf/machine层,名为BeagleBone-yocto.conf:

     #@TYPE: Machine
     #@NAME: Beaglebone-yocto machine
     #@DESCRIPTION: Reference machine configuration for http://beagleboard.org/bone and http://beagleboard.org/black boards

     PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
     XSERVER ?= "xserver-xorg \
                xf86-video-modesetting \
                "

     MACHINE_EXTRA_RRECOMMENDS = "kernel-modules kernel-devicetree"

     EXTRA_IMAGEDEPENDS += "u-boot"

     DEFAULTTUNE ?= "cortexa8hf-neon"
     include conf/machine/include/tune-cortexa8.inc

     IMAGE_FSTYPES += "tar.bz2 jffs2 wic wic.bmap"
     EXTRA_IMAGECMD_jffs2 = "-lnp "
     WKS_FILE ?= "beaglebone-yocto.wks"
     IMAGE_INSTALL_append = " kernel-devicetree kernel-image-zimage"
     do_image_wic[depends] += "mtools-native:do_populate_sysroot dosfstools-native:do_populate_sysroot"

     SERIAL_CONSOLES = "115200;ttyO0"

     PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
     PREFERRED_VERSION_linux-yocto ?= "4.12%"

     KERNEL_IMAGETYPE = "zImage"
     KERNEL_DEVICETREE = "am335x-bone.dtb am335x-boneblack.dtb am335x-bonegreen.dtb"
     KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"

     SPL_BINARY = "MLO"
     UBOOT_SUFFIX = "img"
     UBOOT_MACHINE = "am335x_boneblack_config"
     UBOOT_ENTRYPOINT = "0x80008000"
     UBOOT_LOADADDRESS = "0x80008000"

     MACHINE_FEATURES = "usbgadget usbhost vfat alsa"

     IMAGE_BOOT_FILES ?= "u-boot.${UBOOT_SUFFIX} MLO"
  • Linux内核配置
     meta-bsp_root_name/recipes-kernel/linux/linux*.bbappend
     meta-bsp_root_name/recipes-kernel/linux/*.bb

Append文件(*.bbappend)修改用于构建镜像的主内核配方。*.bb文件将是开发人员提供的内核配方。BSP层次结构的这个区域可以包含这两种类型的文件,尽管在实践中,你很可能拥有其中一种。
假设你正在使用 linux-yocto_4.4.bb配方来构建内核。换句话说,通过添加PREFERRED_PROVIDERPREFERRED_VERSION语句,你已经在bsp_root_name.conf文件中选择了内核,如下所示:

     PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
     PREFERRED_VERSION_linux-yocto ?= "4.4%

使用bitbake-layers脚本创建新的BSP

使用以下步骤创建BSP层:

  • 创建常规图层: 将bitbake-layers脚本与 create-layer子命令一起使用以创建新的常规图层。
  • 创建一个层配置文件:每个层都需要一个层配置文件。这个配置文件为该层的配方和优先级建立位置等等。你可以在Yocto项目源存储库中找到layer.conf文件的示例。
  • 创建一个机器配置文件:创建一个conf/ Machine /bsp_root_name.conf文件。有关示例bsp_root_name.conf文件,请参考meta-yocto-bsp/conf/machine
  • 创建内核配方:通过使用内核附加文件或新的自定义内核配方文件(例如yocto-linux_4.12.bb)在recipes-kernel/linux中创建内核配方。

你可能感兴趣的:(Yocto)