Registered User |
Registered User mNo edit summary |
||
Line 1: | Line 1: | ||
<noinclude>{{ApplicableFor | |||
|MPUs list=STM32MP13x, STM32MP15x | |||
|MPUs checklist=STM32MP13x,STM32MP15x | |||
}}</noinclude> | |||
==Purpose of article== | ==Purpose of article== | ||
This article gives the main steps needed to add kernel customization within the Yocto build process (with a Distribution Package). | This article gives the main steps needed to add kernel customization within the Yocto build process (with a Distribution Package). |
Revision as of 09:24, 4 April 2022
1. Purpose of article[edit | edit source]
This article gives the main steps needed to add kernel customization within the Yocto build process (with a Distribution Package).
2. Pre-requesites[edit | edit source]
You are already familiar with the Yocto build process and OpenSTLinux distribution.
You have already created a customer layer (How to create a new open embedded layer) to update, for your own needs, the OpenSTLinux distribution.
We describe here what you must do once you have:
- modified the kernel configuration
- modified the Linux kernel device tree
- modified a built-in device driver
so that these modifications are taken into account in your build process.
3. Adding kernel customization (including Linux kernel device tree, configuration, driver modification)[edit | edit source]
- First, create (in your custom layer) a <name of kernel recipe>.bbappend file
touch ../meta-my-custo-layer/recipes-kernel/linux/<name of kernel recipe>.bbappend
3.1. Adding kernel configuration modifications[edit | edit source]
- Identify all new configs you set or unset with: bitbake <name of kernel recipe> -c menuconfig
- Put them inside a new fragment file and copy the fragment here:
cp <custom-fragment>.config ../meta-my-custo-layer/recipes-kernel/linux/<name of kernel recipe>/<kernel version>/
- Update accordingly <name of kernel recipe>.bbappend:
KERNEL_CONFIG_FRAGMENTS_append += "${WORKDIR}/fragments/<kernel version>/<custom-fragment>.config"
SRC_URI_append = " file://<kernel version>/<custom-fragment>.config;subdir=fragments "
For the use case described in the How to cross-compile with the Distribution Package#modifying_kernel_configuration example, you should:
- Create fragment-cma-size.config with the following line:
CONFIG_CMA_SIZE_MBYTES=256
- Copy fragment-cma-size.config to ../meta-my-custo-layer/recipes-kernel/linux/linux-stm32mp/<kernel version>
- Update ../meta-my-custo-layer/recipes-kernel/linux/linux-stm32mp.bbappend accordingly by adding these lines:
file://${LINUX_VERSION}/fragment-cma-size.config;subdir=fragments "KERNEL_CONFIG_FRAGMENTS_append += "${WORKDIR}/fragments/${LINUX_VERSION}/fragment-cma-size.config" SRC_URI_append = "
3.2. Adding kernel driver or device tree modifications[edit | edit source]
The example given below is associated with the STM32MP15 Evaluation board, but the method is independent of the board.
Once you have made the changes for the device tree in <build dir>/workspace/sources/<name of kernel recipe>/arch/arm/boot/dts/stm32mp157c-ed1.dts AND, for built-in device driver in <build dir>/workspace/sources/<name of kernel recipe>/drivers/gpu/drm/stm/drv.c, you must:
- Create the corresponding patch files:
cd <build dir>/workspace/sources/<name of kernel recipe>/
git format-patch -2
- Copy these patch files into the custom layer
cp *.patch ../meta-my-custo-layer/recipes-kernel/linux/<name of kernel recipe>/<kernel version>/<kernel version>.<revision>/
- Update <name of kernel recipe>.bbappend accordingly:
file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0001-DT-leds-change.patch \ file://${LINUX_VERSION}/${LINUX_VERSION}.${LINUX_SUBVERSION}/0002-Driver-change.patch \ "SRC_URI_append = " \