How do I: Difference between revisions

From Yocto Project
Jump to navigationJump to search
No edit summary
No edit summary
Line 33: Line 33:
* 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.
* 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.


# Create the following directory structure in the ~/poky directory. I'll use my initials to denote the layer and recipe name:
;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
  mkdir meta-jfa/conf
  mkdir meta-jfa/conf
Line 40: Line 41:
  mkdir meta-jfa/recipes-jfa/hello
  mkdir meta-jfa/recipes-jfa/hello


# 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:
;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  
  # We have a conf and classes directory, add to BBPATH  

Revision as of 17:34, 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
  1. 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.
  1. The recipe is built, so now I can run it:
cd ~/poky
source oe-init-build-env build-hello.  
  1. 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 \
"
  1. 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" 
  1. Now I can bake it with this command:
bitbake core-image-minimal
  1. Once the image is built, I can test it by starting the QEMU emulator:
runqemu qemux86
  1. Once the emulator comes up, login as root with no password. Then, at the prompt, enter "hello" to run your application.