Kernel Development Test Cases: Difference between revisions

From Yocto Project
Jump to navigationJump to search
No edit summary
No edit summary
Line 11: Line 11:
:: <pre>$ vi build/local.conf</pre>
:: <pre>$ vi build/local.conf</pre>
:: Set the machine to qemux86-64 by setting the line:
:: Set the machine to qemux86-64 by setting the line:
:: <pre>MACHINE = “qemux86-64”</pre>
:: <pre>MACHINE = "qemux86-64"</pre>
: 5. Compile a minimal image:
: 5. Compile a minimal image:
:: <pre>$ bitbake core-image-minimal</pre>
:: <pre>$ bitbake core-image-minimal</pre>
: 6. Get and take note of the linux-yocto kernel version (only the first two numbers, for example: 4.10):
: 6. Get and take note of the linux-yocto kernel version (only the first two numbers, for example: 4.10):
:: <pre>$ bitbake virtual/kernel -e | grep LINUX_VERSION</pre>
:: <pre>$ bitbake virtual/kernel -e | grep LINUX_VERSION</pre>
: 7. Create a layer to store kernel test metadata:
: 7. Create a layer to store kernel test metadata. For this task, you could use the yocto-layer script and its default recipe values:
:: <pre>$ cd [POKY_PATH]</pre>
:: <pre>$ cd [POKY_PATH]</pre>
:: <pre>$ yocto-layer create [LAYER-NAME]</pre>
:: <pre>$ yocto-layer create [LAYER-NAME]</pre>
:: Note: In the rest of this document "meta-kerneltest" is used as the [LAYER-NAME]
:: Note: In the rest of this document "meta-kerneltest" is used as the [LAYER-NAME].
: 8. Create the recipe directory structure inside the created layer:
: 8. Create the recipe directory structure inside the created layer:
:: <pre>$ mkdir -p meta-kerneltest/recipes-kernel/linux/</pre>
:: <pre>$ mkdir -p meta-kerneltest/recipes-kernel/linux/</pre>
Line 26: Line 26:
: 10. Copy the recipe file corresponding to the linux-yocto version inside the directory:
: 10. Copy the recipe file corresponding to the linux-yocto version inside the directory:
:: <pre>$ cp meta/recipes-kernel/linux/linux-yocto_[VERSION].bb meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb</pre>
:: <pre>$ cp meta/recipes-kernel/linux/linux-yocto_[VERSION].bb meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb</pre>
: 11. Edit the linux-yocto-custo recipe:
: 11. Edit the linux-yocto-custom recipe:
:: <pre>$  vi meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb</pre>
:: <pre>$  vi meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb</pre>
:: Set the PV variable with the LINUX_VERSION variable value:
:: Set the PV variable with the LINUX_VERSION variable value:
:: <pre>PV = "${LINUX_VERSION}"</pre>
:: <pre>PV = "${LINUX_VERSION}"</pre>
: 12. Create directory “linux-yocto”:
: 12. Create directory "linux-yocto":
:: <pre>$ mkdir meta-kerneltest/recipes-kernel/linux/linux-yocto/</pre>
:: <pre>$ mkdir meta-kerneltest/recipes-kernel/linux/linux-yocto/</pre>
: 13. Create directory “linux-yocto-custom”:
: 13. Create directory "linux-yocto-custom":
:: <pre>$ mkdir meta-kerneltest/recipes-kernel/linux/linux-yocto-custom/</pre>
:: <pre>$ mkdir meta-kerneltest/recipes-kernel/linux/linux-yocto-custom/</pre>
: 14. Add the created layer to bblayers.conf. For this task, you could use the bitbake-layers script and its default recipe values:
: 14. Add the created layer to bblayers.conf. For this task, you could use the bitbake-layers script from inside the build directory:
:: <pre>$ cd build</pre>
:: <pre>$ cd build</pre>
:: <pre>$ bitbake-layers add-layer ../meta-kerneltest</pre>
:: <pre>$ bitbake-layers add-layer ../meta-kerneltest</pre>
Line 45: Line 45:
: 5. Be careful with the information added to recipe and recipe append files, using the same values -- including spaces-- to set a recipe variable value.
: 5. Be careful with the information added to recipe and recipe append files, using the same values -- including spaces-- to set a recipe variable value.
:: To ensure all the sources are correctly downloaded and the required taks are executed, ensure no shared states proxies are set on conf/local.conf.
:: To ensure all the sources are correctly downloaded and the required taks are executed, ensure no shared states proxies are set on conf/local.conf.
: 6. Make sure to point to the correct linux-yocto version.


