Difference between revisions of "How to add a customer application"

[quality revision] [quality revision]
m (Adding an application already present in layers)
m

1 Article purpose[edit]

The main purpose of this article is to give main steps on how to add a customer application or an already existing application inside the Yocto build process (with the Distribution Package).

2 Pre-requesite[edit]

You are already familiar with the Yocto build process and the OpenSTLinux distribution.

You have already created a customer layer (How to create a new open embedded layer) or want to add an already existing application to update, for your own needs, the OpenSTLinux distribution.

You have already created in your environment either an external out of tree kernel module, or an "hello world" user space example.

3 Adding an application[edit]

3.1 Adding an application already present in layers[edit]

You may want to add an application which is already present in layers, for example OpenCV. You can search for it.

PC $> bitbake -s|grep opencv

If nothing is displayed, it can be because this recipe is not included in your layers. You can try to search for it.

PC $>  find . -type f -iname "opencv*.bb"
 ./layers/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.3.bb

If the find command displays a recipe, then add the layer to your configuration

To check that this application can be built, compile it with the bitbake command:

PC $> bitbake opencv

You can now add it to an image.

3.2 Adding a customer application (integrated in a customer layer)[edit]

Once mymodule or myhelloworld recipes have been created with devtool commands, to add it in the Yocto build process, some additional commands below must be used.
They concern the external out-of-tree Linux kernel module (mymodule).
Similar commands shall be executed for the "hello world" user space example (myhelloworld).

  • Copy the new recipe inside the customer layer
PC $> mkdir ../meta-my-custo-layer/recipes-custom/mymodule
PC $> cp workspace/recipes/mymodule/mymodule.bb ../meta-my-custo-layer/recipes-custom/mymodule
  • Copy the source code files, the Makefile inside the customer layer
PC $> mkdir ../meta-my-custo-layer/recipes-custom/mymodule/mymodule
PC $> cp kernel_module_example/Makefile ../meta-my-custo-layer/recipes-custom/mymodule/mymodule
PC $> cp kernel_module_example/kernel_module_example.c ../meta-my-custo-layer/recipes-custom/mymodule/mymodule
PC $> devtool reset mymodule
  • Some fields of new recipes must be also completed, at least LICENSE, LIC_FILES_CHKSUM, and SRC_URI
Warning white.png Warning
The recipe update must be done now directly in ../meta-my-custo-layer/recipes-custom/mymodule/mymodule.bb
1 # NOTE: LICENSE is set to "CLOSED" to allow you to at least start building - if
2 # this is not accurate with respect to the licensing of the software being built (in most cases, it
3 # is not) you must specify the correct value, before using this
4 # recipe for anything other than the initial testing/development!
5 LICENSE = "CLOSED"
6 LIC_FILES_CHKSUM = ""
7 
8 # No information for SRC_URI yet (only an external source tree is specified)
9 SRC_URI = ""

For instance for Linux kernel module:

1 LICENSE = "GPLv2"
2 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe"
3 
4 SRC_URI = "file://Makefile \
5            file://kernel_module_example.c \
6           "

or Or for user space application:

1 LICENSE = "MIT"
2 LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
3 
4 SRC_URI = "file://hello_world_example.c \
5           "

To check that your updates of new recipe have not broken the compilation, compile it with the bitbake command:

PC $> bitbake mymodule

You can now add it to an image.

4 Quickly add the recipe to an image[edit]

  • For a quick check you can add this new recipe (mymodule.bb) inside st-image-weston, recompile this image, flash/boot the board and check the module is well functionnal
PC $> cd .../meta-st-openstlinux/recipes-st/images/

Open st-image-weston.bb and add this line : CORE_IMAGE_EXTRA_INSTALL += " mymodule "

PC $> bitbake st-image-weston

After flashing and booting the board, Insert the kernel module example into the Linux kernel

Board $> modprobe kernel_module_example
[18167.821725] Kernel module example: hello world from STMicroelectronics

Remove the kernel module example from the Linux kernel

Board $> rmmod kernel_module_example
[18180.086722] Kernel module example: goodbye from STMicroelectronics

Once this quick check is done, please remove the addon in st-image-weston

  • Create your custom image by following the recommendation made in How to create your own image (chapter 4.2.3).
  • This new recipe (mymodule.bb) must be added inside the custom image you compile
PC $> cd .../meta-my-custo-layer/recipes-samples/images/

Open my-custom-image.bb and add this line : IMAGE_INSTALL += "mymodule"

PC $> bitbake <my custome image>


