板级支持包(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-raspberrypi
和meta-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
支持多台机器,则可以存在多个机器配置文件。
这些文件定义了要使用的内核包、要包含在不同类型镜像中的硬件驱动程序、需要的任何特殊软件组件、任何引导加载程序信息,以及任何特殊的镜像格式要求。
例如,BeagleBone
和BeagleBone 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_PROVIDER
和PREFERRED_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
中创建内核配方。