<br />
<br />
Line 51: Line 52:
As a developer, I want to be able to apply a single patch to the Linux kernel source.
As a developer, I want to be able to apply a single patch to the Linux kernel source.
===Prerequisites===
===Prerequisites===
: 1. Generate the patch
: 1. Generate the patch:
:: 1.1. Go to kernel source directory:
:: 1.1. Go to kernel source directory:
::: <pre>$ cd [POKY_PATH]/build/tmp/work-shared/qemux86-64/kernel-source</pre>
::: <pre>$ cd [POKY_PATH]/build/tmp/work-shared/qemux86-64/kernel-source</pre>
Line 73: Line 74:
: 3. Delete the README file:
: 3. Delete the README file:
:: <pre>$ rm build/tmp/work-shared/qemux86-64/kernel-source/README</pre>
:: <pre>$ rm build/tmp/work-shared/qemux86-64/kernel-source/README</pre>
: 4. Bitbake the patch:
: 4. Clean the shared state:
:: <pre>$ cd build</pre>
:: <pre>$ cd build</pre>
:: <pre>$ bitbake virtual/kernel -c cleansstate # Clean the shared state</pre>
:: <pre>$ bitbake virtual/kernel -c cleansstate</pre>
: 5. Build the patch:
:: <pre>$ bitbake virtual/kernel -c patch</pre>
:: <pre>$ bitbake virtual/kernel -c patch</pre>
: 5. Verify the patch is applied properly.
: 6. Verify the patch is applied properly:
:: <pre>$ tail tmp/work-shared/qemux86-64/kernel-source/README</pre>
:: <pre>$ tail tmp/work-shared/qemux86-64/kernel-source/README</pre>
===Expected results===
===Expected results===
Line 94: Line 96:
:: <pre>$ git clone git://git.yoctoproject.org/yocto-kernel-cache</pre>
:: <pre>$ git clone git://git.yoctoproject.org/yocto-kernel-cache</pre>
:: <pre>$ git clone git://git.yoctoproject.org/linux-yocto-[VERSION]</pre>
:: <pre>$ git clone git://git.yoctoproject.org/linux-yocto-[VERSION]</pre>
: 3. Go to the cloned yocto-kernel-cache directory.
: 3. Go to the cloned yocto-kernel-cache directory:
:: <pre>$ cd [KERNEL_REPOS_PATH]/yocto-kernel-cache</pre>
:: <pre>$ cd [KERNEL_REPOS_PATH]/yocto-kernel-cache</pre>
:: Checkout the required yocto-version branch:
:: Checkout the required yocto-version branch:
:: <pre>$ git checkout [yocto-version]  # For example: $ git checkout yocto-4.8</pre>
:: <pre>$ git checkout [yocto-version]  # For example: $ git checkout yocto-4.8</pre>
: 4. Go to the linux-yocto-[VERSION] directory.
: 4. Go to the linux-yocto-[VERSION] directory:
:: <pre>$ cd [KERNEL_REPOS_PATH]/linux-yocto-[VERSION]</pre>
:: <pre>$ cd [KERNEL_REPOS_PATH]/linux-yocto-[VERSION]</pre>
:: Checkout the standard/base branch:
:: Checkout the standard/base branch:
:: <pre>$ git checkout standard/base</pre>
:: <pre>$ git checkout standard/base</pre>
: 5. Edit the conf/local.conf file in the repository where are you working for execution:
: 5. Edit the conf/local.conf file in the repository where you are working for execution:
:: <pre>$ cd [POKY_PATH]</pre>
:: <pre>$ cd [POKY_PATH]</pre>
:: <pre>$ vi build/conf/local.conf</pre>
:: <pre>$ vi build/conf/local.conf</pre>
Line 113: Line 115:
:: <pre>SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \</pre>
:: <pre>SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \</pre>
:: <pre>          git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"</pre>
:: <pre>          git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"</pre>
: 2. Build the changes
: 2. Clean the shared state:
:: <pre>$ cd build</pre>
:: <pre>$ bitbake virtual/kernel -c cleansstate</pre>
: 3. Build the kernel:
:: <pre>$ bitbake virtual/kernel</pre>
:: <pre>$ bitbake virtual/kernel</pre>
: 3. Save the build results in a log
: 4. Verify the changes by executing:
:: <pre>$ cd build</pre>
:: <pre>$ bitbake virtual/kernel -e | grep "name=machine;branch"</pre>
:: <pre>$ bitbake virtual/kernel -e > logkerneltest</pre>
: 4. Verify that the changes are saved properly
===Expected Results===
===Expected Results===
: 1. The changes should be performed successfully.
: 1. The changes should be performed successfully.
: 2. The build should be completed successfully.
: 2. The build should be completed successfully.
: 3. The log should be saved.
: 3. The bitbake variables output should display that the SRC_URI variable is now:
: 4. The changes should display that the SRC_URI variable is now:
:: <pre>SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \</pre>
:: <pre>SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \</pre>
:: <pre>          git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"</pre>
:: <pre>          git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"</pre>
===Remarks===
: 1. You can also verify the changes by doing:
:: <pre>$ bitbake virtual/kernel -e | grep “name=machine;branch”</pre>
: 2. Make sure to point to the correct linux-yocto version.