==Article purpose==
The main purpose of this article is to give main steps on how to add a customer application or an already existing application inside the Yocto build process (with the Distribution Package).

==Pre-requesite==
You are already familiar with the Yocto build process and the OpenSTLinux distribution.

You have already created a customer layer ([[How to create a new open embedded layer]]) or want to add an already existing application to update, for your own needs, the OpenSTLinux distribution.

You have already created in your environment either an [[How to cross-compile with the Distribution Package#Adding_an_external_out-of-tree_Linux_kernel_module|external out of tree kernel module]], or an [[How to cross-compile with the Distribution Package#Adding a "hello world" user space example|"hello world" user space example]].

==Adding an application==
===Adding an application already present in layers===
You may want to add an application which is already present in layers, for example '''OpenCV'''. You can search for it.

 {{PC$}} bitbake -s|grep opencv

If nothing is displayed, it can be because this recipe is not included in your layers. You can try to search for it.
 {{PC$}}  find . -type f -iname "opencv*.bb"
  ./layers/meta-openembedded/meta-oe/recipes-support/opencv/opencv_3.4.3.bb

If the find command displays a recipe, then [[How_to_create_a_new_open_embedded_layer#Add_the_new_layer_to_your_configuration|add the layer to your configuration]]

To check that this application can be built, compile it with the bitbake command:
 {{PC$}} bitbake opencv

You can now add it to an image.

===Adding a customer application (integrated in a customer layer)===
Once ''mymodule'' or ''myhelloworld'' recipes have been created with devtool commands, to add it in the Yocto build process, some additional commands below must be used.<br>

They concern the external out-of-tree Linux kernel module (''mymodule'').<br>

Similar commands shall be executed for the "hello world" user space example (''myhelloworld'').

* Copy the new recipe inside the customer layer   
 {{PC$}} mkdir ../meta-my-custo-layer/recipes-custom/mymodule
 {{PC$}} cp workspace/recipes/mymodule/mymodule.bb ../meta-my-custo-layer/recipes-custom/mymodule

* Copy the source code files, the Makefile inside the customer layer
 {{PC$}} mkdir ../meta-my-custo-layer/recipes-custom/mymodule/mymodule
 {{PC$}} cp kernel_module_example/Makefile ../meta-my-custo-layer/recipes-custom/mymodule/mymodule
 {{PC$}} cp kernel_module_example/kernel_module_example.c ../meta-my-custo-layer/recipes-custom/mymodule/mymodule
 {{PC$}} devtool reset mymodule

* Some fields of new recipes must be also completed, at least '''LICENSE''', '''LIC_FILES_CHKSUM''', and '''SRC_URI'''
:*Details on the license are explained in [https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html#new-recipe-licensing Yocto Megamanual New Recipe Licensing]
:*Details on SRC_URI are explained in [https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html#new-recipe-fetching-code Yocto Megamanual New Recipe fetching code]
{{Warning|The recipe update must be done now directly in ../meta-my-custo-layer/recipes-custom/mymodule/mymodule.bb}} <pre class="brush:c; gutter:true; highlight: [5,6,9];"><syntaxhighlight lang="c" line highlight="5-6,9">

# NOTE: LICENSE is set to "CLOSED" to allow you to at least start building - if
# this is not accurate with respect to the licensing of the software being built (in most cases, it
# is not) you must specify the correct value, before using this
# recipe for anything other than the initial testing/development!
LICENSE = "CLOSED"
LIC_FILES_CHKSUM = ""

# No information for SRC_URI yet (only an external source tree is specified)
SRC_URI = ""</pre></syntaxhighlight>


For instance for '''Linux kernel module''':<pre class="brush:c; gutter:true; highlight: [1,2,4,5,6];"><syntaxhighlight lang="c" line highlight="1-2,4-6">

LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe"

SRC_URI = "file://Makefile \
           file://kernel_module_example.c \
          "</pre> 

or</syntaxhighlight>


Or for '''user space application''':<pre class="brush:c; gutter:true; highlight: [1,2,4,5];"><syntaxhighlight lang="c" line highlight="1-2,4-5">

LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"

SRC_URI = "file://hello_world_example.c \
          "</pre>
</syntaxhighlight>

To check that your updates of new recipe have not broken the compilation, compile it with the bitbake command:
 {{PC$}} bitbake mymodule

You can now add it to an image.

==Quickly add the recipe to an image==
* For a quick check you can add this new recipe (mymodule.bb) inside st-image-weston, recompile this image, flash/boot the board and check the module is well functionnal
 {{PC$}} cd .../meta-st-openstlinux/recipes-st/images/
Open st-image-weston.bb and add this line : '''CORE_IMAGE_EXTRA_INSTALL += " mymodule "'''
 {{PC$}} bitbake st-image-weston

After flashing and booting the board, Insert the kernel module example into the Linux kernel
 {{Board$}} modprobe kernel_module_example
 [18167.821725] {{Highlight|Kernel module example}}: hello world from STMicroelectronics

Remove the kernel module example from the Linux kernel
 {{Board$}} rmmod kernel_module_example
 [18180.086722] {{Highlight|Kernel module example}}: goodbye from STMicroelectronics

'''Once this quick check is done, please remove the addon in st-image-weston'''

* Create your custom image by following the recommendation made in [[How to create your own image]] (chapter 4.2.3).
* This new recipe (mymodule.bb) must be added inside the custom image you compile
 {{PC$}} cd .../meta-my-custo-layer/recipes-samples/images/
Open my-custom-image.bb and add this line : '''IMAGE_INSTALL += "mymodule"'''<br>

 {{PC$}} bitbake <my custome image>


<noinclude>

[[Category:How to customize software]]
[[Category:Distribution Package]]
{{PublicationRequestId | 8442  | 2018-08-30 | AlainF }}</noinclude>
Line 45: Line 45:
 
:*Details on SRC_URI are explained in [https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html#new-recipe-fetching-code Yocto Megamanual New Recipe fetching code]
 
:*Details on SRC_URI are explained in [https://www.yoctoproject.org/docs/2.4/mega-manual/mega-manual.html#new-recipe-fetching-code Yocto Megamanual New Recipe fetching code]
 
{{Warning|The recipe update must be done now directly in ../meta-my-custo-layer/recipes-custom/mymodule/mymodule.bb}}  
 
{{Warning|The recipe update must be done now directly in ../meta-my-custo-layer/recipes-custom/mymodule/mymodule.bb}}  
<pre class="brush:c; gutter:true; highlight: [5,6,9];">
+
<syntaxhighlight lang="c" line highlight="5-6,9">
 
# NOTE: LICENSE is set to "CLOSED" to allow you to at least start building - if
 
# NOTE: LICENSE is set to "CLOSED" to allow you to at least start building - if
 
# this is not accurate with respect to the licensing of the software being built (in most cases, it
 
# this is not accurate with respect to the licensing of the software being built (in most cases, it
Line 55: Line 55:
 
# No information for SRC_URI yet (only an external source tree is specified)
 
# No information for SRC_URI yet (only an external source tree is specified)
 
SRC_URI = ""
 
SRC_URI = ""
</pre>  
+
</syntaxhighlight>
  +
 
 
For instance for '''Linux kernel module''':
 
For instance for '''Linux kernel module''':
<pre class="brush:c; gutter:true; highlight: [1,2,4,5,6];">
+
<syntaxhighlight lang="c" line highlight="1-2,4-6">
 
LICENSE = "GPLv2"
 
LICENSE = "GPLv2"
 
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe"
 
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe"
Line 64: Line 65:
 
           file://kernel_module_example.c \
 
           file://kernel_module_example.c \
 
           "
 
           "
</pre>  
+
</syntaxhighlight >
or for '''user space application''':
+
 
<pre class="brush:c; gutter:true; highlight: [1,2,4,5];">
+
Or for '''user space application''':
  +
<syntaxhighlight lang="c" line highlight="1-2,4-5">
 
LICENSE = "MIT"
 
LICENSE = "MIT"
 
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
 
LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
Line 72: Line 74:
 
SRC_URI = "file://hello_world_example.c \
 
SRC_URI = "file://hello_world_example.c \
 
           "
 
           "
</pre>
+
</syntaxhighlight >
  +
 
 
To check that your updates of new recipe have not broken the compilation, compile it with the bitbake command:
 
To check that your updates of new recipe have not broken the compilation, compile it with the bitbake command:
 
  {{PC$}} bitbake mymodule
 
  {{PC$}} bitbake mymodule
Line 99: Line 102:
 
Open my-custom-image.bb and add this line : '''IMAGE_INSTALL += "mymodule"'''<br>
 
Open my-custom-image.bb and add this line : '''IMAGE_INSTALL += "mymodule"'''<br>
 
  {{PC$}} bitbake <my custome image>
 
  {{PC$}} bitbake <my custome image>
 
   
 
<noinclude>
 
<noinclude>