[yocto] understanding recipes

Saul Wold sgw at linux.intel.com
Thu Jan 26 17:20:57 PST 2012


On 01/26/2012 05:12 PM, jfabernathy wrote:
> On 01/26/2012 06:52 PM, Gary Thomas wrote:
>> On 2012-01-26 16:44, jfabernathy wrote:
>>> On 01/26/2012 05:37 PM, Gary Thomas wrote:
>>>> 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.
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> yocto mailing list
>>>> yocto at yoctoproject.org
>>>> https://lists.yoctoproject.org/listinfo/yocto
>>> okay, I got a clean build, but hello was not in the final image even
>>> though I had:
>>>
>>> EXTRA_IMAGE_FEATURES += "hello"
>>>
>>> in the local.conf. I ran hob against this and could see that hello
>>> was an option, but it was not selected. Trying to bake with hob from
>>> there didn't work, but that's not as important.
>>>
>>> Any ideas as to why EXTRA_IMAGE_FEATURES += "hello" didn't add the
>>> hello code to the final image?
>>
>> EXTRA_IMAGE_FEATURES enables target *features*, not packages.
>>
>> To get your package added, use this in local.conf
>> IMAGE_INSTALL += " hello "
>>
> Based on what I've discovered about the use of IMAGE_INSTALL in
> local.conf, I'll opt for POKY_EXTRA_INSTALL += "hello"
>
> That option worked. So now I can better understand this. Thanks all.
>
> Would the make a good example for the How Do I section on the wiki? I
> can write it up if someone will review and post.
>
Please write it up, you should have access to the wiki , by creating a 
login.

Sau!

> Jim A.
>
> Jim A
> _______________________________________________
> yocto mailing list
> yocto at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/yocto
>



More information about the yocto mailing list