How do I: Difference between revisions
Jfabernathy (talk | contribs) (new how to I add recipes) |
No edit summary |
||
Line 29: | Line 29: | ||
'''Q: How do I put my recipe into Yocto? ''' | '''Q: How do I put my recipe into Yocto? ''' | ||
'''A:''' Let's use the Hello World example from Section 3.1.2 of the | '''A:''' Let's use the Hello World example from Section 3.1.2 of the Yocto Project Reference Manual and expand on it. | ||
* | * In this example, I'll start with a new meta layer named "meta-jfa" in the Yocto Project files directory, which is named "poky". Then, I will add the new recipe and build the image, which is named "core-image-minimal". I will build it using the autotooled package option. Once built, the image will have the “hello” application. | ||
1. Create the following directory structure in the ~/poky directory. I'll use my initials to denote the layer and recipe name: | |||
mkdir meta-jfa | mkdir meta-jfa | ||
Line 39: | Line 40: | ||
mkdir meta-jfa/recipes-jfa/hello | mkdir meta-jfa/recipes-jfa/hello | ||
2. Next, to make sure the recipe gets searched and located, I'll create the layer.conf file in the meta-jfa/conf directory as follows: | |||
# We have a conf and classes directory, add to BBPATH | # We have a conf and classes directory, add to BBPATH | ||
Line 50: | Line 51: | ||
BBFILE_PRIORITY_jfa = "5 | BBFILE_PRIORITY_jfa = "5 | ||
3. Now I need to put the recipe (.bb) file into the right directory. So, I will put the file hello_2.7.bb into the meta-jfa/recipes-jfa/hello directory. I picked version 2.7 of the hello program by going to the gnu site for the application (ftp://ftp.gnu.org/gnu/hello/) and downloading it to checkout the version I wanted to include. hello-2.7.tar.gz is the most current. I downloaded it locally and expanded it to look at the license information. The hello_2.7.bb file contains the following: | |||
DESCRIPTION = "GNU Helloworld application" | DESCRIPTION = "GNU Helloworld application" | ||
Line 59: | Line 60: | ||
SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" | SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" | ||
inherit autotools gettext | inherit autotools gettext | ||
* | * Here is some explanation for a few of the recipe statements: | ||
** LIC_FILES_CHKSUM = is required and, using file location defaults, points to the COPYING file that is part of the tarball that is downloaded from the SRC_URI address. The md5= part of the statement is generated by running “md5sum COPYING” against the COPYING file | ** LIC_FILES_CHKSUM = is required and, using file location defaults, points to the COPYING file that is part of the tarball that is downloaded from the SRC_URI address. The md5= part of the statement is generated by running “md5sum COPYING” against the COPYING file I downloaded to examine. | ||
** ${PV} in the SRC_URI statement is picked up from the part of the recipe file name after the “_”. In | ** ${PV} in the SRC_URI statement is picked up from the part of the recipe file name after the “_”. In this case PV =2.7. | ||
4. The recipe is built, so now I can run it: | |||
cd ~/poky | cd ~/poky | ||
source oe-init-build-env build-hello. | source oe-init-build-env build-hello. | ||
5. Before I can use BitBake I need to edit two files. Sourcing the oe-init-build-env file above leaves me in the build-hello directory. Before issuing the bitbake command I need to edit the files conf/local.conf and conf/bblayers.conf in that build-hello directory. The bblayers.conf needs to have the one line added to include the layer you created. | |||
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf | # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf | ||
Line 78: | Line 79: | ||
/home/jim/poky/meta-yocto \ | /home/jim/poky/meta-yocto \ | ||
/home/jim/poky/meta-jfa \ | /home/jim/poky/meta-jfa \ | ||
" | |||
6. The conf/local.conf file needs to have the parallel processing lines edited to speed up the baking on multicore systems. I can do that by uncommenting the BB_NUMBER_THREADS and PARALLEL_MAKE variables. Generally, I would set them equal to twice the number of cores used by my host machine. By default, the MACHINE variable is set to qemux86 and for this example is fine. I need to add a line to include the hello package I am building into the image by adding the following line: | |||
POKY_EXTRA_INSTALL += "hello" | POKY_EXTRA_INSTALL += "hello" | ||
7. Now I can bake it with this command: | |||
bitbake core-image-minimal | bitbake core-image-minimal | ||
8. Once the image is built, I can test it by starting the QEMU emulator: | |||
runqemu qemux86 | runqemu qemux86 | ||
9. Once the emulator comes up, login as root with no password. Then, at the prompt, enter "hello" to run your application. |
Revision as of 15:39, 27 January 2012
Q: How do I put yocto on a hard drive?
A: bitbake core-image-sato or core-image-sato-sdk
- have a suitable partition on the disk - say partition #3
- this partition will show up as sde3 on my host machine and sda3 on the atom
- mkfs.ext3 /dev/sde3
- mount /dev/sde3 /mnt/target
- mount -o loop tmp/deploy/images/core-image-sato-sdk.ext3 /mnt/target-ext3
- cp -a /mnt/target-ext3/* /mnt/target
- grub-install --recheck --root-directory=/mnt/target /dev/sde
If grub install passed, copy the following to /mnt/target/boot/grub/grub.cfg
set default="0" set timeout="30" menuentry 'Yocto SDK' { insmod part_msdos insmod ext2 set root='(hd0,msdos3)' linux /boot/bzImage root=/dev/sda3 }
Thats it - this should boot.
Q: How do I put my recipe into Yocto?
A: Let's use the Hello World example from Section 3.1.2 of the Yocto Project Reference Manual and expand on it.
- In this example, I'll start with a new meta layer named "meta-jfa" in the Yocto Project files directory, which is named "poky". Then, I will add the new recipe and build the image, which is named "core-image-minimal". I will build it using the autotooled package option. Once built, the image will have the “hello” application.
1. Create the following directory structure in the ~/poky directory. I'll use my initials to denote the layer and recipe name:
mkdir meta-jfa mkdir meta-jfa/conf mkdir meta-jfa/recipes-jfa mkdir meta-jfa/recipes-jfa/hello
2. Next, to make sure the recipe gets searched and located, I'll create the layer.conf file in the meta-jfa/conf directory as follows:
# We have a conf and classes directory, add to BBPATH BBPATH := "${BBPATH}:${LAYERDIR}" # We have a packages directory, add to BBFILES BBFILES := "${BBFILES} ${LAYERDIR}/recipes-*/*/*.bb \ ${LAYERDIR}/recipes-*/*/*.bbappend" BBFILE_COLLECTIONS += "jfa" BBFILE_PATTERN_jfa := "^${LAYERDIR}/" BBFILE_PRIORITY_jfa = "5
3. Now I need to put the recipe (.bb) file into the right directory. So, I will put the file hello_2.7.bb into the meta-jfa/recipes-jfa/hello directory. I picked version 2.7 of the hello program by going to the gnu site for the application (ftp://ftp.gnu.org/gnu/hello/) and downloading it to checkout the version I wanted to include. hello-2.7.tar.gz is the most current. I downloaded it locally and expanded it to look at the license information. The hello_2.7.bb file contains the following:
DESCRIPTION = "GNU Helloworld application" SECTION = "examples" LICENSE = "GPLv3+" LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" PR = "r0" SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz" inherit autotools gettext
- Here is some explanation for a few of the recipe statements:
- LIC_FILES_CHKSUM = is required and, using file location defaults, points to the COPYING file that is part of the tarball that is downloaded from the SRC_URI address. The md5= part of the statement is generated by running “md5sum COPYING” against the COPYING file I downloaded to examine.
- ${PV} in the SRC_URI statement is picked up from the part of the recipe file name after the “_”. In this case PV =2.7.
4. The recipe is built, so now I can run it:
cd ~/poky source oe-init-build-env build-hello.
5. Before I can use BitBake I need to edit two files. Sourcing the oe-init-build-env file above leaves me in the build-hello directory. Before issuing the bitbake command I need to edit the files conf/local.conf and conf/bblayers.conf in that build-hello directory. The bblayers.conf needs to have the one line added to include the layer you created.
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly LCONF_VERSION = "4" BBFILES ?= "" BBLAYERS = " \ /home/jim/poky/meta \ /home/jim/poky/meta-yocto \ /home/jim/poky/meta-jfa \ "
6. The conf/local.conf file needs to have the parallel processing lines edited to speed up the baking on multicore systems. I can do that by uncommenting the BB_NUMBER_THREADS and PARALLEL_MAKE variables. Generally, I would set them equal to twice the number of cores used by my host machine. By default, the MACHINE variable is set to qemux86 and for this example is fine. I need to add a line to include the hello package I am building into the image by adding the following line:
POKY_EXTRA_INSTALL += "hello"
7. Now I can bake it with this command:
bitbake core-image-minimal
8. Once the image is built, I can test it by starting the QEMU emulator:
runqemu qemux86
9. Once the emulator comes up, login as root with no password. Then, at the prompt, enter "hello" to run your application.