<br />
<br />
Line 152: Line 150:
: 3. Compile the kernel:
: 3. Compile the kernel:
:: <pre>$ bitbake virtual/kernel</pre>
:: <pre>$ bitbake virtual/kernel</pre>
: 4. Verify the changes by executing:
:: <pre>$ bitbake virtual/kernel -e | grep PREFERRED_PROVIDER_virtual/kernel</pre>
===Expected Results===
===Expected Results===
: 1. The variable should be set successfully. It can be tested using:
: 1. The variable should be set successfully.
:: <pre>$ bitbake virtual/kernel -e | grep PREFERRED_PROVIDER_virtual/kernel</pre>
: 2. Compilation process should be performed successfully.
: 2. Compilation process should be performed successfully.


Line 166: Line 165:
: 2. At conf/local.conf add the following variable:
: 2. At conf/local.conf add the following variable:
:: <pre>PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-custom"</pre>
:: <pre>PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-custom"</pre>
: 3. Compile the kernel:
: 3. Execute the kernel configuration task:
:: <pre>$ bitbake virtual/kernel -c kernel_configme</pre>
:: <pre>$ bitbake virtual/kernel -c kernel_configme</pre>
: 4. Verify that CONFIG_WIMAX option is not set at:
: 4. Verify that CONFIG_WIMAX option is not set at:
Line 173: Line 172:
:: <pre>[POKY_PATH]/meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb</pre>
:: <pre>[POKY_PATH]/meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb</pre>
:: This file should originate from [POKY_PATH]/meta/recipes-kernel/linux/linux-yocto_[VERSION].bb
:: This file should originate from [POKY_PATH]/meta/recipes-kernel/linux/linux-yocto_[VERSION].bb
: 6. Set parallel-meta for linux-yocto-custom, adding specific fragment.
: 6. Set parallel-meta for linux-yocto-custom, adding a specific fragment:
:: 6.1. Create four directories “files”, "parallel-kmeta","features" and "wimax" to work with parallel meta:
:: 6.1. Create four directories --"files", "parallel-kmeta","features" and "wimax"-- to work with parallel meta:
::: <pre>$ cd [POKY_PATH]/meta-kerneltest/recipes-kernel/linux/</pre>
::: <pre>$ cd [POKY_PATH]/meta-kerneltest/recipes-kernel/linux/</pre>
::: <pre>$ mkdir -p files/parallel-kmeta/features/wimax</pre>
::: <pre>$ mkdir -p files/parallel-kmeta/features/wimax</pre>
Line 180: Line 179:
::: <pre>$ cd files/parallel-kmeta/features/wimax</pre>
::: <pre>$ cd files/parallel-kmeta/features/wimax</pre>
::: <pre>$ touch wimax.cfg wimax.scc</pre>
::: <pre>$ touch wimax.cfg wimax.scc</pre>
:: 6.3. Inside wimax.cfg add the following variables:
:: 6.3. Inside wimax.cfg add the following variable:
::: <pre>CONFIG_WIMAX=y</pre>
::: <pre>CONFIG_WIMAX=y</pre>
:: 6.4. Inside wimax.scc add the following variables:
:: 6.4. Inside wimax.scc add the following variables:
Line 203: Line 202:
:: Set the following variable:
:: Set the following variable:
:: <pre>PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-custom"</pre>
:: <pre>PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-custom"</pre>
: 3. Compile in your build directory:
: 3. Clean the shared state:
:: <pre>$ bitbake virtual/kernel -c cleansstate</pre>
: 4. Execute the kernel configuration task:
:: <pre>$ bitbake virtual/kernel -c kernel_configme</pre>
:: <pre>$ bitbake virtual/kernel -c kernel_configme</pre>
:: Note: The build should fail at this step with an error indicating the "wimax.scc" fragment is not found.
:: Note: The build should fail at this step with an error indicating the "wimax.scc" fragment is not found.
Line 212: Line 213:
:: <pre>          git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}; \</pre>
:: <pre>          git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}; \</pre>
:: <pre>          file://parallel-kmeta;protocol=file;type=kmeta;name=p-kmeta;destsuffix=parallel-kmeta"</pre>
:: <pre>          file://parallel-kmeta;protocol=file;type=kmeta;name=p-kmeta;destsuffix=parallel-kmeta"</pre>
: 5. Compile the kernel:
: 4. Execute the kernel configuration task:
:: <pre>$ bitbake virtual/kernel -c kernel_configme</pre>
:: <pre>$ bitbake virtual/kernel -c kernel_configme</pre>
: 6. Verify that CONFIG_WIMAX=y option was set properly at:
: 6. Verify that CONFIG_WIMAX=y option was set properly at:
:: <pre>tmp/work/qemux86_64-poky-linux/linux-yocto-custom/[VERSION_DESCRIPTOR]/linux-qemux86_64-standard-build/.config</pre>
:: <pre>tmp/work/qemux86_64-poky-linux/linux-yocto-custom/[VERSION_DESCRIPTOR]/linux-qemux86_64-standard-build/.config</pre>
: 7. Verify the variables are set succesfully using:
:: <pre>$ bitbake virtual/kernel -e | grep -E "PREFERRED_PROVIDER_virtual/kernel|SRC_URI"</pre>
===Expected Results===
===Expected Results===
: 1. The variables should be set successfully. They can be tested using:
: 1. The variables should be set successfully.  
:: <pre>$ bitbake virtual/kernel -e | grep -E "PREFERRED_PROVIDER_virtual/kernel|SRC_URI"</pre>
: 2. The fragment should be added properly.
: 2. The fragment should be added properly.
: 3. Compilation process should be performed successfully.
: 3. Compilation process should be performed successfully.
: 4. CONFIG_WIMAX=y option should be set properly in the .config file after compilation.
: 4. CONFIG_WIMAX=y option should be set properly in the .config file after executing the kernel configuration task.

