1. Overview
This stage explains how modify, rebuild and reload the Linux® kernel.
You will first be guided to install the Linux® kernel source code in the Developer Package directory. Then step by step you will execute procedures to modify, rebuild and reload the Linux® kernel.
2. Download the the Linux® kernel source code
The software package is provided AS IS, and by downloading it, you agree to be bound to the terms of the software license agreement (SLA). The detailed content licenses can be found here.
2.1. For ecosystem release v1.2.0 
- Download the STM32MP15-Ecosystem-v1.2.0 Developer Package Sources to the following directory:
$HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.2.0/Developer-Package - Uncompress the tarball file to get the Linux® kernel tarball, the ST patches and the ST configuration fragments
cd $HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.2.0/Developer-Package
tar xvf en.SOURCES-kernel-stm32mp1-openstlinux-20-02-19.tar.xz
2.2. For ecosystem release v1.1.0 
2.3. For ecosystem release v1.0.0 
3. Prepare the Linux® kernel source code
- Extract the Linux® kernel source
v1.2.0For ecosystem releasecd stm32mp1-openstlinux-20-02-19/sources/arm-ostl-linux-gnueabi/linux-stm32mp-4.19-r0 tar xvf linux-4.19.94.tar.xz For ecosystem release v1.1.0
Expand For ecosystem release v1.0.0
Expand
- Apply the ST patches
cd linux-4.19.94/ /* For ecosystem release v1.2.0*/ExpandExpand for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
- Apply fragments
make ARCH=arm multi_v7_defconfig "fragment*.config"
for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r .config $f; done
yes '' | make ARCH=arm oldconfig
4. Build the Linux® kernel source code for the first time
- Build kernel images (uImage and vmlinux) and device tree (dtbs)
make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040
- Build kernel module
make ARCH=arm modules
- Generate output build artifacts
mkdir -p $PWD/install_artifact/
make ARCH=arm INSTALL_MOD_PATH="$PWD/install_artifact" modules_install
5. Deploy the Linux® kernel on the board
5.1. Push the Linux® kernel into the board
scp arch/arm/boot/uImage root@<board ip address>:/boot
5.2. Push the devicetree into the board
scp arch/arm/boot/dts/stm32mp157*.dtb root@<board ip address>:/boot
5.3. Push the kernel modules into the board
For ecosystem release v1.2.0 :
- Remove the link created inside the install_artifact/lib/modules/4.19.94 directory
rm install_artifact/lib/modules/4.19.94/build install_artifact/lib/modules/4.19.94/source
For ecosystem release v1.1.0 :
For ecosystem release v1.0.0 :
- Optionally, strip kernel modules (to reduce the size of each kernel modules)
find install_artifact/ -name "*.ko" | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates
- Copy Kernel modules
scp -r install_artifact/lib/modules/* root@<ip of board>:/lib/modules
- Using the Linux console, re-generate the list of module dependencies (modules.dep) and the list of symbols provided by modules (modules.symbols)
/sbin/depmod -a
- Synchronize data on disk with memory
sync
5.4. Reboot the board
reboot
6. Modifying a built-in Linux kernel device driver
This simple example adds unconditional log information when the display driver is probed.
- Using the Linux console, check that there is no log information when the display driver is probed
dmesg | grep -i stm_drm_platform_probe
- Go to the Linux® kernel source directory
v1.2.0For ecosystem release: cd $HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.2.0/Developer-Package/stm32mp1-openstlinux-20-02-19/sources/arm-ostl-linux-gnueabi/linux-stm32mp-4.19-r0/linux-4.19.94 For ecosystem release v1.1.0
:Expand For ecosystem release v1.0.0
:Expand
- Edit the ./drivers/gpu/drm/stm/drv.c source file
- Add a log information in the stm_drm_platform_probe function as follow
DRM_INFO("Simple example - %s\n", __func__); return 0; [...] }static int stm_drm_platform_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; struct drm_device *ddev; int ret; [...]
- Save the file
- Rebuitd the Linux® kernel
make uImage LOADADDR=0xC2000040
- Update the Linux kernel image into board
scp arch/arm/boot/uImage root@<board ip address>:/boot
- Reboot the board
reboot
- Check that there is now log information when the display driver is probed
dmesg | grep -i stm_drm_platform_probe
[ 2.764080] [drm] Simple example - stm_drm_platform_probe