Errata

Author, technical reviewers and the publisher's production staff have taken great care to ensure that the technical content of the book is correct and that the text is free of grammatical errors and spelling mistakes. However, even with all due-diligence there is always a good chance that we missed something. We will list all corrections on this page. If you find any issues or have any suggestions on how to improve the text, please use this form to submit them.

Page 66 Forcing Execution

This section has a mistake as to the differences of the -C versus the -c -f options. The -c option executes a single task only. Even if the output of that task changes any subsequent dependent tasks are not run automatically. The combination of -c -f will force the execution of the task even if the timestamps have not changed. The -C option will force the execution of the task but will also automatically run any dependent subsequent tasks. Consequently, the statement that -C and -c -f are equivalent is only true if the specified task is the last one in the execution chain.

Page 74 Python Variable Expansion

The example shown uses an incorrect, non-existing, function from the Python time module. The correct function is gmtime:

DATE = "${@time.strftime('%A %B %d, %Y', time.gmtime())}"

Page 74 - 75 Variable Appending and Prepending

For all three different forms of appending and prepending Appending (+=) and Prepending (=+) with Space, Appending (.=) and Prepending (=.) without Space and Appending and Prepending Using the _append and _prepend Operators VAR1 and VAR2 of the assignments to VAR3 are reversed.

For Appending (+=) and Prepending (=+) with Space it should be:
VAR3 =+ "${VAR1}"
VAR3 += "${VAR2}"

For Appending and Prepending Using the _append and _prepend Operators it should be:
VAR3_prepend "${VAR1}"
VAR3_append "${VAR2}"

For Appending (.=) and Prepending (=.) without Space it should be:
VAR3 =. "${VAR1}"
VAR3 .= "${VAR2}"

Page 76 Conditional Appending and Prepending

Formatting accidentally removed a space in front of umbrella from the line PROTECTION_append_rain. The corrected example is:

OVERRIDES = "sun:rain:snow"
PROTECTION = "sweater"
PROTECTION_append_rain = " umbrella"

For the example work correctly you have to modify the OVERRIDES variable in the configuration file bitbake.conf as it is defined there already.

Page 77 Inclusion

In section 4.4.3 Inclusion the keyword require for mandatory inclusion accidentally got changed into required. The correct keyword is require.

include optional.inc # optional inclusion
require mandatory.inc # mandatory inclusion

Page 97 Hello World Bitbake Style

The layer.conf file shown on pages 96/97 has incorrect lines for pattern and priority. The designator for BBFILE_PATTERN and BBFILE_PRIORITY must match the setting of BBFILE_COLLECTIONS. The correct file is:

# Add the path of this layer to BBPATH
BBPATH .= ":${LAYERDIR}"

# Add recipes and append files to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"

# Set layer search pattern and priority
BBFILE_COLLECTIONS += "hello"
BBFILE_PATTERN_hello := "^${LAYERDIR}/"
BBFILE_PRIORITY_hello = "5"

Page 230 Configuration Fragments

In Listing 9-2 the last line should read SRC_URI += "file://smp.cfg"

Page 233 Kernel Patches

The last line of the code under bullet 7 Add the configuration fragment and patch to the recipe, should read SRC_URI += "file://001-Added-Yocto-Project-Driver.patch"