Revision as of 22:29, 5 October 2017

Setup

Common Prerequisites

1. Have a clone of poky:
$ git clone git://git.yoctoproject.org/poky
2. Check out the required commit using git:
$ git checkout [COMMIT_HASH]
3. Source the build environment to create the configuration files:
$ cd [POKY_PATH]
$ . oe-init-build-env
4. Open the conf/local.conf file:
$ vi build/local.conf
Set the machine to qemux86-64 by setting the line:
MACHINE = "qemux86-64"
5. Compile a minimal image:
$ bitbake core-image-minimal
6. Get and take note of the linux-yocto kernel version (only the first two numbers, for example: 4.10):
$ bitbake virtual/kernel -e | grep LINUX_VERSION
7. Create a layer to store kernel test metadata. For this task, you could use the yocto-layer script and its default recipe values:
$ cd [POKY_PATH]
$ yocto-layer create [LAYER-NAME]
Note: In the rest of this document "meta-kerneltest" is used as the [LAYER-NAME].
8. Create the recipe directory structure inside the created layer:
$ mkdir -p meta-kerneltest/recipes-kernel/linux/
9. Create a recipe append file inside the directory:
$ touch meta-kerneltest/recipes-kernel/linux/linux-yocto_4%.bbappend
10. Copy the recipe file corresponding to the linux-yocto version inside the directory:
$ cp meta/recipes-kernel/linux/linux-yocto_[VERSION].bb meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
11. Edit the linux-yocto-custom recipe:
$  vi meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
Set the PV variable with the LINUX_VERSION variable value:
PV = "${LINUX_VERSION}"
12. Create directory "linux-yocto":
$ mkdir meta-kerneltest/recipes-kernel/linux/linux-yocto/
13. Create directory "linux-yocto-custom":
$ mkdir meta-kerneltest/recipes-kernel/linux/linux-yocto-custom/
14. Add the created layer to bblayers.conf. For this task, you could use the bitbake-layers script from inside the build directory:
$ cd build
$ bitbake-layers add-layer ../meta-kerneltest

General Remarks

