This message will disappear after all relevant tasks have been resolved.
Semantic MediaWiki
There are 1 incomplete or pending task to finish installation of Semantic MediaWiki. An administrator or user with sufficient rights can complete it. This should be done before adding new data to avoid inconsistencies.Template:ArticleMainWriter Template:ArticleProposedVersion
1. Overview[edit source]
This stage will explain you how modify, rebuild and reload the Linux® kernel.
You will first be guide 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[edit source]
- Download the STM32MP15-Ecosystem-v1.0.0 Developer Package Sources in your $HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.0.0/Developer-Package directory
- 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.0.0/Developer-Package tar xvf SOURCES-stm32mp1-openstlinux-4.19-thud-mp1-19-02-20.tar.xz
3. Prepare the Linux® kernel source code[edit source]
- Extract the Linux® kernel source
cd stm32mp1-openstlinux-4.19-thud-mp1-19-02-20/sources/arm-openstlinux_weston-linux-gnueabi/linux-stm32mp-4.19-r0 tar xvf linux-4.19.9.tar.xz
- Apply the ST patches
cd linux-4.19.9/ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
- Apply fragments
make 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 oldconfig
4. Build the Linux® kernel source code for the first time[edit source]
- Build kernel images (uImage and vmlinux) and device tree (dtbs)
make uImage vmlinux dtbs LOADADDR=0xC2000040
- Build kernel module
make modules
- Generate output build artifacts
mkdir -p $PWD/install_artifact/ make INSTALL_MOD_PATH="$PWD/install_artifact" modules_install
5. Deploy the Linux® kernel on the board[edit source]
5.1. Push the Linux® kernel into the board[edit source]
scp arch/arm/boot/uImage root@<board ip address>:/boot
5.2. Push the devicetree into the board[edit source]
scp arch/arm/boot/dts/stm32mp157*.dtb root@<board ip address>:/boot
5.3. Push the kernel modules into the board[edit source]
- Remove the link created inside the install_artifact/lib/modules/4.19.9
rm install_artifact/lib/modules/4.19.9/build install_artifact/lib/modules/4.19.9/source
- 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[edit source]
reboot
6. Modifying a built-in Linux kernel device driver[edit source]
This simple example adds unconditional log information when the display driver is probed.
- Check that there's no log information when the display driver is probed
dmesg | grep -i stm_drm_platform_probe
- Go to the <Linux kernel source directory>
cd $HOME/STM32MPU_workspace/STM32MP15-Ecosystem-v1.0.0/Developer-Package/stm32mp1-openstlinux-4.19-thud-mp1-19-02-20/sources/arm-openstlinux_weston-linux-gnueabi/linux-stm32mp-4.19-r0/linux-4.19.9
- Edit the ./drivers/gpu/drm/stm/drv.c source file
- Add a log information in the stm_drm_platform_probe function as follow
static int stm_drm_platform_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct drm_device *ddev;
int ret;
[...]
DRM_INFO("Simple example - %s\n", __func__);
return 0;
[...]
}
- Cross-compile the Linux kernel (please check the load address in the README.HOW_TO.txt helper file)
make uImage LOADADDR=0xC2000040 cp arch/arm/boot/uImage install_artifact/boot/
- Update the Linux kernel image on board
scp install_artifact/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
[ 5.005833] [drm] Simple example - stm_drm_platform_probe