Yocto Customizing the Linux kernel
Configuring the kernel
The default kernel configuration file used by Yocto is part of the kernel source tree and is located at:
arch/arm/configs/imx_v7_var_defconfig
To configure the kernel using Yocto:
- Follow steps 1-3 of the Yocto Build Release page.
- Follow the first part of step 4 of the same page, to source the setup-environment script (stop after that - don't build any image). E.g.:
$ cd ~/var-fslc-yocto $ MACHINE=var-som-mx6 DISTRO=fslc-x11 . setup-environment build_x11
- Run menuconfig and configure the kernel:
$ bitbake -c menuconfig virtual/kernel
When finished, save and exit.
The .config file is saved to ~/var-fslc-yocto/build_x11/tmp/work/var_som_mx6-fslc-linux-gnueabi/linux-variscite/4.1.15-r0/build/.config
- At this point, you can continue following the rest of step 4 of the Yocto Build Release page to build your image with the newly configured kernel, or just build the kernel by running "bitbake virtual/kernel", or, you can follow the next steps to use this configuration permanently.
To save the configuration in a defconfig format:
$ bitbake -c savedefconfig virtual/kernel
The defconfig file is saved to ~/var-fslc-yocto/build_x11/tmp/work/var_som_mx6-fslc-linux-gnueabi/linux-variscite/4.1.15-r0/build/defconfig
To make the kernel recipe use this configuration permanently, you can do either of the following:
- Use any of the three methods described in the Making changes in the source code section below to overwrite the default configuration file in the source tree, arch/arm/configs/imx_v7_var_defconfig, and replace it with the above defconfig.
- Make the kernel recipe use the defconfig from outside of the source tree:
Copy your defconfig:
$ cd ~/var-fslc-yocto/sources/meta-variscite-fslc/recipes-kernel/linux/ $ mkdir -p files $ cp ~/var-fslc-yocto/build_x11/tmp/work/var_som_mx6-fslc-linux-gnueabi/linux-variscite/4.1.15-r0/build/defconfig files/my_defconfig
Create a linux-variscite_4.1.15.bbappend file:
$ gedit linux-variscite_4.1.15.bbappend
and append the following to it:
SRC_URI += "file://my_defconfig" KERNEL_DEFCONFIG_var-som-mx6 = "${WORKDIR}/my_defconfig"
Making changes in the source code
Choose one of the following three methods to customize the Linux kernel and build it using Yocto:
Add your own patches on top of our source code
Using this method Yocto will take the source code from our default remote repository, and apply your patches to it before building it:
Get the source code by cloning our repository:
$ cd ~/var-fslc-yocto $ mkdir -p local_repos $ cd local_repos $ git clone https://github.com/varigit/linux-2.6-imx.git $ cd linux-2.6-imx $ git checkout imx-rel_imx_4.1.15_2.0.0_ga-var02
Make your changes in the source code and create a patch:
You can use either diff or patch file types.
For example:
$ cd ~/var-fslc-yocto/local_repos/linux-2.6-imx $ gedit arch/arm/boot/dts/imx6qdl-var-som.dtsi edit and save $ git diff > my_device_tree_changes.diff
Update the recipes to use your patch:
Copy your patch:
$ cd ~/var-fslc-yocto/sources/meta-variscite-fslc/recipes-kernel/linux/ $ mkdir -p files $ cp ~/var-fslc-yocto/local_repos/linux-2.6-imx/my_device_tree_changes.diff files/
Create a linux-variscite_4.1.15.bbappend file:
$ gedit linux-variscite_4.1.15.bbappend
and append the following line to it:
SRC_URI += "file://my_device_tree_changes.diff"
Use a local repository
Using this method Yocto will take the kernel source from a local repository instead of our remote ones on github:
Get the source code by cloning our repository:
$ cd ~/var-fslc-yocto $ mkdir -p local_repos $ cd local_repos $ git clone https://github.com/varigit/linux-2.6-imx.git $ cd linux-2.6-imx $ git checkout imx-rel_imx_4.1.15_2.0.0_ga-var02
Make your changes in the source code and commit them:
After making changes in the source code you need to commit them.
For example:
$ cd ~/var-fslc-yocto/local_repos/linux-2.6-imx $ gedit arch/arm/boot/dts/imx6qdl-var-som.dtsi edit and save $ git commit -a -m "my device tree changes"
To list all of the commits: $ git log
Get the latest commit id: $ git rev-parse HEAD
Update the recipes to use the local repository instead of the default one:
$ cd ~/var-fslc-yocto/sources/meta-variscite-fslc/recipes-kernel/linux/
Create a linux-variscite_4.1.15.bbappend file:
$ gedit linux-variscite_4.1.15.bbappend
and append the following lines to it (see the previous section for listing the commits or getting the latest commit id):
KERNEL_SRC = "git://${BSPDIR}/local_repos/linux-2.6-imx;protocol=file" SRCBRANCH = "imx-rel_imx_4.1.15_2.0.0_ga-var02" (or your own created branch) SRCREV = "The commit id you'd like to use"
(If you do so, make sure to run "bitbake -c cleansstate virtual/kernel" before rebuilding the kernel)
Use your own remote repository on github
Using this method Yocto will take the source code from your own remote repository on github:
Create your own github account and upload your proprietary kernel to a new repository:
For example, you can fork our repository to your own account by visiting the following link and clicking on "Fork" at the top right of the screen.
Alternatively, you can clone our repository to your local machine, and push it later to your own account.
https://github.com/varigit/linux-2.6-imxx/tree/imx-rel_imx_4.1.15_2.0.0_ga-var02
Update the recipes to use your remote repository instead of the default one:
$ cd ~/var-fslc-yocto/sources/meta-variscite-fslc/recipes-kernel/linux/
Create a linux-variscite_4.1.15.bbappend file:
$ gedit linux-variscite_4.1.15.bbappend
and append the following lines to it (see the previous section for listing the commits or getting the latest commit id):
KERNEL_SRC = "git://github.com/your_account/linux-2.6-imx.git;protocol=git" SRCBRANCH = "imx-rel_imx_4.1.15_2.0.0_ga-var02" (or your own created branch) SRCREV = "The commit id you'd like to use"
(If you do so, make sure to run "bitbake -c cleansstate virtual/kernel" before rebuilding the kernel)