1. As a suggestion, open another terminal in order to perform git commands.
2. Remember to source the environment and ensure your current work directory is [POKY_PATH]/build before using bitbake scripts and tools.
3. You can edit any required file with vim, emacs, or your preferred text editor.
4. If there is not a proper response after building an image, be sure to clean the shared state, and try again. To clean it, you can use:
$ bitbake virtual/kernel -c cleansstate
5. Be careful with the information added to recipe and recipe append files, using the same values -- including spaces-- to set a recipe variable value.
To ensure all the sources are correctly downloaded and the required taks are executed, ensure no shared states proxies are set on conf/local.conf.
6. Make sure to point to the correct linux-yocto version.


TC_KD_01 – Applying Patches

Use Case

As a developer, I want to be able to apply a single patch to the Linux kernel source.

Prerequisites

1. Generate the patch:
1.1. Go to kernel source directory:
$ cd [POKY_PATH]/build/tmp/work-shared/qemux86-64/kernel-source
1.2. Add some information at the end of the README file:
$ echo This is a test to apply a patch to the kernel. >> README
1.3. Add the modified file to the patch:
$ git add README
1.4. Commit the change:
$ git commit -s -m "KERNEL DEV TEST CASE"
1.5. Format the patch:
$ git format-patch -1

Steps

1. Move the generated patch to the "linux-yocto" directory :
$ mv 0001-KERNEL-DEV-TEST-CASE.patch [POKY_PATH]/meta-kerneltest/recipes-kernel/linux/linux-yocto/
2. Add the SRC_URI var with the patch to the linux-yocto_4%.bbappend file:
$ cd [POKY_PATH]
$ vi meta-kerneltest/recipes-kernel/linux/linux-yocto_4%.bbappend
Add the following lines and save and close the file:
SRC_URI +=  "file://0001-KERNEL-DEV-TEST-CASE.patch"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
3. Delete the README file:
$ rm build/tmp/work-shared/qemux86-64/kernel-source/README
4. Clean the shared state:
$ cd build
$ bitbake virtual/kernel -c cleansstate
5. Build the patch:
$ bitbake virtual/kernel -c patch
6. Verify the patch is applied properly:
$ tail tmp/work-shared/qemux86-64/kernel-source/README

Expected results

1. Bitbake should complete the build without errors.
2. The README file should exist.
3. The patch changes should be displayed at the end of the file.


TC_KD_02 – linux-yocto Local Source

Use Case

As a developer, I want to to be able to work with my own Linux kernel sources.

Prerequisites

1. Have a recipe append file for linux-yocto (created previously).
2. Clone in a specific directory (different of poky):
$ cd [KERNEL_REPOS_PATH]
$ git clone git://git.yoctoproject.org/yocto-kernel-cache
$ git clone git://git.yoctoproject.org/linux-yocto-[VERSION]
3. Go to the cloned yocto-kernel-cache directory:
$ cd [KERNEL_REPOS_PATH]/yocto-kernel-cache
Checkout the required yocto-version branch:
$ git checkout [yocto-version]  # For example: $ git checkout yocto-4.8
4. Go to the linux-yocto-[VERSION] directory:
$ cd [KERNEL_REPOS_PATH]/linux-yocto-[VERSION]
Checkout the standard/base branch:
$ git checkout standard/base
5. Edit the conf/local.conf file in the repository where you are working for execution:
$ cd [POKY_PATH]
$ vi build/conf/local.conf
Set the following line:
PREFERRED_VERSION_linux-yocto_qemux86-64="[VERSION]%"

Steps

1. Edit the linux-yocto recipe append file previously created at your "meta-kerneltest" directory:
$ vi meta-kerneltest/recipes-kernel/linux/linux-yocto_4%.bbappend
Set the SRC_URI variable with the following information:
SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \
           git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"
2. Clean the shared state:
$ cd build
$ bitbake virtual/kernel -c cleansstate
3. Build the kernel:
$ bitbake virtual/kernel
4. Verify the changes by executing:
$ bitbake virtual/kernel -e | grep "name=machine;branch"

Expected Results

1. The changes should be performed successfully.
2. The build should be completed successfully.
3. The bitbake variables output should display that the SRC_URI variable is now:
SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \
           git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"


TC_KD_03 – linux-yocto Custom Local Source

Use Case

As a developer, I want to be able to work with my own local sources for a customized linux-yocto kernel.

Prerequisites

