source oe-init-build-env
create: bitbake-layers create-layer meta-<layer_name>
add: bitbake-layers add-layer ../meta-<layer_name>
show: bitbake-layers show-layers
It is possible to customize existing meta layers by creating an own meta layer with bitbake append files. In this description the meta layer meta-altera for Intel FPGA devices is used as reference.
For more informations about the operating system used and the sources and versions of yocto project or meta-altera layer, see Yocto KICKstart#Used source files.
Before starting to create a custom meta layer, navigate to the yocto poky directory and initialize the environment with the following commands:
cd <path_to_yocto>/poky source oe-init-build-env cd ..
Since the created meta-custom layer should depend on meta-altera, these sources files must be downloaded and added to the yocto project.
Navigate to yocto poky directory and download meta-altera layer:
cd <path_to_yocto>/poky git clone -b dunfell https://github.com/kraj/meta-altera.git
Add meta-altera to yocto project with:
bitbake-layers add-layer ./meta-altera
In this example, the created layer is named meta-custom.
Create own layer "meta-<custom_name>" with:
bitbake-layers create-layer ./meta-custom
The created layer contains a sample recipes folder, that can be removed:
rm -rf ./meta-custom/recipes-example
Make meta-custom dependent on meta-altera:
sed -i '/LAYERDEPENDS_meta-custom/s/core/meta-altera/g' meta-custom/conf/layer.conf
Add the meta-custom layer to the yocto project with:
bitbake-layers add-layer ./meta-custom
First the variable "MACHINE" must be redefined in the local.conf file. Several machines are defined in the meta-altera layer (see meta-altera/conf/machine for more information). In this example, the machine 'cyclone5' is used.
Remove the default value and add 'cyclone5':
sed -i '/^MACHINE/s/MACHINE/#MACHINE/g' conf/local.conf echo -e '\nMACHINE = "cyclone5"' >> conf/local.conf
For the linux kernel in the meta-altera layer it's required to define a the preferred provider and version in local.conf (see meta-altera/recipes-kernel/linux for other linux kernel versions):
echo -e '\nPREFERRED_PROVIDER_virtual/kernel = "linux-altera-lts"' >> conf/local.conf echo -e 'PREFERRED_VERSION_linux-altera-lts = "5.4%"' >> conf/local.conf
Set the preferred u-boot version for meta-altera in local.conf (see meta-altera/recipes-bsp/u-boot for other u-boot versions):
echo -e '\nPREFERRED_VERSION_u-boot-socfpga = "v2021.04%"' >> conf/local.conf
###with devtool
Set up the build environment to modify the source for an existing recipe:
devtool modify linux-altera-lts -O -s
Launch menuconfig, make changes to configuration and exit and save your config:
devtool menuconfig linux-altera-lts
devtool update-recipe linux-altera-lts -a ${PWD}/../meta-custom -O
create .bbappend file → file name must be the same as original .bb recipe file but with with .bbappend ending
gedit /meta-custom/recipes-kernel/linux/linux-altera-lts_5.4.bbappend
add following content to this file:
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += "file://fragment.cfg "
###with devtool
für meta-altera müssen folgende variablen in build/conf/local.conf eingefügt werden (wird nur für die konfiguration via menuconfig gebraucht, muss danach entfernt werden):
UBOOT_MACHINE=" socfpga_cyclone5_defconfig" → welche für die ausgewählte MACHINE benutzt wird steht in meta-altera/recipes-bsp/u-boot/u-boot-socfpga.inc
UBOOT_CONFIG = ""
Set up the build environment to modify the source for an existing recipe:
devtool modify u-boot-socfpga -O -s
Launch menuconfig, make changes to configuration and exit and save your config:
devtool menuconfig u-boot-socfpga
devtool update-recipe u-boot-socfpga -a ${PWD}/../meta-custom -O
folgende variablen können wieder entfernt werden, nachdem beenden der konfigration von u-boot:
UBOOT_MACHINE=" socfpga_cyclone5_defconfig" → welche für die ausgewählte MACHINE benutzt wird steht in meta-altera/recipes-bsp/u-boot/u-boot-socfpga.inc unter UBOOT_CONFIG[...]=...
UBOOT_CONFIG = ""
checkout other branch
git checkout mybranch
git reset --hard origin/mybranch