[yocto] understanding recipes

Gary Thomas gary at mlbassoc.com
Thu Jan 26 14:37:55 PST 2012


On 2012-01-26 15:11, Scott Garman wrote:
> On 01/26/2012 02:04 PM, jfabernathy wrote:
>> On 01/26/2012 04:38 PM, Scott Garman wrote:
>>> On 01/26/2012 01:32 PM, jfabernathy wrote:
>>>> On 01/26/2012 01:55 PM, Scott Garman wrote:
>>>>> On 01/26/2012 08:44 AM, jfabernathy wrote:
>>>>>> I'm trying to understand the concept of creating a recipe and
>>>>>> having it
>>>>>> included in the build I do.
>>>>>>
>>>>>> For example, suppose I want to create the
>>>>>> meta-intel/meta-cedartrail BSP
>>>>>> with the core-image-minimal image, but I wanted to include hello world
>>>>>> as shown in 3.1.2 Autotooled Package section of the Poky reference
>>>>>> Manual.
>>>>>>
>>>>>> Where do I put the recipe file? I'm guessing a recipe-jfa directory at
>>>>>> the same level as the meta-cedartrail recipe-core, recipe-kernel,
>>>>>> recipe-graphic, recipe-bsp?
>>>>>
>>>>> Hi Jim,
>>>>>
>>>>> The best way to do this is to create your own layer, and keep all of
>>>>> your customizations there.
>>>>>
>>>>> You'd put this in a directory, say meta-jfa with something like the
>>>>> following:
>>>>>
>>>>> meta-jfa/
>>>>> meta-jfa/conf/layer.conf
>>>>> meta-jfa/recipes-jfa/helloworld/helloworld.bb
>>>>>
>>>>> where your layer.conf file would look like:
>>>>>
>>>>> # 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"
>>>>>
>>>>> Then point your build's bblayers.conf file to include the path to your
>>>>> meta-jfa/ directory.
>>>>>
>>>>>>
>>>>>> I'm also assuming that helloworld.bb file would contain:
>>>>>>
>>>>>> DESCRIPTION = "GNU Helloworld application"
>>>>>> SECTION = "examples"
>>>>>> LICENSE = "GPLv2+"
>>>>>> LIC_FILES_CHKSUM =
>>>>>> "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
>>>>>> PR = "r0"
>>>>>>
>>>>>> SRC_URI = "${GNU_MIRROR}/hello/hello-${PV}.tar.gz"
>>>>>>
>>>>>> inherit autotools gettext
>>>>>>
>>>>>>
>>>>>> So where do the values of ${GNU_MIRROR|, and ${PV} get set correctly?
>>>>>
>>>>> Those examples are defined in the bitbake classes you have in your
>>>>> base layers.
>>>>>
>>>>>> And what does the following line do or require me to do:
>>>>>>
>>>>>> LIC_FILES_CHKSUM =
>>>>>> "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
>>>>>
>>>>> This was answered in another post.
>>>>>
>>>>>> Is this all that is needed to get helloworld put into /usr/bin so
>>>>>> it can
>>>>>> be executed at the command line when the image is booted?
>>>>>
>>>>> You'd also need to add the helloworld package to your image file. The
>>>>> simplest way to do this is to add EXTRA_IMAGE_FEATURES += "helloworld"
>>>>> in your build's local.conf file.
>>>>>
>>>>> I think the above should be accurate enough w/o testing it myself.
>>>>>
>>>> I got the layer created like you said, but the test had a fetch problem
>>>> and it just locked up there. Had to control-C out of it. Console below:
>>>>
>>>> jim at ubuntu-x64:/build/mycdv-minimal$ bitbake helloworld
>>>> Loading cache: 100%
>>>> |###########################################################| ETA:
>>>> 00:00:00
>>>> Loaded 1037 entries from dependency cache.
>>>>
>>>> OE Build Configuration:
>>>> BB_VERSION = "1.13.3"
>>>> TARGET_ARCH = "i586"
>>>> TARGET_OS = "linux"
>>>> MACHINE = "mycdv"
>>>> DISTRO = "poky"
>>>> DISTRO_VERSION = "1.1"
>>>> TUNE_FEATURES = "m32 core2"
>>>> TARGET_FPU = ""
>>>> meta
>>>> meta-yocto = "edison:adcf8bf7b52460b94998438e8c2bf854cdec0a80"
>>>> meta-mycdv = "edison:34478f24de65dd8de8a4c8b913a1458d82dac1fa"
>>>> meta-jfa = "edison:adcf8bf7b52460b94998438e8c2bf854cdec0a80"
>>>>
>>>> NOTE: Resolving any missing task queue dependencies
>>>> NOTE: Preparing runqueue
>>>> NOTE: Executing SetScene Tasks
>>>> NOTE: Executing RunQueue Tasks
>>>> NOTE: Running task 514 of 693 (ID: 4,
>>>> /home/jim/poky/meta-jfa/recipes-jfa/helloworld/helloworld.bb, do_fetch)
>>>> NOTE: package helloworld-1.0-r0: task do_fetch: Started
>>>> WARNING: Fetcher failure for URL: 'None'. Fetch command export
>>>> HOME="/home/jim"; export SSH_AGENT_PID="1413"; export
>>>> SSH_AUTH_SOCK="/tmp/keyring-2QW6yC/ssh"; export
>>>> GIT_CONFIG="/build/mycdv-minimal/tmp/sysroots/x86_64-linux/usr/etc/gitconfig";
>>>>
>>>> export
>>>> PATH="/build/mycdv-minimal/tmp/sysroots/x86_64-linux/usr/bin/core2-poky-linux:/build/mycdv-minimal/tmp/sysroots/mycdv/usr/bin/crossscripts:/build/mycdv-minimal/tmp/sysroots/x86_64-linux/usr/sbin:/build/mycdv-minimal/tmp/sysroots/x86_64-linux/usr/bin:/build/mycdv-minimal/tmp/sysroots/x86_64-linux/sbin:/build/mycdv-minimal/tmp/sysroots/x86_64-linux//bin:/home/jim/poky/scripts:/home/jim/poky/bitbake/bin/:/home/jim/poky/scripts:/home/jim/poky/bitbake/bin/:/home/jim/poky/scripts:/home/jim/poky/bitbake/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/jim/poky/scripts";
>>>>
>>>>
>>>> /usr/bin/env wget -t 5 -q --passive-ftp --no-check-certificate -P
>>>> /home/jim/yocto-downloads 'ftp://ftp.gnu.org/gnu/hello/hello-1.0.tar.gz'
>>>> failed with signal 8, output:
>>>>
>>>> I don't see 1.0.tar on the ftp site. How do I control this?
>>>
>>> If you look in:
>>>
>>> ftp://ftp.gnu.org/gnu/hello/
>>>
>>> you'll see which versions are available. Rename your recipe filename
>>> to reflect the version you wish to use, for example helloworld_2.7.bb
>>>
>>> The part of the filename after the underscore is what will get
>>> interpolated into ${PV}.
>>>
>>> Scott
>>>
>> Now I have gotten by the fetching but the license file information in
>> the .bb file from the example is incorrect. I can't see from the
>> Reference manual License section enough information for me to create
>> that line in the .bb file. What is the process to figure this out?
>
> In this case, the LIC_FILES_CHKSUM is storing the md5sum of the COPYING file, which is stored in the top-level directory of the extracted sources.
>
> So manually download the hello version you are trying to use, extract the tarball locally, and run md5sum against the COPYING file. Then update the LIC_FILES_CHKSUM field with that
> new md5 checksum.
>
> This is a common process we have to go through when upgrading recipes, so you're getting a taste of what working with the distro/metadata team is like. :)
>
> One more thing - when LIC_FILES_CHKSUM changes, you should always verify that the license for the sources haven't changed (in this case GPL v2 or later). If it did change, you'd
> also need to change the LICENSE field in the recipe to reflect the new license. LIC_FILES_CHKSUM is a step we added so we don't miss license changes.

I use the attached script to automate this - it puts the files
in the correct format (modulo a little path massaging if necessary).

What I do when I run across these problems is this:
   % bitbake <recipe>
   ... fails with LIC_FILES_CHKSUM errors
   % make_LIC_FILES_CHECKSUM tmp/work/<path-to-recipe-tree>/<LICENSE_FILES>
   e.g.
     (cd tmp/work/armv7a-vfp-neon-poky-linux-gnueabi/helloworld-2.7-r0/helloworld-2.7/;make_LIC_FILES_CHECKSUM COPYING)
Cut & paste the output into your recipe and rebuild.

The script makes it much simpler to do this when multiple
files are involved.

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: make_LIC_FILES_CHKSUM
URL: <http://lists.yoctoproject.org/pipermail/yocto/attachments/20120126/e71e7614/attachment.ksh>


More information about the yocto mailing list