1. Make sure you have the custom recipe file corresponding to the latest linux-yocto version:
[POKY_PATH]/meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
This file should originate from [POKY_PATH]/meta/recipes-kernel/linux/linux-yocto_[VERSION].bb
2. Edit the linux-yocto-custom recipe file:
$ cd [POKY_PATH]
$ vi meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
Set the SRC_URI variable with the following information:
SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \
           git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"

Steps

1. Go to the poky build directory:
$ cd [POKY_PATH]/build
2. At conf/local.conf add the following variable:
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-custom"
3. Compile the kernel:
$ bitbake virtual/kernel
4. Verify the changes by executing:
$ bitbake virtual/kernel -e | grep PREFERRED_PROVIDER_virtual/kernel

Expected Results

1. The variable should be set successfully.
2. Compilation process should be performed successfully.


TC_KD_04 – Local Parallel Meta

Use Case

As a developer, I want to be able to work with local source with parallel meta.

Prerequisites

1. Go to the poky build directory:
$ cd [POKY_PATH]/build
2. At conf/local.conf add the following variable:
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-custom"
3. Execute the kernel configuration task:
$ bitbake virtual/kernel -c kernel_configme
4. Verify that CONFIG_WIMAX option is not set at:
tmp/work/qemux86_64-poky-linux/linux-yocto-custom/[VERSION_DESCRIPTOR]/linux-qemux86_64-standard-build/.config
5. Make sure you have the recipe file corresponding to the latest linux-yocto version:
[POKY_PATH]/meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
This file should originate from [POKY_PATH]/meta/recipes-kernel/linux/linux-yocto_[VERSION].bb
6. Set parallel-meta for linux-yocto-custom, adding a specific fragment:
6.1. Create four directories --"files", "parallel-kmeta","features" and "wimax"-- to work with parallel meta:
$ cd [POKY_PATH]/meta-kerneltest/recipes-kernel/linux/
$ mkdir -p files/parallel-kmeta/features/wimax
6.2. Inside "wimax" directory create two files: wimax.cfg and wimax.scc:
$ cd files/parallel-kmeta/features/wimax
$ touch wimax.cfg wimax.scc
6.3. Inside wimax.cfg add the following variable:
CONFIG_WIMAX=y
6.4. Inside wimax.scc add the following variables:
define KFEATURE_DESCRIPTION "WiMAX Wireless Broadband support"
define KFEATURE_COMPATIBILITY board
kconf hardware wimax.cfg
7. Edit the linux-yocto-custom recipe file:
$ cd [POKY_PATH]
$ vi meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
Set the SRC_URI variable with the following information:
SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \
           git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}"

Steps

1. Edit the linux-yocto-custom recipe file:
$ vi [POKY_PATH]/meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
Add the fragment by setting the next line:
KERNEL_FEATURES_append = " features/wimax/wimax.scc"
2. Edit conf/local.conf
$ cd [POKY_PATH]/build/
$ vi conf/local.conf
Set the following variable:
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-custom"
3. Clean the shared state:
$ bitbake virtual/kernel -c cleansstate
4. Execute the kernel configuration task:
$ bitbake virtual/kernel -c kernel_configme
Note: The build should fail at this step with an error indicating the "wimax.scc" fragment is not found.
4. Edit the linux-yocto-custom recipe file:
$ vi [POKY_PATH]/meta-kerneltest/recipes-kernel/linux/linux-yocto-custom_[VERSION].bb
Set the SRC_URI variable with the following information:
SRC_URI = "git://[KERNEL_REPOS_PATH]/linux-yocto-[VERSION];protocol=file;name=machine;branch=${KBRANCH}; \
           git://[KERNEL_REPOS_PATH]/yocto-kernel-cache;protocol=file;type=kmeta;name=meta;branch=yocto-[VERSION];destsuffix=${KMETA}; \
           file://parallel-kmeta;protocol=file;type=kmeta;name=p-kmeta;destsuffix=parallel-kmeta"
4. Execute the kernel configuration task:
$ bitbake virtual/kernel -c kernel_configme
6. Verify that CONFIG_WIMAX=y option was set properly at:
tmp/work/qemux86_64-poky-linux/linux-yocto-custom/[VERSION_DESCRIPTOR]/linux-qemux86_64-standard-build/.config
7. Verify the variables are set succesfully using:
$ bitbake virtual/kernel -e | grep -E "PREFERRED_PROVIDER_virtual/kernel|SRC_URI"

Expected Results

1. The variables should be set successfully.
2. The fragment should be added properly.
3. Compilation process should be performed successfully.
4. CONFIG_WIMAX=y option should be set properly in the .config file after executing the kernel configuration task.