How do I: Difference between revisions

From Yocto Project
Jump to navigationJump to search
No edit summary
No edit summary
Line 53: Line 53:
  BBFILE_PRIORITY_jfa = "5
  BBFILE_PRIORITY_jfa = "5


# 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:
;Step Three
: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 62: Line 63:
  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:
: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.
:* 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.
:* ${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.


# The recipe is built, so now I can run it:
;Step Four
: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.   


# 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.
;Step Five
: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 83: Line 86:
  "
  "


# 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:
;Step Six
: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"  


# Now I can bake it with this command:
;Step Seven
:Now I can bake it with this command:
  bitbake core-image-minimal
  bitbake core-image-minimal
# Once the image is built, I can test it by starting the QEMU emulator:
;Step Eight
:Once the image is built, I can test it by starting the QEMU emulator:


  runqemu qemux86
  runqemu qemux86


# Once the emulator comes up, login as root with no password.  Then, at the prompt, enter "hello" to run your application.
;Step Nine
:Once the emulator comes up, login as root with no password.  Then, at the prompt, enter "hello" to run your application.

Revision as of 17:39, 27 January 2012

Q: How do I put yocto on a hard drive?

A: bitbake core-image-sato or core-image-sato-sdk

  1. have a suitable partition on the disk - say partition #3
  2. this partition will show up as sde3 on my host machine and sda3 on the atom
  3. mkfs.ext3 /dev/sde3
  4. mount /dev/sde3 /mnt/target
  5. mount -o loop tmp/deploy/images/core-image-sato-sdk.ext3 /mnt/target-ext3
  6. cp -a /mnt/target-ext3/* /mnt/target
  7. 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.
Step One
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
Step Two
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
Step Three
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.
Step Four
The recipe is built, so now I can run it:
cd ~/poky
source oe-init-build-env build-hello.  
Step Five
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 \
"
Step Six
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" 
Step Seven
Now I can bake it with this command:
bitbake core-image-minimal
Step Eight
Once the image is built, I can test it by starting the QEMU emulator:
runqemu qemux86
Step Nine
Once the emulator comes up, login as root with no password. Then, at the prompt, enter "hello" to run your application.