Compare commits

..

137 Commits

Author SHA1 Message Date
Richard Purdie
c2b641c8a0 build-appliance-image: Update to rocko head revision
(From OE-Core rev: 9d1129076658b4c5827c95ad8b195a7a100d7a9e)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-07 12:26:48 +00:00
Richard Purdie
ab4310e7b8 poky: Update to version 2.4.1
(From meta-yocto rev: b52aa0f906ae51d4e01d3851c7b9f332e0935dd7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-07 12:25:20 +00:00
Matt Madison
551d18e4b8 go: ensure use of BUILD_CC when building bootstrap tools
For cross-canadian builds, we were accidentally using
the crosssdk C compiler when building the Go compiler
bootstrap.  Add a patch to the make script to let us
use BUILD_CC, and prepend do_compile to set it in
the local environment to ensure that the trailing
blank gets stripped, since that confuses Go.

[YOCTO #12341]

(From OE-Core rev: 70278eb86bc5bcbe3fa53c62f971fa467f61e28f)

Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 0dbb860924fc157880b52d8e08bad3c6c6b019b8)
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-07 12:23:43 +00:00
Khem Raj
7030d5b4f9 go: Use right dynamic linker on musl
(From OE-Core rev: 21e339fe203fd4a31c9654924a38970f493dace1)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 0d6e83757fc26d3e88bfe3c2437b5c7c9be09118)
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-07 12:23:43 +00:00
Otavio Salvador
f88c841a2d Revert "go: Fix build with PIE on musl"
This reverts commit d6fcf91c06a3d118e8741273fac6903100141db4.

This commit was included on the rocko update by mistake. It ended
being dropped from master merge queue but forgotten in rocko one.

(From OE-Core rev: 4b69167fb3e55dfd1ff0fa0cfc7f4c226b033d6a)

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-07 12:23:43 +00:00
Richard Purdie
1c61ba0a3f bitbake: tinfoil: Ensure we clean up loggers
This is primarily paranoid but ensure we remove any loggers we setup
either directly or indirectly so the initial state is restored after
we exit.

(Bitbake rev: 230493d9b99f7d315bc4e5e8d0093bd62ec8f9eb)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit af7d63b1f76fd3f7fa92ed15ae61ca47d9e13472)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:01 +00:00
Richard Purdie
babf923312 bitbake: event: Ensure we clean up loggers
Whilst we're likely exiting in this case, clean up the loggers we add
so that in the case of certain server retries there is no possibility
multiple loggers stack up.

(Bitbake rev: e52bf5f066618dfabecbd4197f77f78fa463af64)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 25b7bf6672be66bcbfe5760610dce7d3e866cdcc)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:01 +00:00
Richard Purdie
a1bff37c3f bitbake: tests/fetch: Add ftp test url
Add in a tets ftp url so we ensure ftp urls contnue to work after the loss
of the ftp.gnu.org ones.

(Bitbake rev: 7016bd9c4b05df2e888ec98e37a8ae6f3ac398bd)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit e1e8565b5e19dd3f7ef6e7e41932456adaa3df81)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:01 +00:00
Ross Burton
738fc234fa bitbake: tests/fetch: use subtests in the wget tests
As we test multiple URLs in this these tests and one failing abandons the test,
use subtests so all URLs are tested. This should help us identify patterns in
the failing URLs.

(Bitbake rev: 0eadcf94540c7e4a634c5c1e873658b65996f334)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit c4c4465b32e82d4b6e46a44e776be5039aef6b18)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:01 +00:00
Richard Purdie
f79c0d45fa bitbake: tests/fetch: Switch gnu.org urls from ftp -> http/https
The ftp server at ftp.gnu.org is likely to be retired at some point soon
so siwtch over to the http/https services.

This means bitbake-selftest doesn't have ftp test urls, however finding stable
ftp test servers is proving increasingly hard.

(Bitbake rev: 6497a030463cc7fd61bb8319d4c3ec824003c2fc)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 892a08245ddb21a464aeb37d3e32377e99dd7e2b)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:01 +00:00
Ross Burton
a5e95c2a85 bitbake: bitbake: be more explicit when warning about locale choice
(Bitbake rev: b3f7a75aeac31bc0afb7288fc54eb3929a8e1bae)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 286dce008d6e0bd3121393b28ca02de1385519fb)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:01 +00:00
Ross Burton
4b2d0192b2 bitbake: tests/fetch: skip network tests the idiomatic way
Instead of not even having the test functions if network tests are disabled, use
a custom decorator to mark the network tests and skip them.

(Bitbake rev: 618cf9693b9f4b48208603b2359f5717a6a35f8f)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit cc420f430b1dafd9ca944bea259a564aaab34595)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:01 +00:00
Oleksandr Andrushchenko
fd93e26f0d bitbake: fetch2: Fix missing logger import in repo fetcher
After cleaning deprecated API usage repo fetcher is missing
logger as it was indirectly imported via deprecated bb.data.
Fix this by importing logger directly.

Fixes: 9752fd1c10b8 ("fetch2: don't use deprecated bb.data APIs")

(Bitbake rev: 7ae321a9ede9fb0ee1a0794aa22815a593d1568d)

Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f8e027d26603db2f1fe757dca767ea35d95174c7)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Alexander Kanavin
15542ff2b3 gstreamer1.0-plugins: disable introspection on mips64
The failure is weird and difficult to diagnoze, so disable the
introspection for now:

qemu-mips64: error while loading shared libraries: .../recipe-sysroot/usr/lib/libgthread-2.0.so.0: ELF file data encoding not little-endian

Note that it shows up only for one specific library (gstaudio), and only
on mips64. Introspection data for other libraries is generated just fine.

(From OE-Core rev: bc6bb09150835c841cf27c88f388ac5796a317a2)

Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 4cfe09598c1ec1ffd108acdfd0f4cce1b8688895)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Juro Bystricky
b472addc93 sudo: improve reproducibility
Delete various build host references from the internally
generated file sudo_usage.h. The references get compiled into
executables, which leads to non-reproducible builds.
The removed references (configure options) were only used as part
of the sudo "usage", and even then only when ran as root.

(From OE-Core rev: eb3360c13fe4e803621f5b06e8d8a09211fd7da4)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 090eb9efdb2204673b1d569582813ea8860c8570)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Juro Bystricky
2f07e71a9e x11perf: improve reproducibility
Remove build host refeences.

(From OE-Core rev: 95f9a8ba58c6b790dd9aeea4e88148fbcdd7500c)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 7eedafd32a24cfdc33d791b2bf5a5d5c36c48e2f)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Juro Bystricky
66a0b5b550 grub-efi_2.02.bb: improve reproducibility
Remove several build host references from modinfo.sh files.

(From OE-Core rev: 01fe3d3cf0bde71b566f3734941db60ffc9dd9b7)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 6e4182b7c540e22f25ea8bfd16b0e2b2c8eb9f82)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Jackie Huang
adaefc1880 libnsl2: fix installed-vs-shipped QA issue
Fix the installed-vs-shipped QA issue:
| WARNING: libnsl2-1.0.5+gitAUTOINC+dfa2f31352-r0 do_package: QA Issue:
  libnsl2: Files/directories were installed but not shipped in any package:
  /usr/lib64/nsl/libnsl.a

(From OE-Core rev: b1806a257c0af1c69a81b3f855f6d165162257ae)

Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 2e6636b23dde2c1b547f98373a2f49e617c37a9f)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Joe Slater
1a2fb23f56 nss: pay attention to CFLAGS
nss ignores CFLAGS so we suggest them via CC.

(From OE-Core rev: 7484c62f88311dbc1e9ade524af31d04e6035bf4)

Signed-off-by: Joe Slater <jslater@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 95b65eefe7eb001752a37d1015bbf9be63bfd6bb)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Ming Liu
937beb5d94 qemu.inc: let linux-yocto-rt also provide nfs server kernel module
In case some users want to use linux-yocto-rt as the preferred kernel.

(From OE-Core rev: e0b8eafaf378571a99b07c559d07f9af36db791e)

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit bb0e574d3c74b6cd2d7e41933e0e28c91f0a411b)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Andre McCurdy
45139bd079 systemd: fix duplication of CACHED_CONFIGUREVARS
Fix historical duplication that appears to have been caused by
merging two independent fixes for the same issue:

  http://git.openembedded.org/openembedded-core/commit/?id=294adc0907a359d9c0ad260823188145aab294ad
  http://git.openembedded.org/openembedded-core/commit/?id=b30d7b1b97ffd1d44083d93ed0e572d80fcebc54

Also minor reformatting of EXTRA_OECONF values.

(From OE-Core rev: 0786e64061c79cea605ba5f231ac6e07999fa31b)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 94bc5910ebdf7bb4677fa06150ba1219295e5eda)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Andre McCurdy
8c56b0b2f4 systemd: use consistent indenting and coding style in do_install()
Make the polkit fixup etc at the end of do_install() more consistent
with the rest of the function. Also indent do_install_ptest() with
tabs instead of spaces to make do_install_ptest() consistent with
do_install().

(From OE-Core rev: cfd4e3adce3f52bc00a73ef8af0336c9a9f893cc)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 7a188e646a7a713ec5eab73580de624dc61f2936)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Andre McCurdy
f04d6842d3 systemd: sort PACKAGECONFIG options
Also fix some minor formatting inconsistencies (extra spaces or
commas etc). No functional changes.

(From OE-Core rev: 1f3928e9027ed35c562db76e0e936a4b89e3fbdd)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 4caf480c8d824575e970ec8ba15e4ee221166954)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Andre McCurdy
c889bffda2 systemd: use consistent approach for musl PACKAGECONFIG options
Consistently use PACKAGECONFIG_remove_libc-musl to disable options
which are not compatible with musl.

Also sort the default PACKAGECONFIG list.

(From OE-Core rev: 84a4a5bd4a80a1336282d6c10c333673bbd3280c)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 8fb362d90628d0dbc9a5073a0d75296eab569d44)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Andre McCurdy
1655dfeffc systemd: remove musl specific control of ldconfig PACKAGECONFIG
The ldconfig PACKAGECONFIG option is controlled by the ldconfig
distro feature - which is now disabled by default when building for
musl.

(From OE-Core rev: a6e92dd1565d99f539f59aafbb99aa2a7cb48eda)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 84c841c5b4d3ae753c377f5bdbda19281c771f60)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Andre McCurdy
ebf2523922 tclibc-musl.inc: disable ldconfig distro feature
Musl has no support for ldconfig, so ensure that the corresponding
distro feature is disabled when building with musl.

(From OE-Core rev: 73d5475af8c8aa655a80bf38d9fc788078a70883)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit baacd7ea99265f5493d2452b173a12def92f6202)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Robert Yang
7de56ebc2a runqemu: print command search result when not found
This makes debug easier.

(From OE-Core rev: b99ba567cd8089a9a3ca01704f6ba6c42d390e9f)

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit a453639e19fb2a9f9fb63fddd0b3ee26c0116d91)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Richard Purdie
d0640da88e runqemu: Also specialcase resolution of '.' to the file's location
Similarly to handling "../", handle "." to resovle to the qemuconf
file's current directory.

(From OE-Core rev: 9870247d0dc33357988d9636c8ff8db35490752e)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 33418ed064fe9cff5b4803f09135a81d9170c189)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Saul Wold
776fb31844 image_types: Add debugging code to ext4 fs creation
We have seen a small number of issues with ROOTFS_SIZE not getting
computed correctly, resulting in a failure in the mke2fs processing
and populating the resulting new filesystem.

This information should help us to reproduce [YOCTO #12304]

(From OE-Core rev: 0abd3c25cb2a9a9be9dc650a1600d3902d5779a9)

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 3a72f6783e142d53d19b37811a854d08d32485ab)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Richard Purdie
80ed9207a7 qemurunner: Simplify binary data handling
I have concerns that bad timing of the flow of data from the logger
might corrupt the output due to the way binary strings are handled
in qemurunner.

This simplifies the code to do the same thing it did before but much
more safely.

(From OE-Core rev: 20bc247316ab915465a4b1add6d09b48e07202ac)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 1e87283e92a2765bb5d54d17138b208bc395953b)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Richard Purdie
1e4d4762b1 qemuboot: Improve relative path handling
qemuconf files are currently written relative to TOPDIR. What
makes more sense is to write paths relative to the location of the
file. This makes moving them around and decoding the end paths in
runqemu much easier.

The effect of this should allow less use of bitbake to determine
variables and allow us to simplify runqemu.

(From OE-Core rev: e790aecfde4199cf9b658338900ad9a87cc1094f)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 55a0028a961c0ad3c2e5729a9e3919cbbf256fe1)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:24:00 +00:00
Richard Purdie
968145b24e runqemu: Improve relative path handling in qemuconf files
If a variable starts with "../", its likely its a path and we want to
set it to an absolute path relative to the qemuconf file.

This means we don't have to use bitbake as often to figure out variables.

(From OE-Core rev: 61c449857f056d7c6c29530aa11bf8353b113638)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit dfc7940900d798aa47716288338107e1d46a3972)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Richard Purdie
3c28d31fed qemu: Add patch to avoid qemuppc boot hangs
qemuppc boots are occasionally hanging on the autobuilder. This adds a
patch which fixes the issue in local testing. Its being discussed with
upstream qemu.

(From OE-Core rev: 8834117a1cbde26d0a36691a2e4635afaa3b6ea7)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 87719e35db08b21cd43ab3ebd72f4567ca0fdc65)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Richard Purdie
65d09a7d1e runqemu: Ensure we process all tap devices
The regexp in the script misses some tap devices, e.g. we see output like:

runqemu - INFO - Acquiring lockfile /tmp/qemu-tap-locks/tap25.lock failed: [Errno 11] Resource temporarily unavailable
runqemu - INFO - Acquiring lockfile /tmp/qemu-tap-locks/tap26.lock failed: [Errno 11] Resource temporarily unavailable
runqemu - INFO - Acquiring lockfile /tmp/qemu-tap-locks/tap27.lock failed: [Errno 11] Resource temporarily unavailable
runqemu - INFO - Acquiring lockfile /tmp/qemu-tap-locks/tap28.lock failed: [Errno 11] Resource temporarily unavailable
runqemu - INFO - Acquiring lockfile /tmp/qemu-tap-locks/tap40.lock failed: [Errno 11] Resource temporarily unavailable
runqemu - INFO - Acquiring lockfile /tmp/qemu-tap-locks/tap41.lock failed: [Errno 11] Resource temporarily unavailable

What happened to tap29 to tap39?

The issue is was we were missing devices with '0' in the number,
like "10:" and so on in the output from "ip link".

(From OE-Core rev: ec1481f7ad6f2b3d1420027327510bec94dd66a8)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 6447697a48e3b693ee38806bc2ba07c2a65c2bc8)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
André Draszik
311245d89f base: add automatic dependency on xz-native for .txz SRC_URI
.txz is .tar.xz, so add it, as this can actually be found in the
wild.

(From OE-Core rev: 866ead1d900433e39772973b4b31b7408ed8a215)

Signed-off-by: André Draszik <git@andred.net>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 58af8c2e4bd17692274fc5a6ac8f8af84319fec6)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Joe Slater
0845fa12b8 net-tools: correctly set COPTS and LOPTS
COPTS will be ignored if it is defined in the environment.
It must be passed directly to make.  To be consistent, we
pass LOPTS that way, too.

(From OE-Core rev: b3fda1e35c399060838620d2c96c22cdbbd95c96)

Signed-off-by: Joe Slater <jslater@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit dede6d3d37aab72ae897c3709d21108fa75f6673)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Paul Eggleton
2d9aecf044 recipetool: create: fix failure handling included dicts
If a setup dict in a python setup.py file pulled in the contents of
another dict (e.g.  **otherdict), then we got an error when mapping
the keys because the key is None in that case. Skip those keys to avoid
the error (we pick up the values directly in any case).

A quick reproducer for this issue:

recipetool create https://files.pythonhosted.org/packages/source/p/pyqtgraph/pyqtgraph-0.10.0.tar.gz

(From OE-Core rev: 49b2d571da88fb2afce71835276523ed3538d31f)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit ae62a9953e219df5147ed4a5ae3f4163d51cff28)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Saul Wold
c32f44ebf5 linux-firmware: Remove iwlwifi-8000C-19 SRC_URI
Since it's been removed from the upstream repo and not fetchable
remove it here.  The newer firmware supports the device correctly.

(From OE-Core rev: 665a50f51d94c8a1f2ecbbf3fb0da5054c3bcb37)

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 8b8c40bdbd09ddd1409dc30e04ef847f6a15f109)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Ovidiu Panait
c6d473f460 icu: CVE-2017-14952
Double free in i18n/zonemeta.cpp in International Components for Unicode
(ICU) for C/C++ through 59.1 allows remote attackers to execute arbitrary
code via a crafted string, aka a "redundant UVector entry clean up
function call" issue.

Reference:
https://nvd.nist.gov/vuln/detail/CVE-2017-14952

Upstream patches:
http://bugs.icu-project.org/trac/changeset/40324/trunk/icu4c/source/i18n/zonemeta.cpp

(From OE-Core rev: 16006869e30395dd758a1797e324567ec4f8e074)

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 4ff12a8bf2b8d094085afbe8fa1d43f781cfa79d)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Chen Qi
7104d48590 gcc: backport patch to fix miscompilation on mips64
Backport a patch to fix miscompilation on mips64.

We've observed strange behaviour of `systemctl status <xxx> on qemumips64.
The output of the command is like `systemctl show <xxx>', which is incorrect.

The problem is due to the miscompilation of gcc for mips64 platform, thus
backporting patch from upstream to fix this problem.

[YOCTO #12266]

(From OE-Core rev: 6264b4afe6962d37eeb918e062568dee811ef231)

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit cfa13e5c756849820644d86d1882602649db6a9c)
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Khem Raj
d164445477 gcc7: Fix unaligned STRD issue on ARM
Backport
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82445

Fixes [YOCTO 12297]

(From OE-Core rev: ae99f18ec6dc45723d969e749ad3f8ec36db1cf4)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Excluding GCC 6.3 as it is not affected.
per https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82445#c5

Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Otavio Salvador
7e0b00fd12 lttng-modules: Upgrade to 2.9.5 release
This upgrade is critical as it fixes the support for Linux 4.14 LTS kernel.

The changlog is:

2017-10-05 LTTng modules 2.9.5
	* Fix: update block instrumentation for 4.14 kernel
	* Revert "Fix: update block instrumentation for kernel 4.14"

2017-10-03 (National Techies Day) LTTng modules 2.9.4
	* Fix: version check error in btrfs instrumentation
	* Fix: update btrfs instrumentation for kernel 4.14
	* Fix: update writeback instrumentation for kernel 4.14
	* Fix: update block instrumentation for kernel 4.14
	* Fix: vmalloc wrapper on kernel < 2.6.38
	* Fix: vmalloc wrapper on kernel >= 4.12
	* Add kmalloc failover to vmalloc
	* Fix: mmap: caches aliased on virtual addresses
	* Fix: update ext4 instrumentation for kernel 4.13
	* Fix: Sleeping function called from invalid context
	* Fix: sched for v4.11.5-rt1
	* Fix: handle missing ftrace header on v4.12

This also removes the previously backported patches as they are part
of 2.9.4 release and the missing fix is part of 2.9.5 release.

(From OE-Core rev: 56d01657934fe6e9e6c547fd58447c6a99a0779b)

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Radek Dostál
25c0d7d891 sbc: fix license
sbc library itself is licensed under LGPLv2.1 or higher as mentioned in
sbc/sbc.h or any other file in sbc directory.

sbc test applications are licensed under GPLv2 or higher as mentioned in
src/sbcenc.c or any other file in src directory

Reported-by: Vladimir Koutny <vladimir.koutny@streamunlimited.com>
(From OE-Core rev: 39193c6b30d34fd4c07e1a36581a1bd94fd76b29)

Signed-off-by: Radek Dostál <radek.dostal@streamunlimited.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Radek Dostál
7df22af792 sbc: move examples to their own package
Suggested-by: Ross Burton <ross.burton@intel.com>
(From OE-Core rev: 096f0aa642ba469699c10dc4a181d62c0bc5e7b9)

Signed-off-by: Radek Dostál <radek.dostal@streamunlimited.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Patrick Vacek
351192c314 ca-certificates: Add /etc to SYSROOT_DIRS
For recipes that depend on native ca-certificates.crt, /etc should be
added to the list of directories that automatically populate the
sysroot, otherwise the file may not be there.

(From OE-Core rev: 704e0392809b8a062433f6a4e5c5980c34b47dce)

Signed-off-by: Patrick Vacek <patrick@advancedtelematic.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Khem Raj
fe51ddba06 go: Fix build with PIE on musl
(From OE-Core rev: d6fcf91c06a3d118e8741273fac6903100141db4)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Awais Belal
c8730962a4 dhcp: fix build issue with libxml2 support
A missing case breaks the build when libxml2 is
required and found appropriately. The third argument
to the function AC_SEARCH_LIB is action-if-found which
was mistakenly been used for the case where the library
is not found and hence breaks the configure phase
where it shoud actually pass.
We now pass on silently when action-if-found is
executed.

(From OE-Core rev: cc4e419eea46e9cdaa321aff4c37fdf8bb74b883)

Signed-off-by: Awais Belal <awais_belal@mentor.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Dan Dedrick
1e944f79b4 dhcp: use ${BPN} instead of ${PN} for user
${PN} will include additional prefixes, such as lib32-, which are not
actually a part of the user that is being added. This was creating an unused
user and possibly missing the actually intended user. By using ${BPN} this
will remove all additional extra information and consistently be "dhcp".

(From OE-Core rev: 69d1a48b403d588516cf149559169ee5a0d44b67)

Signed-off-by: Dan Dedrick <ddedrick@lexmark.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Andre McCurdy
994e3674a8 package_ipk.bbclass: handle only whitespace in PACKAGE_EXCLUDE
If PACKAGE_EXCLUDE is constructed using _append then it's possible
that the final value will contain only a space. Currently that
results in build failures due to an invalid opkg command line.

(From OE-Core rev: 809fda77324c5d4949b6490412f43d4bb95e4a94)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:59 +00:00
Peter Griffin
69490b4280 initramfs-live-install: Add aarch64 arch to COMPATIBLE_HOST.
So that we can use this on aarch64 with HiKey board.

(From OE-Core rev: 9260c60612048ccbb78b419f71328d4f91f1f83c)

Signed-off-by: Peter Griffin <peter.griffin@linaro.org>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Andre McCurdy
e27fd333df base.bbclass: increase indent in get_layers_branch_rev() and buildcfg_vars()
Although it may not appeal so much to users to prefer 80x24 consoles,
the general trend is for screens to get bigger and the current output
has started to look a little cramped on a modern HD display.

Increasing from 17 to 20 is obviously arbitrary, but does give enough
space to cleanly display layers such as "meta-nodejs-contrib" and
"meta-virtualization" while still keeping the output fairly compact.

(From OE-Core rev: 65f6fba05b7a28a6af048e79f8355ffc37acd039)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Paul Eggleton
216a839e1b lib/oe/recipeutils: fix line splitting in patch_recipe_*
If a value was split over multiple lines (e.g. as SRC_URI usually is)
then we were inserting the value as one item in the lines list with
newlines between each line. There's nothing wrong with this if you're
writing the list out to a file, but if you want to generate a patch (as
patch_recipe_file() will do if the patch parameter is set to True) then
the diff output looks a bit odd. Split the value before adding it to the
lines list to resolve this.

(From OE-Core rev: dbf68220e451a43830fe680c86b34b9bd127cad3)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Paul Eggleton
bd884dd998 lib/oe/recipeutils: fix find_layerdir() to return absolute paths
find_layerdir() should really return absolute paths, so make it do so.
This fixes devtool finish not deleting files it should do after devtool
upgrade if the specified path is relative, since the devtool finish code
was assuming that find_layerdir() was returning an absolute path.

Fixes [YOCTO #12318].

(From OE-Core rev: 8d028508bfd68ad272739cab5495811927936ef2)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Paul Eggleton
e36cf9e621 recipetool: ignore incidental kernel module source
If the source tree happens to contain a kernel module as an example, a
test or under a "contrib" directory then we shouldn't be picking it up
and making the determination that the entire thing is a kernel module.

An example that triggered this is zstd, which ships a kernel module
under contrib/linux-kernel:

  https://github.com/facebook/zstd

(From OE-Core rev: 5c89bd0db1b327483f674802740ff21b909e0876)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Paul Eggleton
611e4b43d8 recipetool: pass absolute source tree path to plugins
We shouldn't be passing a relative path to the plugins if that's what's
been specified on the recipetool command line.

(From OE-Core rev: 821742f48723a66fdafe5406bb57188b2f88889a)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Khem Raj
d4e3893e2d systemd: Fix build with musl/mips64
(From OE-Core rev: 5210f8f64ed65a677a7a017878783642de886249)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
99c18e36e2 oeqa/runner: Pass the value of buffer, don't force to True
The value could be False in which case we should pass that through.

(From OE-Core rev: 5b4b7bfe33630d73b5b53fc754cd45563fcbfd4d)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
fbddd3917f oeqa: Markup further tests for stdout/stderr buffering
This further cleans up the output of oe-selftest so that runqemu output
is hidden unless tests fail.

(From OE-Core rev: 22f224965ac93da0b37affc4998fc0644f14462d)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
5481891748 testimage: Ensure full logs are shown for failures
Currently, the fact an error message is shown means the rest of the
task logs are suppressed. In this case we don't want that as it hides
the real errors and useful information. Therefore override this behaviour.

(From OE-Core rev: c0af4e9a0666de64c6a8823cdd3fbea579a3fb67)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Alexander Kanavin
18b51a13af maintainers.inc: add Otavio Salvador for go-dep
(From OE-Core rev: 6e45eac3686cb749a6690149dbfca9925786ab9e)

Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Alexander Kanavin
e46fa69897 maintainers.inc: add Khem Raj for libmnl
(From OE-Core rev: ed959f455604975abccb3c2c3ce98f26234dd4f7)

Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Alexander Kanavin
7d934ff315 gtk-doc.bbclass: correctly make the list of directories with shared libraries
Previously it was working only if only one shared library was found, and
broke when there were several.

(From OE-Core rev: 9bdfc39d431c729740025ce5b711d7b5684df800)

Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
2f6cffd605 oeqa/target/ssh: Drop command/output logging to debug level
This ensures the console is kept clear of confusing output but that
the main logs contain good debugging information.

(From OE-Core rev: 3727fae1e420a60ef8c62da546e1065045b163ff)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
ed4708db31 oeqa: Clean up logger handling
The logger handling in oeqa was confused at best. This patch:

a) Passes in a logger through various qemu runner pieces
b) Uses that logger consistently in the code
c) Creates a logger for QemuRunner outside the bitbake namespace
   meaning we don't conflict with the tinfoil logging changes

The result of this is more consistency. For runtime tests in testimage,
the logs always contain the debug info, nothing is shwon on the console.
For the oe-selftests, logs are intercepted and only shown if the test
fails.

(From OE-Core rev: ba8babc45141891d0624f9a181a580fa416e87ec)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
8d53ceebaf testimage: Pass the logger into OERuntimeTestContextExecutor.getTarget()
I have no idea why we didn't do this but it means the code has nowhere
to log to unless we do this. This means we can then use the logger
to log data to the task logs.

(From OE-Core rev: 1054965a2d44df2617127c0c47e34adc62c1bf4d)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
f97450203f oeqa/qemurunner: Use logger.debug, not logger.info
Bitbake logs info messages to the console. These messages are really
there as debugging information. At the debug level, they will be shown
in failure logs and in the task logs but not on the console which
is what we want in this case.

(From OE-Core rev: 5c1cdd4f3ea59a202fff853e0390b9aa5859dc74)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
572b9c54a1 oeqa/targetcontrol: Drop unused get_target_controller function
This funciton appears completely unused, drop it.

(From OE-Core rev: 31ccc70c4ea58e3781ea14eb534e00e9e06e131a)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:58 +00:00
Richard Purdie
3f6fbed1e1 oeqa/runqemu: Only show stdout/stderr upon test failure
In general we don't need to see the output of runqemu however if it fails
we do. Use the buffer option that already exists in TestResult but allow
us to trigger it on a per test basis.

(From OE-Core rev: 1826a8cb8cf4c51307003617864d2ffab273eb0b)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Richard Purdie
292c2ae888 qemurunner: Ensure logging handler is removed
If we don't remove the handler we end up with duplicate log messages
which is undesireable.

(From OE-Core rev: 39e6194615b139e2b772084641940fffa2c9380f)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Khem Raj
539a852504 systemd: Fix build on musl
Add needed patches for portability across glibc/musl
enable systemd on musl too

Disable utmp,ldconfig,nss,resolved,localed for musl
which is not supported on musl

(From OE-Core rev: 5d85e01555e84dbb82c7671a5dfbe15d5e153a71)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Juro Bystricky
10d0ace274 e2fsprogs-ptest: improve reproducibility
Remove several Makefiles containing build host references.
While at it, also remove some additional files not needed for
testing.

(From OE-Core rev: 8ffafc2bc1c4f4d13295d56013029e10bb536d25)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Markus Lehtonen
852c71956b oe-build-perf-report-email.py: add images as MIME objects
Add images as separate MIME objects instead of directly embedding images
in the html (as base64 encoded pngs). This makes the emails better
suited for certain email servers/clients.

(From OE-Core rev: fbbc84d9919d9cc18add03fc617637330721f5d9)

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Juro Bystricky
254013ce5f gobject-introspection: improve reproducibility
Remove cross-compiler wrappers from the package, these contain numerous
build host references.
The wrappers are only needed for cross-compiling.

[YOCTO #11705]

(From OE-Core rev: 60584b9047d844d6e5394338c133e8dab954e09d)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Tom Rini
de78322f16 wic: Update canned-wks for systemd to use UUID everywhere
With systemd, the mounting of the swap partition is handled via systemd
and will mount it, regardless of if PARTUUID is parsed or not.  systemd
has a runtime dependency on util-linux-mount so PARTUUID for regular
mount points will be handled correctly.  Make all partitions that we add
to the image make use of UUIDs for maximum portability.

(From OE-Core rev: 8bf0e3ee85b22fdd4d8940878b4d99cccff1efd5)

Signed-off-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Tom Rini
61f319db67 wic: When using --use-uuid make sure that we update the fstab with PARTUUID
When we have been told to use the UUID we should also update the fstab
to make use of PARTUUID instead of hard-coding the device in question.
This will make the resulting image much more portable.

(From OE-Core rev: 1d1fdcaf8702110783f2003cd3f8ae96c99a6d72)

Signed-off-by: Tom Rini <trini@konsulko.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Martin Kelly
88d92fb301 systemctl-native: add target.wants to target regex
The regex for acceptable systemd WantedBy/RequiredBy targets does not include
target.wants, so a line like this:

WantedBy=multi-user.target.wants

gets silently ignored, even though it works fine on a real system.

(From OE-Core rev: 8407100061e56346cafa06cc60eb63103d166bf8)

Signed-off-by: Martin Kelly <mkelly@xevo.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Ross Burton
ef6babd638 dpkg: use snapshot.debian.org
(From OE-Core rev: afd36e0d3eb7d7a68199572bb841b1c7078983c3)

Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Juro Bystricky
f8c7eff81d curl_7.54.1.bb: improve reproducibility
Improve reproducible build of curl-dev and curl-dbg packages.

curl-dev: Correctly remove build host references from curl-config
curl-dbg: Do not generate time stamps in files generated by mkhelp.pl

(From OE-Core rev: 4b5bfbf0f474d2657c1ed54a2ff00502d5f419d9)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Chen Qi
8d3edc9821 systemd: remove useless options for mips4
Looking back the history, we had problem with systemd on qemumips64
which is also related to compilation flags. We solved that by using
tweaking FULL_OPTIMIZATION for mips64 to have "-fno-tree-switch-conversion
-fno-tree-tail-merge".

Now systemd has been upgraded to 234, and we don't have the above problem
any more, thus removing these flags.

(From OE-Core rev: a7b30e604ccc74cab65e3ac6a4fb08f68abc983e)

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Joe Slater
8d706de096 rpm: remove --sysroot from macros on target
We do not want to specify --sysroot when defining __cc
used on a target.

(From OE-Core rev: 328201fe185b948eacceceefd9d2d2d0ba1ab676)

Signed-off-by: Joe Slater <jslater@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Ming Liu
59cbf69299 libsolv: fix a kernel-devsrc installation issue
We encountered a problem when installing kernel-devsrc package on a
intel-x86 target, as follows:
$ dnf install kernel-devsrc
| Installing : kernel-devsrc-1.0-r0.0.intel_corei7_64 1/1
| failed loading RPMDB
| The downloaded packages were saved in cache until the next successful transaction.
| You can remove cached packages by executing 'dnf clean packages'.

It can be fixed by increasing MAX_HDR_CNT and MAX_HDR_DSIZE in libsolv
per test.

(From OE-Core rev: 2987ec994705abb7dd18738ba1719aef9d72049a)

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Juro Bystricky
02f64e5db8 grub_2.02.bb: improve reproducibility
Remove several build host references from modinfo.sh files.

(From OE-Core rev: cf4abc5eebdb5f88fefe3fb633bfdc1d2a94f9e3)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Ross Burton
c76a25b6ac python: add PACKAGECONFIG for Berkeley DB module
The bsddb module is deprecated and requires an old version of Berkeley DB that
some may be unhappy with even shipping, so expose a way to disable the module.

(From OE-Core rev: 25460ccdebaa6ff29ec051a0489a51b19c34e79c)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Ross Burton
1002359e5e db: change types to avoid headers changing between architectures
Triggered by looking at why Python doesn't find db.h (because it greps db.h for
a regex, and db.h is actually a oe_multilib_header wrapper) I realised that the
only reason we have to oe_multilib_header db.h is because one typedef is
different between 32-bit and 64-bit architectures.

However, the typedef is for a 64-bit integer so instead of using long (64-bit)
or long long (32-bit), just use int64_t.  Some of the overly complicated
configure tests need to be deleted after this change but that is safe as we're
building in a controlled environment and can assume int64_t exists.

With this done the header doesn't change between architectures, and it doesn't
need to be wrapped by oe_multilib_header.

(From OE-Core rev: 6c9ffa50d00a55122ed861e1818186035fd89715)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Chen Qi
3eca58ca70 bash-completion: remove rfkill file that util-linux provides
Remove the rfkill bash completion file that util-linux provides
to avoid conflicts.

(From OE-Core rev: 1657f98528e6ea70e77b5f8cbe85b8ce970c3535)

Signed-off-by: Chen Qi <Qi.Chen@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Erik Botö
aa6e825bf0 sshcontrol.py: in copy_to() always use scp
The current implementation is broken when the localpath is a link.
Then only a symlink would be created on the target, instead of copying
the actual file.

[YOCTO #11524]

(From OE-Core rev: a9d446d9c42a67109ae87a156ae43dcbb0f56e1e)

Signed-off-by: Erik Botö <erik.boto@pelagicore.com>
Signed-off-by: Stephano Cetola <stephano.cetola@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:57 +00:00
Erik Botö
2ef0fd2364 masterimage.py: rename parameter "params" in start() to "extra_bootparams"
This matches how it is called, and how it is named in qmeu target.

[YOCTO #11524]

(From OE-Core rev: 4e376d0658fe8315cfcca927ea275e1260bcc02f)

Signed-off-by: Erik Botö <erik.boto@pelagicore.com>
Signed-off-by: Stephano Cetola <stephano.cetola@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Erik Botö
ee7f665f0a masterimage.py: fix stop()
The stop() function is called in the context of the masterimage,
so self.master should be used instead of self.connection which is
undefined at that time.

[YOCTO #11524]

(From OE-Core rev: 1871d61b75f2fbc0df1368960b7746371fd875f5)

Signed-off-by: Erik Botö <erik.boto@pelagicore.com>
Signed-off-by: Stephano Cetola <stephano.cetola@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Erik Botö
ab31d76bc8 masterimage.py: fix issue with calling reboot on masterimage/DUT
On systemd systems calling reboot over an ssh connection doesn't
return as expected causing an exception, therefore wrap the call
to reboot in order to avoid this issue.

Also sync the filesystems before rebooting cause otherwise, it will be
done as part of the reboot and could take a very long time and testimage
will fail to access the machine. This issue was observed consistently with
one of our rootfs at Pelagicore.

[YOCTO #11524]

(From OE-Core rev: 6f5c4a8e07f8cdf3f6352e9e85d7376937bb32d2)

Signed-off-by: Erik Botö <erik.boto@pelagicore.com>
Signed-off-by: Stephano Cetola <stephano.cetola@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Ross Burton
dd03b7399b selftest/imagefeatures: add basic test for useradd-staticids
(From OE-Core rev: cb20382d85f5758ac9fb7cd7df085d07005f1337)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Peter Kjellerstedt
55d21c7fb6 oeqa/core/loader: Make _built_modules_dict() support packages correctly
For test modules in a package, e.g., oelib.license, running
`oe-selftest -r oelib.license` or `oe-selftest -r
oelib.license.TestSimpleCombinations` would fail with a message that
the specified test cases could not be found. This was due to the
parsing in _built_modules_dict(), which failed to distinguish between
<package>.<module>.<class> and <module>.<class>.<testcase> and treated
both cases as the latter.

(From OE-Core rev: 8d5eb5498975fd0d73ac20e2c4d938c1f85317d7)

Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Ross Burton
4e28c8d6b7 oeqa/selftest/runtime_test: use console in postinst_rootfs_and_boot
Use a console login not SSH for simplicity.

(From OE-Core rev: 35ecbe834290f346a8acf1e926e3104a8ac6edb0)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Ming Liu
18941419c8 image.bbclass: let do_image depend on do_populate_lic of EXTRA_IMAGEDEPENDS
The licenses of EXTRA_IMAGEDEPENDS recipes are being referenced in
image postcommand write_deploy_manifest, but a dependency is missing
between do_image and do_populate_lic of EXTRA_IMAGEDEPENDS recipes,
this leads some license files not present when write_deploy_manifest
runs, hence will cause build errors.

Fixed by letting do_image depend on do_populate_lic of
EXTRA_IMAGEDEPENDS recipes.

(From OE-Core rev: 2aa357501f74163f49c62db8660b7a132b5d0d46)

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Luca Ceresoli
da8f32a3bb externalsrc: fix ExpansionError if the source dir does not exist yet
The externalsrc class code assumes that the source directory
(EXTERNALSRC) exists before bitbake is called. Otherwise do_configure
will fail obviously since externalsrc does not fetch anything.

Commit 3ca6085729 ("externalsrc: Handle .git not being a directory")
changed this behaviour. Now on a missing EXTERNALSRC directory we get
a bb.data_smart.ExpansionError during _parsing_, way before
do_configure can be run.

This new behaviour creates two problems:

 * First, there error message is very cryptic (and it's hard to
   provide a better message since no task is ever run):

     ERROR: ExpansionError during parsing /<...>/<...>.bb
     Traceback (most recent call last):
     bb.data_smart.ExpansionError: Failure expanding variable do_compile[file-checksums], expression was ${@srctree_hash_files(d)} which triggered exception FileNotFoundError: [Errno 2] No such file or directory: '<...>'

 * Second, this prevents creating a class based on externalsrc that
   automatically fetches the code in EXTERNALSRC before do_compile
   runs.

Fix both problems by simply calling git with '-C ${EXTERNALSRC}'
instead of calling git inside the non-existing directory. This changes
from a bb.data_smart.ExpansionError to a
subprocess.CalledProcessError, which is in line with what's actually
going on: git is telling us it can't find the git dir.

Also remove a comment that does not apply anymore.

(From OE-Core rev: 390e4cc74ef9b578e1cced21444247d975610154)

Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
Cc: Joshua Watt <jpewhacker@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Igor Romanov
e6fe54ce38 image.bbclass: Fix 'vardepsexclude' mechanism for image_cmd_${FSTYPE}
Current mechanism doesn't allow to use any non-determenistic variable, except 'DATE' and 'DATETIME', inside IMAGE_CMD_${FSTYPE} prototype.

Passing 'vardepsexclude' values from IMAGE_CMD_${FSTYPE}, so users will be able to avoid taskhash mismatch problems.

(From OE-Core rev: 92bd01eba742e2bcb146ca24a1443af833f5a2ba)

Signed-off-by: Igor Romanov <i.romanov@inango-systems.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Patrick Ohly
23ee931b9d useradd-staticids: explain how to fix the the problem
When a distro uses useradd-staticids.bbclass and some developer
unfamiliar with the static ID mechanism tries to add a recipe which
needs new IDs, the resulting error or warning is typically not
something that the developer will understand.

Even experienced developers do not get enough information. They first
must find out whether the missing ID is for a system user or group,
then locate the file(s) in which the ID could be added. Both of this
is now part of the message:

ERROR: .../meta/recipes-extended/cronie/cronie_1.5.1.bb: cronie -
cronie: system groupname crontab does not have a static ID defined.
Add crontab to one of these files: /.../conf/distro/include/my-distro-group

The case that no file was found is also handled:

ERROR: .../meta/recipes-extended/cronie/cronie_1.5.1.bb: cronie -
cronie: system groupname crontab does not have a static ID defined.
USERADD_GID_TABLES file(s) not found in BBPATH: files/group

It would be nice if the error message could also list the range in
which a new ID needs to be allocated, but /etc/login.defs isn't
available at the time of creating the message, so that part is still
something that a developer needs to know.

(From OE-Core rev: 29c12b147ef85db4ebb0f86a911db5f90ae11c0a)

Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Patrick Ohly
e4f256000f useradd-staticids: skip recipes without static IDs
When enabling useradd-staticids.bbclass, one has to define static IDs
for all recipes in a world build, otherwise those without static IDs
generate parse errors or warnings, depending on USERADD_ERROR_DYNAMIC.

Defining unused IDs is a lot of work and clutters the passwd/group
file of a distro.

Distros which want to avoid this can now set USERADD_ERROR_DYNAMIC =
"skip" and recipes which would have triggered a message then silently
get disabled. Only trying to build them shows the error message:

$ bitbake apt
...
ERROR: Nothing PROVIDES 'apt'
ERROR: apt was skipped: apt - apt: username _apt does not have a static ID defined.

(From OE-Core rev: a2766b99a763874d469d34b84109553f68f5aaac)

Signed-off-by: Patrick Ohly <patrick.ohly@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Andre McCurdy
fbc12e0794 feature-arm-vfp.inc: drop unnecessary extra space from TUNE_CCARGS
The trailing space added to TUNE_CCARGS when appending -mfpu=XXX is
unnecessary and leads to a double space in the final value.

(From OE-Core rev: 0d5bbaf5fe66bd93e8d8cbf78834f562d90d9dca)

Signed-off-by: Andre McCurdy <armccurdy@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Yi Zhao
c45bdab6b9 maintainers.inc: update maintainership
Reassign Dengke's recipes to Yi Zhao.

(From OE-Core rev: 0c8ef5e4d579ca0d097bb6ab8312ba5b7eb9e213)

Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Ross Burton
a97fecb3bd oeqa/selftest/runtime_test: fix postinst_rootfs_and_boot
This test overrides IMAGE_FEATURES but failed to include package-management,
which is essential for postinsts to work under dpkg.

(From OE-Core rev: 5e68e80a45c29dd7b337d9500733b18a19cd930b)

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Paul Eggleton
87577b8a53 lib/oe/sstatesig: fix wildcard matching wrong task signature files
With a '*' as a wildcard for the signature here we can also match a
portion of the task name with the result that we may match a sigdata
file for the wrong task. Luckily the signature is always the same
length - 32 characters - so we can simply use 32 '?' characters instead.
(A regex would have been another alternative, but the wildcard should be
effective and I felt like a regex would complicate the code more than
this solution).

Fixes [YOCTO #11763].

(From OE-Core rev: 8565391a4ebb574141b5d09bff710fc02c73ba34)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Robert Berger
5599639b65 nativesdk-packagegroup-sdk-host: remove redundant LICENSE
*) packagegroup class sets a default value for LICENSE
*) usually packagegroups don't contain a LICENSE
   and if they do it's many times a copy/paste and doesn't
   reflect the license of the packages included in the
   packagegroup

(From OE-Core rev: aaeb56d2f9193bdfb108f20e9ae2bbb4505815c0)

Signed-off-by: Robert Berger <robert.berger@ReliableEmbeddedSystems.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Ross Burton
c388d72c60 oeqa/selftest/runtime: force empty root password, use helpers to access qemu
(From OE-Core rev: 25a2db0c4e1c558cd14b2e7b7bce46f7d1ea02a7)

Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Saul Wold
d40531211c wic: misc.py: Use mmd from mtools instead of syslinux
mtools already provides a suite of msdos utilities, switch to this
one also.  This could allow for future changes to reduce wic's
dependecies.

(From OE-Core rev: 493bbd9ae773d0713db9782b434ce9543e2266f3)

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:56 +00:00
Joe Slater
8eeed4220e goarch: There is no GOARCH defined for mips64-n32
Defeat building for mipsarchn32 because there is no corresponding
GOARCH.  Neither "mips" nor "mips64" allows go-runtime to compile.
Existing mips32 code assumes the o32 ABI.

(From OE-Core rev: 6380e5e381ceaf39a02e6f76c74910b2af71980b)

Signed-off-by: Joe Slater <jslater@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Wenlin Kang
0fbaee9077 kexec-tools: add systemd support for kdump
Add file kdump.service to support kdump in systemd.

(From OE-Core rev: d184a1365ededd30952ec4e8e6f6deb6eafb3b31)

Signed-off-by: Wenlin Kang <wenlin.kang@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Armin Kuster <akuster@mvista.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Ming Liu
33a48469bd lib/oe/terminal.py: use an absolute path to execute oe-gnome-terminal-phonehome
A flaw was found on my Ubuntu 14.04.5 LTS, on which that gnome-terminal is
the default terminal, when I run any of the tasks:
bitbake busybox -c menuconfig/devshell/devpyshell
bitbake virtual/kernel -c menuconfig/devshell/devpyshell

I got a error as follows:
"Failed to execute child process "oe-gnome-terminal-phonehome" (No such file or directory)"

Seems the environment of the process calling Popen is not passed to the
child process, this behaviour is a known issue in Python bug tracker:
http://bugs.python.org/issue8557

It could be fixed by using an absolute path instead per test.

(From OE-Core rev: 84514d0aaf28028b7862d247debbcdcce58fdada)

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 2117c148ef07d84bc605768e3b3671b0126b9337)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Robert Yang
e52027eef7 useradd.bbclass: print a warn when useradd not found
Exit quietly makes it very hard for debugging when user is not added as
expected, print a warning helps a lot.

(From OE-Core rev: 2428444f4d5deeaad90753bde51455c0b55d7d3e)

Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 057885ed6f22781960bce4e082e3aa96e126764c)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Richard Purdie
9d5296bba5 bind: Convert from ftp to https urls
The ftp protocol is dated and problematic. Since https is available, lets
use that instead, making new users chances of successful builds higher.

(From OE-Core rev: 3dcb052eb4aeca60389c45801d1598fcbe8898d0)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f24a29fcba98ceff08c13b0f029be93995f1deed)

Fix merge conflict do to version diff
Signed-off-by: Armin Kuster <akuster808@gmail.com>

Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Thomas Perrot
8754f4779c runqemu: correct rootfs setup to boot an ide hddimg
vm_drive variable is malformed when the drive type is an ide device.

(From OE-Core rev: 02dbf124328eebdfdf62402588a41719953a22bf)

Signed-off-by: Thomas Perrot <thomas.perrot@tupi.fr>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 88d7b17871fe8340ab7fd5c901d3a535ae098c3e)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Armin Kuster
e0bfc22475 tzdata: update 2017c
LICENSE changed do to rewording
7097a65277 (diff-9879d6db96fd29134fc802214163b95a)

  Briefly:
  Northern Cyprus switches from +03 to +02/+03 on 2017-10-29.
  Fiji ends DST 2018-01-14, not 2018-01-21.
  Namibia switches from +01/+02 to +02 on 2018-04-01.
  Sudan switches from +03 to +02 on 2017-11-01.
  Tonga likely switches from +13/+14 to +13 on 2017-11-05.
  Turks & Caicos switches from -04 to -05/-04 on 2018-11-04.
  A new file tzdata.zi now holds a small text copy of all data.
  The zic input format has been regularized slightly.

  Changes to future time stamps

    Northern Cyprus has decided to resume EU rules starting
    2017-10-29, thus reinstituting winter time.

    Fiji ends DST 2018-01-14 instead of the 2018-01-21 previously
    predicted.  (Thanks to Dominic Fok.)  Adjust future predictions
    accordingly.

    Namibia will switch from +01 with DST to +02 all year on
    2017-09-03 at 02:00.  This affects UT offsets starting 2018-04-01
    at 02:00.  (Thanks to Steffen Thorsen.)

    Sudan will switch from +03 to +02 on 2017-11-01.  (Thanks to Ahmed
    Atyya and Yahia Abdalla.)  South Sudan is not switching, so
    Africa/Juba is no longer a link to Africa/Khartoum.

    Tonga has likely ended its experiment with DST, and will not
    adjust its clocks on 2017-11-05.  Although Tonga has not announced
    whether it will continue to observe DST, the IATA is assuming that
    it will not.  (Thanks to David Wade.)

    Turks & Caicos will switch from -04 all year to -05 with US DST on
    2018-03-11 at 03:00.  This affects UT offsets starting 2018-11-04
    at 02:00.  (Thanks to Steffen Thorsen.)

  Changes to past time stamps

    Namibia switched from +02 to +01 on 1994-03-21, not 1994-04-03.
    (Thanks to Arthur David Olson.)

    Detroit did not observe DST in 1967.

    Use railway time for Asia/Kolkata before 1941, by switching to
    Madras local time (UT +052110) in 1870, then to IST (UT +0530) in
    1906.  Also, treat 1941-2's +0630 as DST, like 1942-5.

    Europe/Dublin's 1946 and 1947 fallback transitions occurred at
    02:00 standard time, not 02:00 DST.  (Thanks to Michael Deckers.)

    Pacific/Apia and Pacific/Pago_Pago switched from Antipodean to
    American time in 1892, not 1879.  (Thanks to Michael Deckers.)

    Adjust the 1867 transition in Alaska to better reflect the
    historical record, by changing it to occur on 1867-10-18 at 15:30
    Sitka time rather than at the start of 1867-10-17 local time.
    Although strictly speaking this is accurate only for Sitka,
    the rest of Alaska's blanks need to be filled in somehow.

    Fix off-by-one errors in UT offsets for Adak and Nome before 1867.
    (Thanks to Michael Deckers.)

    Add 7 s to the UT offset in Asia/Yangon before 1920.

  Changes to zone names

    Remove Canada/East-Saskatchewan from the 'backward' file, as it
    exceeded the 14-character limit and was an unused misnomer anyway.

(From OE-Core rev: 2ea37fd4fad2e5ef21c119b03f09bcf2b0e7266e)

Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 77a8256d9cbfe24d470aac9b4cc2910a41ca0ee8)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Armin Kuster
f165c52e57 tzcode-native: update to 2017c
LICENSE changes do to rewording
7097a65277 (diff-9879d6db96fd29134fc802214163b95a)

Backported to fixes from upstream too.

Changes to code

    zic and the reference runtime now reject multiple leap seconds
    within 28 days of each other, or leap seconds before the Epoch.
    As a result, support for double leap seconds, which was
    obsolescent and undocumented, has been removed.  Double leap
    seconds were an error in the C89 standard; they have never existed
    in civil timekeeping.  (Thanks to Robert Elz and Bradley White for
    noticing glitches in the code that uncovered this problem.)

    zic now warns about use of the obsolescent and undocumented -y
    option, and about use of the obsolescent TYPE field of Rule lines.

    zic now allows unambiguous abbreviations like "Sa" and "Su" for
    weekdays; formerly it rejected them due to a bug.  Conversely, zic
    no longer considers non-prefixes to be abbreviations; for example,
    it no longer accepts "lF" as an abbreviation for "lastFriday".
    Also, zic warns about the undocumented usage with a "last-"
    prefix, e.g., "last-Fri".

    Similarly, zic now accepts the unambiguous abbreviation "L" for
    "Link" in ordinary context and for "Leap" in leap-second context.
    Conversely, zic no longer accepts non-prefixes such as "La" as
    abbreviations for words like "Leap".

    zic no longer accepts leap second lines in ordinary input, or
    ordinary lines in leap second input.  Formerly, zic sometimes
    warned about this undocumented usage and handled it incorrectly.

    The new macro HAVE_TZNAME governs whether the tzname external
    variable is exported, instead of USG_COMPAT.  USG_COMPAT now
    governs only the external variables "timezone" and "daylight".
    This change is needed because the three variables are not in the
    same category: although POSIX requires tzname, it specifies the
    other two variables as optional.  Also, USG_COMPAT is now 1 or 0:
    if not defined, the code attempts to guess it from other macros.

    localtime.c and difftime.c no longer require stdio.h, and .c files
    other than zic.c no longer require sys/wait.h.

    zdump.c no longer assumes snprintf.  (Reported by Jonathan Leffler.)

    Calculation of time_t extrema works around a bug in GCC 4.8.4
    (Reported by Stan Shebs and Joseph Myers.)

    zic.c no longer mistranslates formats of line numbers in non-English
    locales.  (Problem reported by Benno Schulenberg.)

    Several minor changes have been made to the code to make it a
    bit easier to port to MS-Windows and Solaris.  (Thanks to Kees
    Dekker for reporting the problems.)

  Changes to documentation and commentary

    The two new files 'theory.html' and 'calendars' contain the
    contents of the removed file 'Theory'.  The goal is to document
    tzdb theory more accessibly.

    The zic man page now documents abbreviation rules.

    tz-link.htm now covers how to apply tzdata changes to clients.
    (Thanks to Jorge Fábregas for the AIX link.)  It also mentions MySQL.

    The leap-seconds.list URL has been updated to something that is
    more reliable for tzdb.  (Thanks to Tim Parenti and Brian Inglis.)

(From OE-Core rev: 12a538bbbc8d04e875f81bd65e9754d749273aac)

Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 74af497f8d6b4e28d97c0f2cdb4ece90c2a6b8b5)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Ross Burton
e6c74f7ac9 qemurunner: fix bad indentation in serial login
(cherry picked from commit c4f57aed7a29000067c63a2821fddf18a88a23ce)
(From OE-Core rev: 2de7ffd9f0656ffd5b6fa002213e5f619480aba8)

Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Juro Bystricky
ce3bbc6972 util-linux-ptest: various fixes
The original code enabled only a sub-set of all available tests.
It also copied executables to be tested into a local folder although
the executables were expected to be already installed in the image.
In addition, the original code copied libtool scripts instead of already
cross-compiled images.

This patch modifies some test scripts so there is no need to copy
images already installed: instead it tests images already installed.
As the executables are scattered in /bin, usr/bin, /sbin/ usr/sbin folders,
we use 'which' to determine the absolute path.
We also copy some cross-compiled tests that were previously missing.

By the virtue of not copying the libtools scripts we also managed
the achieve binary reproducible package, as previously leaked build host
info was contained in libtool scripts, which are not copied anymore.

[YOCTO #10953]

(From OE-Core rev: 2cb21df92ec219b852e25fb005c8fccb2e395dcd)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit f5198af37a5357a1758b50668b67f1c552982507)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Saul Wold
f483bdf9c4 wic: misc.py: Added more mtools binaries
This fixes the issue that if you don't have mtools installed on the host
thus causing host contamination, that the correct binaries would be selected
from the native sysroot.

[YOCTO #12173]

(From OE-Core rev: 9562669a4979bb31bbc27dc80c6a8d4f08500a49)

Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit dca43c557449d3765fec9f8d159d5c9e4ea8b0cb)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Li Zhou
24c9708492 curl: Security Advisory - curl - CVE-2017-1000254
Porting patch from <https://github.com/curl/curl/commit/
5ff2c5ff25750aba1a8f64fbcad8e5b891512584> to solve CVE-2017-1000254.

(From OE-Core rev: 4e22302603c6a1fc56ef77cdc10e1b1f631a274e)

Signed-off-by: Li Zhou <li.zhou@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 08f8d5db06647b94f96d655100c358047682dd2f)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Khem Raj
221c4877f1 mdadm: Fix build with gcc < 7
Do not rely on build host gcc for "implicit-fallthrough" support
we need to check the CC for it

(From OE-Core rev: 8dae7b56b85e098eda1517eb7f50f37c57fb3ba6)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit b36100bb3077947361c858f891eb15a76013671e)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Randy MacLeod
e303b3cadc openssl: force soft link to avoid rare race
This patch works around a rare parallel build race condition using
the force option when soft linking.

The error seen is:

ln: failed to create symbolic link 'libssl.so': File exists
make[4]: *** [Makefile.shared:171: link_a.gnu] Error 1
make[4]: Leaving directory
'/.../build/tmp-glibc/work/x86_64-linux/openssl-native/1.0.2k-r0/openssl-1.0.2k'

Just add the -f flag to the platform independent soft link code to
avoid the collision.  This is reasonable since this Makefile removes
the link target before creating a new soft link. The Makefile was
written this way to support platforms that don't allow forcing a
softlink to overwrite an existing link. Only builds on Linux are
supported so that's not a requirement for oe-core recipes.

The openssl team is rewriting their build files so it's not appropriate
for openssl upstream and fixing the root cause of the race condition
was also not pursued.

(From OE-Core rev: f6be81b1dddc7adc2e97fefb2bd6c296d4dce8c6)

Signed-off-by: Randy MacLeod <Randy.MacLeod@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit c60288aba70635238094c6b813228b31e0715db9)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Juro Bystricky
500ce8d139 nettle-ptest: fix a failing test
This patch changes the result of the nettle dlopen-test
from FAIL to PASS. The test used to fail because the test could not
find and load libnettle.so.
This patch fixes this by using absolute path instead of relative.

This was the only test out of 88 that used to fail.

(From OE-Core rev: 511db7c256dbb3f8ba95eabd025d427384d4a1cb)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit f12d493418417c8529a97c7a768e4af58ea5c91b)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Juro Bystricky
f7e10b532c gawk-ptest: fix a failing test
This patch changes the result of the "include" test
from FAIL to PASS. The test used to fail as the test prerequisite
was missing.
This was the only test out of 298 that used to fail.

(From OE-Core rev: 7e1da2f7c1068cf88424e4af3659d185dbd4167d)

Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 3e6bbb81d143919e37cea1549220d27df22080fe)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Wenzong Fan
0fc114ba76 tcl: remove host path from tclConfig.sh
The tclConfig.sh is also used by other packages (such as expect) for
cross-compiling, the host path from it can't be removed directly in
the do_install step.

With PACKAGE_PREPROCESS_FUNCS to remove host path and avoid the
crossscripts installed to target.

(From OE-Core rev: 54841b0a12f3d7ac9c36df110821fa39d60d456f)

Signed-off-by: Wenzong Fan <wenzong.fan@windriver.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit ced5618e7b3459fdd96f448ccdb55b5ced6d8214)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Khem Raj
b21f8e361b elfutils: Fix missing library on linker cmdline
(From OE-Core rev: a998f5be9b0364ef371f4cf6e4c0273fd9dc3861)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 0caa41cf9692ac2cdf62b31cda8edd8241198697)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:55 +00:00
Nikolay Merinov
f515778225 perl-native: Provide correct lddlflags
For shared libraries compilation perl uses LDDLFLAGS instead of
LDFLAGS. Value for LDDLFLAGS can be provided through
recipe-sysroot-native/usr/lib/perl-native/perl/config.sh file
generated during perl-native compilation.

With default LDDLFLAGS libxml-parser-perl-native package have no
correct rpath in Expat.so module. Provide correct LDDLFLAGS for perl
modules compilation to fix build on hosts without libexpat.so.

(From OE-Core rev: b927733c03f672aee59211fa86278cae9c817530)

Signed-off-by: Nikolay Merinov <n.merinov@inango-systems.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 118f42fa92c29269395c53c931fa174ece1af2e0)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Javier Viguera
40ed9adb53 curl: add 'enable-ares' packageconfig option
This build time option is needed to use the '--dns-interface' runtime
parameter to instruct 'curl' to use a specific interface for DNS
resolution.

Not enabled by default, as it depends on 'c-ares' package from
meta-openembedded (meta-networking).

(From OE-Core rev: 8f3d34217b5b95f1f159c362c6f5dad3ba4fb290)

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
(cherry picked from commit 4fe0aa3791db0ee6c85e7a068f69def6e7c0da46)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
96d525dc03 linux-yocto/4.12: ide:ide-cd: fix kernel panic resulting from missing scsi_req_init
Integrating a backport of upstream commit:

    ide:ide-cd: fix kernel panic resulting from missing scsi_req_init

    commit 79d73346ac05bc31 upstream

    Since we split the scsi_request out of struct request, while the
    standard prep_rq_fn builds 10 byte cmds, it missed to invoke
    scsi_req_init() to initialize certain fields of a scsi_request
    structure (.__cmd[], .cmd, .cmd_len and .sense_len but no other
    members of struct scsi_request).

    An example panic on virtual machines (qemu/virtualbox) to boot
    from IDE cdrom:
    ...
    [    8.754381] Call Trace:
    [    8.755419]  blk_peek_request+0x182/0x2e0
    [    8.755863]  blk_fetch_request+0x1c/0x40
    [    8.756148]  ? ktime_get+0x40/0xa0
    [    8.756385]  do_ide_request+0x37d/0x660
    [    8.756704]  ? cfq_group_service_tree_add+0x98/0xc0
    [    8.757011]  ? cfq_service_tree_add+0x1e5/0x2c0
    [    8.757313]  ? ktime_get+0x40/0xa0
    [    8.757544]  __blk_run_queue+0x3d/0x60
    [    8.757837]  queue_unplugged+0x2f/0xc0
    [    8.758088]  blk_flush_plug_list+0x1f4/0x240
    [    8.758362]  blk_finish_plug+0x2c/0x40
    ...
    [    8.770906] RIP: ide_cdrom_prep_fn+0x63/0x180 RSP: ffff92aec018bae8
    [    8.772329] ---[ end trace 6408481e551a85c9 ]---
    ...

    Fixes: 82ed4db499b8 ("block: split scsi_request out of struct request")

    Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
    [bva: modified for 4.12 context]
    Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>

(From OE-Core rev: 56548b615442e3f58b204c4810d7fe1e3d852409)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 089dc30e11a5bbd10bf6bebea6aa0ac2173bc9a3)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
d61b65f35c linux-yocto/4.12: configuration fragment updates
Integrating the following configuration updates:

 dcf1317b36d2 features/mmc/mmc-realtek: enable Realtek PCI-E card reader support
 1a144ffe5f76 edac: split scc into enablement and patching (for treegen)

(From OE-Core rev: fdcbb9ff97928f80f854be0750a509a0c40f7982)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 5135d7c88bd1c50b7462d3f219d778e4a33b2995)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
3190ba0b38 linux-yocto/4.9: update to v4.9.57
Integrating the korg -stable release that comprises the following changes:

   5d7a76acad40 Linux 4.9.57
   28955b03fac3 KVM: nVMX: update last_nonleaf_level when initializing nested EPT
   fb6da44f965e x86/alternatives: Fix alt_max_short macro to really be a max()
   063b57d55618 USB: serial: console: fix use-after-free after failed setup
   638f7fbfd67d USB: serial: qcserial: add Dell DW5818, DW5819
   c98f2ff0013e USB: serial: option: add support for TP-Link LTE module
   dcb2be936c3f USB: serial: cp210x: add support for ELV TFD500
   0c80bbb76814 USB: serial: ftdi_sio: add id for Cypress WICED dev board
   ed35ded9c781 bio_copy_user_iov(): don't ignore ->iov_offset
   e67dfe75b683 more bio_map_user_iov() leak fixes
   5444d8ab9a14 fix unbalanced page refcounting in bio_map_user_iov
   f9139a1a2457 direct-io: Prevent NULL pointer access in submit_page_section
   3941ee20839f usb: gadget: composite: Fix use-after-free in usb_composite_overwrite_options
   3c57f9d8c194 usb: gadget: configfs: Fix memory leak of interface directory data
   80689fdf37a8 drm/i915/bios: parse DDI ports also for CHV for HDMI DDC pin and DP AUX channel
   fd96a9b0150a drm/i915: Read timings from the correct transcoder in intel_crtc_mode_get()
   7c82795f9612 drm/i915/edp: Get the Panel Power Off timestamp after panel is off
   4dbe48b8e1a9 ALSA: line6: Fix leftover URB at error-path during probe
   b65f99b8b1ab ALSA: line6: Fix missing initialization before error path
   bbab59d6c4b2 ALSA: caiaq: Fix stray URB at probe error path
   6571ce840881 ALSA: seq: Fix copy_from_user() call inside lock
   35b84860667f ALSA: seq: Fix use-after-free at creating a port
   e0c70289a1e3 ALSA: usb-audio: Kill stray URB at exiting
   133ca5c71299 fs/mpage.c: fix mpage_writepage() for pages with buffers
   2a077f725847 device property: Track owner device of device property
   3abebf0b8c5f iommu/amd: Finish TLB flush in amd_iommu_unmap()
   4f28d1a742f9 pinctrl/amd: Fix build dependency on pinmux code
   f4753e0ae985 usb: renesas_usbhs: Fix DMAC sequence for receiving zero-length packet
   08e1674e82e5 KVM: nVMX: fix guest CR4 loading when emulating L2 to L1 exit
   3610c4a7838d KVM: MMU: always terminate page walks at level 1
   91daaefbe5df crypto: shash - Fix zero-length shash ahash digest crash
   57265cddde30 HID: usbhid: fix out-of-bounds bug
   9d9c2884da2c dmaengine: ti-dma-crossbar: Fix possible race condition with dma_inuse
   618c786d2bba dmaengine: edma: Align the memcpy acnt array size with the transfer
   b7309209b020 MIPS: math-emu: Remove pr_err() calls from fpu_emu()
   a844e288c811 USB: dummy-hcd: Fix deadlock caused by disconnect detection
   97535791d8f9 rcu: Allow for page faults in NMI handlers
   f012cb75946f nl80211: Define policy for packet pattern attributes
   92d7d3e86702 CIFS: Reconnect expired SMB sessions
   28cbf0693771 ext4: in ext4_seek_{hole,data}, return -ENXIO for negative offsets
   9d36d3eff2f8 Linux 4.9.56
   00449628f352 Revert "socket, bpf: fix possible use after free"
   f82786d7a94f Linux 4.9.55
   922e562b2613 KVM: x86: fix singlestepping over syscall
   ec86c1ca8fbb f2fs: don't allow encrypted operations without keys
   48d7b5a88790 ext4: don't allow encrypted operations without keys
   6007f0f7a47d ext4: Don't clear SGID when inheriting ACLs
   2d605d9188d6 ext4: fix data corruption for mmap writes
   27db1f020373 vfs: deny copy_file_range() for non regular files
   ba15518c2610 sched/cpuset/pm: Fix cpuset vs. suspend-resume bugs
   d9aaef32f32c mmc: core: add driver strength selection when selecting hs400es
   c83bbed23419 nvme-pci: Use PCI bus address for data/queues in CMB
   acf64334817c drm/i915/bios: ignore HDMI on port A
   54aa832c8744 brcmfmac: setup passive scan if requested by user-space
   4d3132d97aa7 brcmfmac: add length check in brcmf_cfg80211_escan_handler()
   12b182a35f45 scsi: sd: Do not override max_sectors_kb sysfs setting
   aee20f321daf iwlwifi: add workaround to disable wide channels in 5GHz
   f8895642cf8e iwlwifi: mvm: use IWL_HCMD_NOCOPY for MCAST_FILTER_CMD
   9a19bc44c636 netlink: fix nla_put_{u8,u16,u32} for KASAN
   57a77fffb0ff rocker: fix rocker_tlv_put_* functions for KASAN
   50b27486ae8a HID: wacom: bits shifted too much for 9th and 10th buttons
   953f5e7c6216 HID: wacom: Always increment hdev refcount within wacom_get_hdev_data
   04b54e8ff7d0 HID: wacom: leds: Don't try to control the EKR's read-only LEDs
   5abb9cd4ff92 HID: i2c-hid: allocate hid buffers for real worst case
   a3ec104976f7 ftrace: Fix kmemleak in unregister_ftrace_graph
   3ff8bc813b13 stm class: Fix a use-after-free
   c541aaad4ac7 Drivers: hv: fcopy: restore correct transfer length
   a97ca4f78018 driver core: platform: Don't read past the end of "driver_override" buffer
   fc3c67226acd percpu: make this_cpu_generic_read() atomic w.r.t. interrupts
   6a988259b1cb powerpc/tm: Fix illegal TM state in signal handler
   afebf5ef60da powerpc/64s: Use emergency stack for kernel TM Bad Thing program checks
   02f7e4101092 socket, bpf: fix possible use after free
   95206ea376b9 net: rtnetlink: fix info leak in RTM_GETSTATS call
   58b1b8407a31 tipc: use only positive error codes in messages
   09788d46b756 ip6_tunnel: update mtu properly for ARPHRD_ETHER tunnel device in tx path
   ab4da56f61be ip6_gre: ip6gre_tap device should keep dst
   b4a119251f6b netlink: do not proceed if dump's start() errs
   cf2eaf16ab28 net: Set sk_prot_creator when cloning sockets to the right proto
   24ee394a82d2 packet: only test po->has_vnet_hdr once in packet_snd
   0f22167d3321 packet: in packet_do_bind, test fanout with bind_lock held
   6eab1f829417 net: dsa: Fix network device registration order
   b8990d2e77c6 tun: bail out from tun_get_user() if the skb is empty
   b4a9b12d9a2c l2tp: fix race condition in l2tp_tunnel_delete
   e5941137f784 l2tp: Avoid schedule while atomic in exit_net
   6689f8358681 vti: fix use after free in vti_tunnel_xmit/vti6_tnl_xmit
   852bdea5e379 net: qcom/emac: specify the correct size when mapping a DMA buffer
   5600c7586ad9 net_sched: always reset qdisc backlog in qdisc_reset()
   93eef2172d23 isdn/i4l: fetch the ppp_write buffer in one shot
   0dee549f7912 bpf: one perf event close won't free bpf program attached by another perf event
   6f7cdd4aa0a4 packet: hold bind lock when rebinding to fanout hook
   6eac2cd24bd9 net: emac: Fix napi poll list corruption
   b463521db854 tcp: fastopen: fix on syn-data transmit failure
   b13bc543b1e6 net/sched: cls_matchall: fix crash when used with classful qdisc
   13c8bd7a21ed ip6_tunnel: do not allow loading ip6_tunnel if ipv6 is disabled in cmdline
   fc2fe7a06d6d net: phy: Fix mask value write on gmii2rgmii converter speed register
   e814bae39ad5 ip6_gre: skb_push ipv6hdr before packing the header in ip6gre_header
   f0a5af78b530 udpv6: Fix the checksum computation when HW checksum does not apply
   85908ccae5c2 tcp: fix data delivery rate
   e159492b3c3e bpf/verifier: reject BPF_ALU64|BPF_END
   186a9c5e7038 tcp: update skb->skb_mstamp more carefully
   b70bb9bb7277 sctp: potential read out of bounds in sctp_ulpevent_type_enabled()
   f86d3b1a28a7 net: sched: fix use-after-free in tcf_action_destroy and tcf_del_walker
   f860ca549de4 mlxsw: spectrum: Prevent mirred-related crash on removal
   065af12fd139 ALSA: usx2y: Suppress kernel warning at page allocation failures
   40e219327fd4 Revert "ALSA: echoaudio: purge contradictions between dimension matrix members and total number of members"
   984b6c96f1e2 ALSA: compress: Remove unused variable
   88c195d638d3 lsm: fix smack_inode_removexattr and xattr_getsecurity memleak
   1c0891295a5a lib/ratelimit.c: use deferred printk() version
   2b8197073a0f mm, oom_reaper: skip mm structs with mmu notifiers
   8a056a115270 staging: vchiq_2835_arm: Fix NULL ptr dereference in free_pagelist
   8928c5b2d318 uwb: ensure that endpoint is interrupt
   8ff7adb930d4 uwb: properly check kthread_run return value
   ec8a7153bbf3 iio: adc: mcp320x: Fix oops on module unload
   1daa7c5aba21 iio: adc: mcp320x: Fix readout of negative voltages
   8b97d5b67e9e iio: ad7793: Fix the serial interface reset
   f0865d60f3a5 IIO: BME280: Updates to Humidity readings need ctrl_reg write!
   9af1bd5e705a iio: core: Return error for failed read_reg
   8edd1ce3e56b staging: iio: ad7192: Fix - use the dedicated reset function avoiding dma from stack.
   1f266a130329 iio: ad_sigma_delta: Implement a dedicated reset function
   a2002c92ffb3 iio: adc: twl4030: Disable the vusb3v1 rugulator in the error handling path of 'twl4030_madc_probe()'
   ab6766146785 iio: adc: twl4030: Fix an error handling path in 'twl4030_madc_probe()'
   a13481f8cdca Revert "xhci: Limit USB2 port wake support for AMD Promontory hosts"
   f77615db8ae8 xhci: set missing SuperSpeedPlus Link Protocol bit in roothub descriptor
   f1a04773d773 xhci: Fix sleeping with spin_lock_irq() held in ASmedia 1042A workaround
   67e752e1d60f xhci: fix finding correct bus_state structure for USB 3.1 hosts
   a6d4ce2e8b65 USB: fix out-of-bounds in usb_set_configuration
   43feb29db4c5 usb: Increase quirk delay for USB devices
   767f7a2cf33a USB: core: harden cdc_parse_cdc_header
   d77606e93d81 USB: uas: fix bug in handling of alternate settings
   da785bb64fa6 USB: g_mass_storage: Fix deadlock when driver is unbound
   2b5c7b95ea36 usb: gadget: mass_storage: set msg_registered after msg registered
   77a4be89599c USB: devio: Don't corrupt user memory
   e39b17143a5b USB: dummy-hcd: Fix erroneous synchronization change
   795f5501b95c USB: dummy-hcd: fix infinite-loop resubmission bug
   5effe995310e USB: dummy-hcd: fix connection failures (wrong speed)
   12071de6c37d USB: cdc-wdm: ignore -EPIPE from GetEncapsulatedResponse
   0b104f92ed21 usb: pci-quirks.c: Corrected timeout values used in handshake
   37b6d898388e ALSA: usb-audio: Check out-of-bounds access by corrupted buffer descriptor
   eb5df140ca29 usb: renesas_usbhs: fix usbhsf_fifo_clear() for RX direction
   4661c9b526c3 usb: renesas_usbhs: fix the BCLR setting condition for non-DCP pipe
   760d0f10410a usb-storage: fix bogus hardware error messages for ATA pass-thru devices
   dd52953f6c48 usb-storage: unusual_devs entry to fix write-access regression for Seagate external drives
   d21653d09a0b usb: gadget: udc: renesas_usb3: Fix return value of usb3_write_pipe()
   db73b389775a usb: gadget: udc: renesas_usb3: fix Pn_RAMMAP.Pn_MPKT value
   25533678e580 usb: gadget: udc: renesas_usb3: fix for no-data control transfer
   744f9e1da2a5 usb: gadget: udc: atmel: set vbus irqflags explicitly
   7f850036134c USB: gadgetfs: fix copy_to_user while holding spinlock
   fd5336c0d1e3 USB: gadgetfs: Fix crash caused by inadequate synchronization
   f37eb7b586f1 Linux 4.9.54
   75903d40aaec s390/mm: make pmdp_invalidate() do invalidation only
   14b502e491a8 ttpci: address stringop overflow warning
   c637027054ae ALSA: au88x0: avoid theoretical uninitialized access
   cf2cd9feb8e6 ASoC: rt5660: remove double const
   617c7735db3d ASoC: rt5659: drop double const
   2f4835ee5505 ASoC: rt5514: fix gcc-7 warning
   d8ba70c09407 ARM: remove duplicate 'const' annotations'
   a4f11d61e305 IB/qib: fix false-postive maybe-uninitialized warning
   86c469bea4ae tools/power turbostat: bugfix: GFXMHz column not changing
   c126bc6b94dd ARM: dts: BCM5301X: Fix memory start address
   16db9205d3f8 libata: transport: Remove circular dependency at free time
   49c3226c0657 ASoC: wm_adsp: Return an error on write to a disabled volatile control
   d86f4ea83626 xfs: remove kmem_zalloc_greedy
   943411be40e0 i2c: meson: fix wrong variable usage in meson_i2c_put_data
   625cb13a8929 netfilter: nf_tables: set pktinfo->thoff at AH header if found
   4131c889c278 md/raid10: submit bio directly to replacement disk
   5c6712ab4efb rds: ib: add error handle
   a495f72f8a53 mm/cgroup: avoid panic when init with low memory
   2d59530d9918 iommu/io-pgtable-arm: Check for leaf entry before dereferencing it
   81080d2d83f6 x86/acpi: Restore the order of CPU IDs
   ffb6a7637ce0 cpufreq: intel_pstate: Update pid_params.sample_rate_ns in pid_param_set()
   27848be7eb75 ibmvnic: Free tx/rx scrq pointer array when releasing sub-crqs
   49f1b2c154cb nfs: make nfs4_cb_sv_ops static
   1cf8f9467e86 parisc: perf: Fix potential NULL pointer dereference
   cd402b889606 netfilter: nfnl_cthelper: fix incorrect helper->expect_class_max
   9b6f9da9e55a nvme-rdma: handle cpu unplug when re-establishing the controller
   67e8be27ff72 MIPS: smp-cps: Fix retrieval of VPE mask on big endian CPUs
   db6767e2fdca exynos-gsc: Do not swap cb/cr for semi planar formats
   61b203816b17 iommu/exynos: Block SYSMMU while invalidating FLPD cache
   3798fd14b970 MIPS: IRQ Stack: Unwind IRQ stack onto task stack
   146561a3f1c8 netfilter: invoke synchronize_rcu after set the _hook_ to NULL
   07b653405e3a drivers/rapidio/devices/tsi721.c: make module parameter variable name unique
   5435e4823d81 kasan: do not sanitize kexec purgatory
   dd9640717f3f hugetlbfs: initialize shared policy as part of inode allocation
   c533c11d8f7a sata_via: Enable hotplug only on VT6421
   26899ca9cc6f Btrfs: fix potential use-after-free for cloned bio
   c17acd24c682 Btrfs: fix segmentation fault when doing dio read
   7e2a755497f3 bridge: netlink: register netdevice before executing changelink
   727a153435fa mmc: sdio: fix alignment issue in struct sdio_func
   8f9bd136b50b qed: Fix possible system hang in the dcbnl-getdcbx() path.
   f06316859ce6 net: dsa: b53: Include IMP/CPU port in dumb forwarding mode
   affd26096a59 udp: disable inner UDP checksum offloads in IPsec case
   65a7a7ce7ffd usb: plusb: Add support for PL-27A1
   45eacc855552 team: fix memory leaks
   897e8c528529 net/packet: check length in getsockopt() called with PACKET_HDRLEN
   1dee03af7325 net: core: Prevent from dereferencing null pointer when releasing SKB
   c593091cfc1b lkdtm: Fix Oops when unloading the module
   6329973bee29 mips: ath79: clock:- Unmap region obtained by of_iomap
   30a0220a5b0b MIPS: Lantiq: Fix another request_mem_region() return code check
   fd9597d6ea28 HID: wacom: release the resources before leaving despite devm
   d621f970fd71 drm: mali-dp: Fix transposed horizontal/vertical flip
   c67371165170 drm: mali-dp: Fix destination size handling when rotating
   e2d1a42ed06e ASoC: dapm: fix some pointer error handling
   4302bc4f40b1 rtl8xxxu: Add additional USB IDs for rtl8192eu devices
   3f22900466a1 usb: chipidea: vbus event may exist before starting gadget
   75d1888ddce9 iommu/arm-smmu: Set privileged attribute to 'default' instead of 'unprivileged'
   4af5e6136d76 spi: pxa2xx: Add support for Intel Gemini Lake
   874b5acede78 ath10k: prevent sta pointer rcu violation
   91e66498a96a audit: log 32-bit socketcalls
   de415c812ec9 ASoC: dapm: handle probe deferrals
   0fc89de6ee77 partitions/efi: Fix integer overflow in GPT size calculation
   eaf9616e406c sfc: get PIO buffer size from the NIC
   c6d263e6b30a USB: serial: mos7840: fix control-message error handling
   9553708eb98d USB: serial: mos7720: fix control-message error handling
   09831a957766 drm/amdkfd: fix improper return value on error
   68b94d6c4edb arm: dts: mt2701: Add subsystem clock controller device nodes
   b2e7d1f72b09 IB/ipoib: Replace list_del of the neigh->list with list_del_init
   e335016d1f62 IB/ipoib: rtnl_unlock can not come after free_netdev
   e384bbd585ee IB/ipoib: Fix deadlock over vlan_mutex
   6c25cbaff1e9 serial: 8250_port: Remove dangerous pr_debug()
   ca3e4e77201a tty: goldfish: Fix a parameter of a call to free_irq
   5d29957578ae serial: 8250: moxa: Store num_ports in brd
   d976d68e1726 drm/i915/psr: disable psr2 for resolution greater than 32X20
   e92dca6f5a14 ARM: 8635/1: nommu: allow enabling REMAP_VECTORS_TO_RAM
   e1c355c244b7 IB/rxe: Fix a MR reference leak in check_rkey()
   0081b9e7fcf7 IB/rxe: Add a runtime check in alloc_index()
   2b7aec8839df iio: adc: hx711: Add DT binding for avia,hx711
   ff9b56037dd7 iio: adc: axp288: Drop bogus AXP288_ADC_TS_PIN_CTRL register modifications
   259f317db758 iio: adc: imx25-gcq: Fix module autoload
   772384d7ec40 hwmon: (gl520sm) Fix overflows and crash seen when writing into limit attributes
   d74f860528fb usb: make the MTK XHCI driver compile for older MIPS SoCs
   952d3c52bd85 clk/axs10x: Clear init field in driver probe
   81c961824662 sh_eth: use correct name for ECMR_MPDE bit
   bed7533196b2 reset: ti_syscon: fix a ti_syscon_reset_status issue
   6798f079b0a5 extcon: axp288: Use vbus-valid instead of -present to determine cable presence
   bc438831606a igb: re-assign hw address pointer on reset after PCI error
   484e3e793449 ARM: dts: am335x-chilisom: Wakeup from RTC-only state by power on event
   bc9ad17c7af2 scsi: be2iscsi: Add checks to validate CID alloc/free
   36c56ac0f897 power: supply: axp288_fuel_gauge: Fix fuel_gauge_reg_readb return on error
   0cde56d3b672 MIPS: ralink: Fix incorrect assignment on ralink_soc
   0e22be793ad2 MIPS: ralink: Fix a typo in the pinmux setup.
   84eaa74d734a MIPS: Ensure bss section ends on a long-aligned address
   d1d3a78f3e8f ARM: dts: r8a7790: Use R-Car Gen 2 fallback binding for msiof nodes
   3311a304ec62 RDS: RDMA: Fix the composite message user notification
   aa07a2ccc80d clk: sunxi-ng: fix PLL_CPUX adjusting on H3
   299b924c1f20 ARM: dts: exynos: Add CPU OPPs for Exynos4412 Prime
   48167acb7f5b drm/i915: Fix the overlay frontbuffer tracking
   97766c6a8e58 GFS2: Fix reference to ERR_PTR in gfs2_glock_iter_next
   e236940a87f1 drm: bridge: add DT bindings for TI ths8135
   7df306f1063b drm_fourcc: Fix DRM_FORMAT_MOD_LINEAR #define
   1852eae92c46 Linux 4.9.53
   df13283e4b89 swiotlb-xen: implement xen_swiotlb_dma_mmap callback
   64afde6f956d video: fbdev: aty: do not leak uninitialized padding in clk to userspace
   ea37f61f5de0 KVM: VMX: use cmpxchg64
   cb2da657d3a9 cxl: Fix driver use count
   3ffbe626a254 KVM: VMX: remove WARN_ON_ONCE in kvm_vcpu_trigger_posted_interrupt
   0c4e39ca6700 KVM: VMX: do not change SN bit in vmx_update_pi_irte()
   4c00015385fa timer/sysclt: Restrict timer migration sysctl values to 0 and 1
   e2f803481a84 gfs2: Fix debugfs glocks dump
   5e9b07f30d21 x86/fpu: Don't let userspace set bogus xcomp_bv
   54af98f86b92 x86/mm: Fix fault error path using unsafe vma pointer
   f11525d7ff5d btrfs: prevent to set invalid default subvolid
   ba44bc49bae6 btrfs: propagate error to btrfs_cmp_data_prepare caller
   b86b6c226bea btrfs: fix NULL pointer dereference from free_reloc_roots()
   bb1e06d281a8 PCI: Fix race condition with driver_override
   46f062e05920 etnaviv: fix gem object list corruption
   02c7d98bec6c xfs: validate bdev support for DAX inode flag
   86ef97b2dfd5 kvm: nVMX: Don't allow L2 to access the hardware CR8
   3d4213fac7d1 KVM: VMX: Do not BUG() on out-of-bounds guest IRQ
   e3a643b3288a kvm/x86: Handle async PF in RCU read-side critical sections
   58d2fb119ae6 KVM: VMX: simplify and fix vmx_vcpu_pi_load
   ff5eb8f28ff2 KVM: VMX: avoid double list add with VT-d posted interrupts
   01c58b0edeb1 KVM: VMX: extract __pi_post_block
   d49527ed4888 arm64: fault: Route pte translation faults via do_translation_fault
   7dbd64284b18 arm64: Make sure SPsel is always set
   be69c4c00a68 seccomp: fix the usage of get/put_seccomp_filter() in seccomp_get_filter()
   58052a74d9b0 selftests/seccomp: Support glibc 2.26 siginfo_t.h
   831cca587e7b iw_cxgb4: put ep reference in pass_accept_req()
   f184cf5256b7 iw_cxgb4: remove the stid on listen create failure
   eb4375e1969c bsg-lib: don't free job in bsg_prepare_job
   c820441a7a52 nl80211: check for the required netlink attributes presence
   f3e2e7f0b4d7 vfs: Return -ENXIO for negative SEEK_HOLE / SEEK_DATA offsets
   18a89a10b26b SMB3: Don't ignore O_SYNC/O_DSYNC and O_DIRECT flags
   0e1b85a41a25 SMB: Validate negotiate (to protect against downgrade) even if signing off
   df1be2066433 SMB3: Warn user if trying to sign connection that authenticated as guest
   f2d395b7bde5 Fix SMB3.1.1 guest authentication to Samba
   3a02f8cb5564 PM: core: Fix device_pm_check_callbacks()
   22338c55658d s390/mm: fix write access check in gup_huge_pmd()
   c76655fb0f44 powerpc/ftrace: Pass the correct stack pointer for DYNAMIC_FTRACE_WITH_REGS
   f89f25b53147 powerpc/tm: Flush TM only if CPU has TM feature
   5c23dcf86e2d powerpc/pseries: Fix parent_dn reference leak in add_dt_node()
   dda70d28c0ac KEYS: prevent KEYCTL_READ on negative key
   bfe9d7b8e0f2 KEYS: prevent creating a different user's keyrings
   47e8bd1965fc KEYS: fix writing past end of user-supplied buffer in keyring_read()
   0c70fb88c751 security/keys: rewrite all of big_key crypto
   2f9be92dfffe security/keys: properly zero out sensitive key material in big_key
   b60f791ef32d crypto: talitos - fix hashing
   1492259fc324 crypto: talitos - fix sha224
   70117b773598 crypto: talitos - Don't provide setkey for non hmac hashing algs.
   7e1b2b2db3d7 crypto: drbg - fix freeing of resources
   29825768590e drm/radeon: disable hard reset in hibernate for APUs
   b42bf0f15cf7 scsi: scsi_transport_iscsi: fix the issue that iscsi_if_rx doesn't parse nlmsg properly
   49c2b839b743 md/raid5: preserve STRIPE_ON_UNPLUG_LIST in break_stripe_batch_list
   648798cc2fd7 md/raid5: fix a race condition in stripe batch
   5fb4be27dac5 tracing: Erase irqsoff trace with empty write
   97d402e6eed2 tracing: Fix trace_pipe behavior for instance traces
   8dcf70ab1830 KVM: PPC: Book3S HV: Protect updates to spapr_tce_tables list
   18b7919a9de8 KVM: PPC: Book3S: Fix race and leak in kvm_vm_ioctl_create_spapr_tce()
   3d5960c8c657 genirq: Make sparse_irq_lock protect what it should protect
   e167b4ad529b mac80211: flush hw_roc_start work before cancelling the ROC
   e7e0f0dda28b mac80211_hwsim: Use proper TX power
   59862b0429d9 mac80211: fix VLAN handling with TXQs
   9ad15a25669e fs/proc: Report eip/esp in /prod/PID/stat for coredumping
   b6a77c7ba674 cifs: release auth_key.response for reconnect.
   9a7bc3f0c76a cifs: release cifs root_cred after exit_cifs
   d59dabdc4cb3 Linux 4.9.52
   08f75f2c525d bcache: fix bch_hprint crash and improve output
   57aa1a6967b2 bcache: fix for gc and write-back race
   fa92ff6b77a1 bcache: Correct return value for sysfs attach errors
   e40cb30162d7 bcache: correct cache_dirty_target in __update_writeback_rate()
   8f51f38883dc bcache: do not subtract sectors_to_gc for bypassed IO
   c234e0e77572 bcache: Fix leak of bdev reference
   2a9b55742a9f bcache: initialize dirty stripes in flash_dev_run()
   f5c3fd83284f PM / devfreq: Fix memory leak when fail to register device
   38993f320506 media: uvcvideo: Prevent heap overflow when accessing mapped controls
   7717a7378c53 media: v4l2-compat-ioctl32: Fix timespec conversion
   de4360dd3519 s390/mm: fix race on mm->context.flush_mm
   536ab630f4db s390/mm: fix local TLB flushing vs. detach of an mm address space
   4c7f54a0f977 net/netfilter/nf_conntrack_core: Fix net_conntrack_lock()
   2fd62929c88f PCI: pciehp: Report power fault only once until we clear it
   998a9f51bc74 PCI: shpchp: Enable bridge bus mastering if MSI is enabled
   57e4f87ebe46 ARC: Re-enable MMU upon Machine Check exception
   cf052336d0d3 tracing: Apply trace_clock changes to instance max buffer
   96cf918df428 tracing: Add barrier to trace_printk() buffer nesting modification
   100553e197e2 ftrace: Fix memleak when unregistering dynamic ops when tracing disabled
   df865f86b008 ftrace: Fix selftest goto location on error
   2a913aecc4f7 scsi: qla2xxx: Fix an integer overflow in sysfs code
   6e2a0259da7a scsi: qla2xxx: Correction to vha->vref_count timeout
   90cb12f6dc5a scsi: sg: fixup infoleak when using SG_GET_REQUEST_TABLE
   25d5a8a2958f scsi: sg: factor out sg_fill_request_table()
   c6b9a2007c92 scsi: sg: off by one in sg_ioctl()
   2b2d86b0d43d scsi: sg: use standard lists for sg_requests
   91fb151822d0 scsi: sg: remove 'save_scat_len'
   5b8f80d34abf scsi: storvsc: fix memory leak on ring buffer busy
   d8817f5f2937 scsi: megaraid_sas: Return pended IOCTLs with cmd_status MFI_STAT_WRONG_STATE in case adapter is dead
   c62da79e1be5 scsi: megaraid_sas: Check valid aen class range to avoid kernel panic
   7efc41514a01 scsi: megaraid_sas: set minimum value of resetwaittime to be 1 secs
   c24f722a82b1 scsi: zfcp: trace high part of "new" 64 bit SCSI LUN
   adbbbd349e80 scsi: zfcp: trace HBA FSF response by default on dismiss or timedout late response
   5283787709f8 scsi: zfcp: fix payload with full FCP_RSP IU in SCSI trace records
   8d706e3dd8ab scsi: zfcp: fix missing trace records for early returns in TMF eh handlers
   424a20b09617 scsi: zfcp: fix passing fsf_req to SCSI trace on TMF to correlate with HBA
   0cbb7431a762 scsi: zfcp: fix capping of unsuccessful GPN_FT SAN response trace records
   88187de0e934 scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path
   83245cd18775 scsi: zfcp: fix queuecommand for scsi_eh commands when DIX enabled
   63e606bd9551 skd: Submit requests to firmware before triggering the doorbell
   cb1441bca9bf skd: Avoid that module unloading triggers a use-after-free
   2cee78081b97 md/bitmap: disable bitmap_resize for file-backed bitmaps.
   120ec1e4cddd block: Relax a check in blk_start_queue()
   48564b51ac75 powerpc: Fix DAR reporting when alignment handler faults
   3806cea5c1c5 ext4: fix quota inconsistency during orphan cleanup for read-only mounts
   18d27cb70373 ext4: fix incorrect quotaoff if the quota feature is enabled
   e684db9a7cea crypto: AF_ALG - remove SGL terminator indicator when chaining
   dcb3a4b8d776 crypto: ccp - Fix XTS-AES-128 support on v5 CCPs
   1f143ba19a8f MIPS: math-emu: <MADDF|MSUBF>.D: Fix accuracy (64-bit case)
   d2b488ee6f63 MIPS: math-emu: <MADDF|MSUBF>.S: Fix accuracy (32-bit case)
   5cabf999fdb7 MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Clean up "maddf_flags" enumeration
   d56a9caf6d83 MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of zero inputs
   8981bcaf9a2d MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix some cases of infinite inputs
   4f8479c933a7 MIPS: math-emu: <MADDF|MSUBF>.<D|S>: Fix NaN propagation
   4e0694a6411b MIPS: math-emu: Handle zero accumulator case in MADDF and MSUBF separately
   9381a991a36a MIPS: math-emu: MINA.<D|S>: Fix some cases of infinity and zero inputs
   f7d36f6594b8 MIPS: math-emu: <MAXA|MINA>.<D|S>: Fix cases of both infinite inputs
   a04d53797fca MIPS: math-emu: <MAXA|MINA>.<D|S>: Fix cases of input values with opposite signs
   d2b6fcb0b6de MIPS: math-emu: <MAX|MIN>.<D|S>: Fix cases of both inputs negative
   694f6ea0a4e2 MIPS: math-emu: <MAX|MAXA|MIN|MINA>.<D|S>: Fix cases of both inputs zero
   b234149cf77b MIPS: math-emu: <MAX|MAXA|MIN|MINA>.<D|S>: Fix quiet NaN propagation
   fcaec235666c Input: i8042 - add Gigabyte P57 to the keyboard reset table
   6053a5fec569 pinctrl/amd: save pin registers over suspend/resume
   346abf2aca7f tty: fix __tty_insert_flip_char regression
   750462424193 tty: improve tty_insert_flip_char() slow path
   f61a07f3fe97 tty: improve tty_insert_flip_char() fast path
   2f8b06f906fd IB/addr: Fix setting source address in addr6_resolve()
   0fda166fcec8 drm/sun4i: Implement drm_driver lastclose to restore fbdev console
   a29aeb834a96 IB/{qib, hfi1}: Avoid flow control testing for RDMA write operation
   e148702302c5 orangefs: Don't clear SGID when inheriting ACLs
   39f5677232ab mm: prevent double decrease of nr_reserved_highatomic
   f609266b12d2 NFSv4: Fix callback server shutdown
   d9f9b83539ab SUNRPC: Refactor svc_set_num_threads()
   089d7720383d Linux 4.9.51
   7829684088a2 ipv6: Fix may be used uninitialized warning in rt6_check
   ae04a8c4c6fc xfs: fix compiler warnings
   7b5fcb7fc05b md/raid5: release/flush io in raid5_do_work()
   81cb6f1a2a19 xfs: use kmem_free to free return value of kmem_zalloc
   772003c6a428 xfs: open code end_buffer_async_write in xfs_finish_page_writeback
   bb69e8a228a7 xfs: don't set v3 xflags for v2 inodes
   f46a61f686b0 xfs: fix incorrect log_flushed on fsync
   0e8d7e364ec5 xfs: disable per-inode DAX flag
   a46cf59265cf xfs: relog dirty buffers during swapext bmbt owner change
   e2bb92633615 xfs: disallow marking previously dirty buffers as ordered
   a51e3e2cf3cb xfs: move bmbt owner change to last step of extent swap
   f9e583edf1a7 xfs: skip bmbt block ino validation during owner change
   fe211e1744db xfs: don't log dirty ranges for ordered buffers
   19a87a940765 xfs: refactor buffer logging into buffer dirtying helper
   93b645160192 xfs: ordered buffer log items are never formatted
   ba986b3c8498 xfs: remove unnecessary dirty bli format check for ordered bufs
   0f5af7eae884 xfs: open-code xfs_buf_item_dirty()
   81286ade81f7 xfs: check for race with xfs_reclaim_inode() in xfs_ifree_cluster()
   63d184d2955b xfs: evict all inodes involved with log redo item
   536932f39e93 xfs: stop searching for free slots in an inode chunk when there are none
   6b6505d90b77 xfs: add log recovery tracepoint for head/tail
   7549e7c01fb0 xfs: handle -EFSCORRUPTED during head/tail verification
   47db1fc608b8 xfs: fix log recovery corruption error due to tail overwrite
   e34b72a2381e xfs: always verify the log tail during recovery
   35093926c2f8 xfs: fix recovery failure when log record header wraps log end
   0800356def7f xfs: Properly retry failed inode items in case of error during buffer writeback
   7942f605c308 xfs: Add infrastructure needed for error propagation during buffer IO failure
   1ba04933408e xfs: remove xfs_trans_ail_delete_bulk
   9a3f75229090 xfs: toggle readonly state around xfs_log_mount_finish
   01d38e380746 xfs: write unmount record for ro mounts
   ec0d46ef8b7e iomap: fix integer truncation issues in the zeroing and dirtying helpers
   e1a7b7e1f6c2 xfs: don't leak quotacheck dquots when cow recovery
   7fb3e5e373bb xfs: clear MS_ACTIVE after finishing log recovery
   8edd73a13dc0 xfs: fix inobt inode allocation search optimization
   f90756d75d69 xfs: Fix per-inode DAX flag inheritance
   229980158f95 xfs: fix multi-AG deadlock in xfs_bunmapi
   81e27c94f9ab xfs: fix quotacheck dquot id overflow infinite loop
   01bc132048cf xfs: check _alloc_read_agf buffer pointer before using
   c32b1ec8a266 xfs: set firstfsb to NULLFSBLOCK before feeding it to _bmapi_write
   a6247b0189fa xfs: check _btree_check_block value
   e76496fa8554 xfs: don't crash on unexpected holes in dir/attr btrees
   b46382f02aff xfs: free cowblocks and retry on buffered write ENOSPC
   171192c92da6 xfs: free uncommitted transactions during log recovery
   621d0b75a347 xfs: don't allow bmap on rt files
   8913492d12b1 xfs: remove bli from AIL before release on transaction abort
   6c0ecde201d7 xfs: release bli from transaction properly on fs shutdown
   ce83e494d1bb xfs: try to avoid blowing out the transaction reservation when bunmaping a shared extent
   7cb011bbacef xfs: push buffer of flush locked dquot to avoid quotacheck deadlock
   85ab1b23d2d8 xfs: fix spurious spin_is_locked() assert failures on non-smp kernels
   4c1d33c4cf86 xfs: Move handling of missing page into one place in xfs_find_get_desired_pgoff()
   3fddeb80034b x86/switch_to/64: Rewrite FS/GS switching yet again to fix AMD CPUs
   0caec70692a0 x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps
   c7d1ddec251d x86/fsgsbase/64: Fully initialize FS and GS state in start_thread_common
   cc9618c9fffe f2fs: check hot_data for roll-forward recovery
   0f90297cba9b f2fs: let fill_super handle roll-forward errors
   60b94125a1fe ip_tunnel: fix setting ttl and tos value in collect_md mode
   3f60dadbe178 sctp: fix missing wake ups in some situations
   bf8ed95d2ca9 ipv6: fix typo in fib6_net_exit()
   c9335db792c0 ipv6: fix memory leak with multiple tables during netns destruction
   ca7d8a337bd3 ip6_gre: update mtu properly in ip6gre_err
   f5755c0e8700 vhost_net: correctly check tx avail during rx busy polling
   90406e68e42f gianfar: Fix Tx flow control deactivation
   1bcf18718ec6 Revert "net: fix percpu memory leaks"
   5a7a40bad254 Revert "net: use lib/percpu_counter API for fragmentation mem accounting"
   b5a3ae8b127e bridge: switchdev: Clear forward mark when transmitting packet
   73ee5a73e75f mlxsw: spectrum: Forbid linking to devices that have uppers
   a10c510179b3 tcp: initialize rcv_mss to TCP_MIN_MSS instead of 0
   a6e51fda71a2 Revert "net: phy: Correctly process PHY_HALTED in phy_stop_machine()"
   af33da0ed95f kcm: do not attach PF_KCM sockets to avoid deadlock
   8c623e5d0369 packet: Don't write vnet header beyond end of buffer
   2b3bd5972a5c cxgb4: Fix stack out-of-bounds read due to wrong size to t4_record_mbox()
   de2ecec26dba netvsc: fix deadlock betwen link status and removal
   64dfc67548da qlge: avoid memcpy buffer overflow
   08d56d8a99bb sctp: Avoid out-of-bounds reads from address storage
   4d8ee1935bcd fsl/man: Inherit parent device and of_node
   1e39e5c6a2ea udp: on peeking bad csum, drop packets even if not at head
   4b4a194a10e2 macsec: add genl family module alias
   43c792a84880 ipv6: fix sparse warning on rt6i_node
   7f8f23fc8026 ipv6: add rcu grace period before freeing fib6_node
   dccb31be7ef8 ipv6: accept 64k - 1 packet length in ip6_find_1stfragopt()
   4ad5dcaca742 Linux 4.9.50
   5b82e0e938af xfs: XFS_IS_REALTIME_INODE() should be false if no rt device present
   3885bc68ae14 NFS: Sync the correct byte range during synchronous writes
   a70912a6bfff NFS: Fix 2 use after free issues in the I/O code
   301d91e03c9d ARM: 8692/1: mm: abort uaccess retries upon fatal signal
   b40aa8b047b8 ARM64: dts: marvell: armada-37xx: Fix GIC maintenance interrupt
   6300c8bfafe0 Bluetooth: Properly check L2CAP config option output buffer length
   03bea515b9a2 ALSA: msnd: Optimize / harden DSP and MIDI loops
   d21f3eaa09c0 locktorture: Fix potential memory leak with rw lock test
   3c8381df2a56 mm/memory.c: fix mem_cgroup_oom_disable() call missing
   ebf381be016f selftests/x86/fsgsbase: Test selectors 1, 2, and 3
   0f7dbc4d5bc8 btrfs: resume qgroup rescan on rw remount
   f52a535c8438 nvme-fabrics: generate spec-compliant UUID NQNs
   b276bc66d439 mtd: nand: qcom: fix config error for BCH
   f4a272d57839 mtd: nand: qcom: fix read failure without complete bootchain
   865162031c4e mtd: nand: mxc: Fix mxc_v1 ooblayout
(From OE-Core rev: e209896a2aa7e06f1b6498e0a9fc5e9f766842f5)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>

(cherry picked from commit afbe1ecd2412c7464ba805223058ab416553b250)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
a027091807 kern-tools: make fuzzy matching optional
It was reported that BSPs that only matched the machine were
being returned as the configuration entry point. This could lead
to warnings, or unexpected runtime results.

Integrating the following commit to ensure that only strict matches
are returned by default, with a flag to do fuzzy matching

    spp: make fuzzy matching optional

    Add a flag that can be used to toggle wether or not a partial
    match is an error.

      --fuzz

    When passed, partial patching will be used. If not passed the
    default is to return nothing (which can be interpreted as an
    error by the calling routines) if both the kernel type and
    machine do not match.

(From OE-Core rev: 141a7afa9eaca5f4b7ed0fbc91f48e370c8f364d)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f60d050fef2e4ac592bb5554e74b9573e3570d0f)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
9779fc2bdd linux-yocto/4.12: stable backports and bug fixes
Integrating the following bugfixes to the 4.12 tree:

 26c1863a7448 ALSA: hda: Fix regression of hdmi eld control created based on invalid pcm
 2b020e00dd49 arm64: mm: select CONFIG_ARCH_PROC_KCORE_TEXT
 abcf00d7171c fs/proc: kcore: use kcore_list type to check for vmalloc/module address

(From OE-Core rev: 32bb62512bbec56cd1910e8955013042afab70b9)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 1027bfffb3d6118a43c5697f36b30dd8e4ae3f96)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
cb258fef83 linux-yocto/4.12: update to v4.12.14
Integrating the korg -stable releases with the following commit summary:

   fa394784e74b Linux 4.12.14
   d0fa64e2a3e8 ipv6: Fix may be used uninitialized warning in rt6_check
   7816eb3874a2 md/raid5: release/flush io in raid5_do_work()
   b57c1b424549 md/raid1/10: reset bio allocated from mempool
   c3f9d09e70a3 idr: remove WARN_ON_ONCE() when trying to replace negative ID
   a82e202cbb72 fuse: allow server to run in different pid_ns
   7b777a6cc52a x86/switch_to/64: Rewrite FS/GS switching yet again to fix AMD CPUs
   831621ada28a x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps
   90ecd1c5bc55 x86/fsgsbase/64: Fully initialize FS and GS state in start_thread_common
   cb14d4cebdb2 f2fs: check hot_data for roll-forward recovery
   96a069a6babb f2fs: let fill_super handle roll-forward errors
   442df0425e95 sctp: fix missing wake ups in some situations
   aa02286a03c7 ipv6: fix typo in fib6_net_exit()
   18c6d4c4d17a ipv6: fix memory leak with multiple tables during netns destruction
   888b7a94104a ip6_gre: update mtu properly in ip6gre_err
   88f6c6f254bf vhost_net: correctly check tx avail during rx busy polling
   fc33f146d9f1 gianfar: Fix Tx flow control deactivation
   a44bb1c4596a Revert "net: fix percpu memory leaks"
   8fbf9f919597 Revert "net: use lib/percpu_counter API for fragmentation mem accounting"
   79f08820eeb8 bridge: switchdev: Clear forward mark when transmitting packet
   2f4232ba8001 mlxsw: spectrum: Forbid linking to devices that have uppers
   a9e548de4cf9 net: fec: Allow reception of frames bigger than 1522 bytes
   b8fcbae2fefa Revert "net: phy: Correctly process PHY_HALTED in phy_stop_machine()"
   b88be44f595f net/mlx5e: Fix CQ moderation mode not set properly
   8049c41db78d net/mlx5e: Fix inline header size for small packets
   8db40bcf439f net/mlx5: E-Switch, Unload the representors in the correct order
   b0034cb5014e net/mlx5e: Properly resolve TC offloaded ipv6 vxlan tunnel source address
   53c5525785bc net/mlx5e: Don't override user RSS upon set channels
   ba008489371d net/mlx5e: Fix dangling page pointer on DMA mapping error
   7ae1eccbde90 net/mlx5: Fix arm SRQ command for ISSI version 0
   0b6b3028c005 net/mlx5e: Fix DCB_CAP_ATTR_DCBX capability for DCBNL getcap.
   9b919ad3f99f net/mlx5e: Check for qos capability in dcbnl_initialize
   31034e443fbf net: dsa: bcm_sf2: Fix number of CFP entries for BCM7278
   f9901adf536c kcm: do not attach PF_KCM sockets to avoid deadlock
   e7ebdeb47c8b packet: Don't write vnet header beyond end of buffer
   ef5a20f0cbae ipv6: do not set sk_destruct in IPV6_ADDRFORM sockopt
   440ea29af6a5 ipv6: set dst.obsolete when a cached route has expired
   24bd86e62739 cxgb4: Fix stack out-of-bounds read due to wrong size to t4_record_mbox()
   59b304fdff15 net: mvpp2: fix the mac address used when using PPv2.2
   38ca2d395e1c udp6: set rx_dst_cookie on rx_dst updates
   b4426cf20366 netvsc: fix deadlock betwen link status and removal
   3f0204b0b7b5 net: systemport: Free DMA coherent descriptors on errors
   71dd9ac555c5 net: bcmgenet: Be drop monitor friendly
   7def678f47fc net: systemport: Be drop monitor friendly
   c86a65cf30ac tipc: Fix tipc_sk_reinit handling of -EAGAIN
   8aafed19d523 qlge: avoid memcpy buffer overflow
   6da138247b47 sctp: Avoid out-of-bounds reads from address storage
   207ab5d5a250 fsl/man: Inherit parent device and of_node
   4670d7961333 bpf: fix map value attribute for hash of maps
   79d6457e8036 udp: on peeking bad csum, drop packets even if not at head
   1999821fa500 macsec: add genl family module alias
   517e43bd1eba ipv6: fix sparse warning on rt6i_node
   640efece69a4 ipv6: add rcu grace period before freeing fib6_node
   76d3e7ff2362 ipv6: accept 64k - 1 packet length in ip6_find_1stfragopt()
   5d7d2e03e0f0 Linux 4.12.13
   9f7df0bca168 xfs: XFS_IS_REALTIME_INODE() should be false if no rt device present
   da0f4931ec52 NFSv4: Fix up mirror allocation
   3307d5f5099c NFS: Sync the correct byte range during synchronous writes
   6f50e3a1b8c3 NFS: Fix 2 use after free issues in the I/O code
   7714f302294d ARM: 8692/1: mm: abort uaccess retries upon fatal signal
   b9a489e1d4a3 ARM64: dts: marvell: armada-37xx: Fix GIC maintenance interrupt
   8329b5e8c6cf Bluetooth: Properly check L2CAP config option output buffer length
   99dc1296b47c rt2800: fix TX_PIN_CFG setting for non MT7620 chips
   2bce0fe7d0cd KVM: SVM: Limit PFERR_NESTED_GUEST_PAGE error_code check to L1 guest
   9d6412aa06ce ALSA: msnd: Optimize / harden DSP and MIDI loops
   846073130799 mm/memory.c: fix mem_cgroup_oom_disable() call missing
   46791eb9f13e mm/swapfile.c: fix swapon frontswap_map memory leak on error
   637f25e5ba94 mm: kvfree the swap cluster info if the swap file is unsatisfactory
   58989dc3af0d selftests/x86/fsgsbase: Test selectors 1, 2, and 3
   9ed3dc1c0431 radix-tree: must check __radix_tree_preload() return value
   0af760ab3882 rtlwifi: btcoexist: Fix breakage of ant_sel for rtl8723be
   8004198bb025 btrfs: resume qgroup rescan on rw remount
   9a5537a76b62 nvme-fabrics: generate spec-compliant UUID NQNs
   02c54b35cad8 mtd: nand: qcom: fix config error for BCH
   f2339a072e47 mtd: nand: qcom: fix read failure without complete bootchain
   71515c37777d mtd: nand: mxc: Fix mxc_v1 ooblayout
   c54a31845019 mtd: nand: hynix: add support for 20nm NAND chips
   2b8b46b24217 mtd: nand: make Samsung SLC NAND usable again

(From OE-Core rev: 9436cea01a3dd21e08ddb4391401b57a7225bde7)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit e611aef364647a0711d0438247ce42555409c62c)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
0d84cdfaac linux-yocto/4.4: update to v4.4.93
Integrating the korg -stable updates that comprise the following shortlogs:

   e1fe3813117f Linux 4.4.93
   ad505a7b4fb0 x86/alternatives: Fix alt_max_short macro to really be a max()
   208563455aac USB: serial: console: fix use-after-free after failed setup
   6c14436b5e84 USB: serial: qcserial: add Dell DW5818, DW5819
   34592e06c7af USB: serial: option: add support for TP-Link LTE module
   ac22f49fb845 USB: serial: cp210x: add support for ELV TFD500
   b1f5a26964bf USB: serial: ftdi_sio: add id for Cypress WICED dev board
   399c46095eb5 fix unbalanced page refcounting in bio_map_user_iov
   f3b538493e66 direct-io: Prevent NULL pointer access in submit_page_section
   ac94abbb7941 usb: gadget: composite: Fix use-after-free in usb_composite_overwrite_options
   16c1ef65f4db ALSA: line6: Fix leftover URB at error-path during probe
   5b01343ad1bd ALSA: caiaq: Fix stray URB at probe error path
   ca2523c9c569 ALSA: seq: Fix copy_from_user() call inside lock
   23709ae9b614 ALSA: seq: Fix use-after-free at creating a port
   dc7c3bd09c7d ALSA: usb-audio: Kill stray URB at exiting
   050c4bbc09f1 iommu/amd: Finish TLB flush in amd_iommu_unmap()
   eb7f31673bbc usb: renesas_usbhs: Fix DMAC sequence for receiving zero-length packet
   6a92b9997028 KVM: nVMX: fix guest CR4 loading when emulating L2 to L1 exit
   03bd90fc82e4 crypto: shash - Fix zero-length shash ahash digest crash
   2929cb995378 HID: usbhid: fix out-of-bounds bug
   e7485f0f6a7b dmaengine: edma: Align the memcpy acnt array size with the transfer
   29b202ebf599 MIPS: math-emu: Remove pr_err() calls from fpu_emu()
   2fff3c5c2be7 USB: dummy-hcd: Fix deadlock caused by disconnect detection
   5fd45516595a rcu: Allow for page faults in NMI handlers
   45bd4e408040 iwlwifi: mvm: use IWL_HCMD_NOCOPY for MCAST_FILTER_CMD
   6a6c61d8467d nl80211: Define policy for packet pattern attributes
   f2bb4bcc0411 CIFS: Reconnect expired SMB sessions
   bd36826958de ext4: in ext4_seek_{hole,data}, return -ENXIO for negative offsets
   6721969c7b8a brcmfmac: add length check in brcmf_cfg80211_escan_handler()
   69f53f5d37d5 Linux 4.4.92
   82854fb438ca ext4: don't allow encrypted operations without keys
   4f22f0793cce ext4: Don't clear SGID when inheriting ACLs
   40c00e5fac3a ext4: fix data corruption for mmap writes
   90fd6738731b sched/cpuset/pm: Fix cpuset vs. suspend-resume bugs
   6d1400b09f99 nvme: protect against simultaneous shutdown invocations
   33d1fa43aad4 drm/i915/bios: ignore HDMI on port A
   b8af4466255c brcmfmac: setup passive scan if requested by user-space
   ee5bd0e4e69f uwb: ensure that endpoint is interrupt
   5a21af11c681 uwb: properly check kthread_run return value
   8b4196420dd6 iio: adc: mcp320x: Fix oops on module unload
   18215da0c241 iio: adc: mcp320x: Fix readout of negative voltages
   f2f68ec0b284 iio: ad7793: Fix the serial interface reset
   2c29a3868090 iio: core: Return error for failed read_reg
   b86df98578ab staging: iio: ad7192: Fix - use the dedicated reset function avoiding dma from stack.
   4b9c62a00aea iio: ad_sigma_delta: Implement a dedicated reset function
   0bab54141bac iio: adc: twl4030: Disable the vusb3v1 rugulator in the error handling path of 'twl4030_madc_probe()'
   0141f858d2e1 iio: adc: twl4030: Fix an error handling path in 'twl4030_madc_probe()'
   4590ed795f0c xhci: fix finding correct bus_state structure for USB 3.1 hosts
   13713e63bdb3 USB: fix out-of-bounds in usb_set_configuration
   ddcbaf853dc5 usb: Increase quirk delay for USB devices
   feab51a916ed USB: core: harden cdc_parse_cdc_header
   5d9a9c3dcc1f USB: uas: fix bug in handling of alternate settings
   9e78ac87626a scsi: sd: Do not override max_sectors_kb sysfs setting
   fc29713fa7c7 iwlwifi: add workaround to disable wide channels in 5GHz
   146a9dc99025 HID: i2c-hid: allocate hid buffers for real worst case
   87509592ecc3 ftrace: Fix kmemleak in unregister_ftrace_graph
   60623d7ca38d stm class: Fix a use-after-free
   c85e9442f9e4 Drivers: hv: fcopy: restore correct transfer length
   2b91a52e1569 driver core: platform: Don't read past the end of "driver_override" buffer
   6d1bc9ee4c2d ALSA: usx2y: Suppress kernel warning at page allocation failures
   8cff1556ddbc ALSA: compress: Remove unused variable
   dd1f96a0a72c lsm: fix smack_inode_removexattr and xattr_getsecurity memleak
   a44be3e548e4 USB: g_mass_storage: Fix deadlock when driver is unbound
   2efab2c3a3ae usb: gadget: mass_storage: set msg_registered after msg registered
   b74a45450f80 USB: devio: Don't corrupt user memory
   e84b4a008365 USB: dummy-hcd: Fix erroneous synchronization change
   d1a0787b5a24 USB: dummy-hcd: fix infinite-loop resubmission bug
   d25a65e03f18 USB: dummy-hcd: fix connection failures (wrong speed)
   da358168126b usb: pci-quirks.c: Corrected timeout values used in handshake
   46c7b1fa4911 ALSA: usb-audio: Check out-of-bounds access by corrupted buffer descriptor
   ccc6a475800d usb: renesas_usbhs: fix usbhsf_fifo_clear() for RX direction
   a7131ed81805 usb: renesas_usbhs: fix the BCLR setting condition for non-DCP pipe
   e85bd5be6088 usb-storage: unusual_devs entry to fix write-access regression for Seagate external drives
   86377bf33089 usb: gadget: udc: atmel: set vbus irqflags explicitly
   f72264e79ae7 USB: gadgetfs: fix copy_to_user while holding spinlock
   d20fff0b09d9 USB: gadgetfs: Fix crash caused by inadequate synchronization
   c2eb312f3137 usb: gadget: inode.c: fix unbalanced spin_lock in ep0_write
   c030c36a88cd Linux 4.4.91
   2536c20e8285 ttpci: address stringop overflow warning
   2b2bfb537be4 ALSA: au88x0: avoid theoretical uninitialized access
   d32ee7026081 ARM: remove duplicate 'const' annotations'
   7cad91f22d5e IB/qib: fix false-postive maybe-uninitialized warning
   13af23e01812 drivers: firmware: psci: drop duplicate const from psci_of_match
   f6c8c71cc901 libata: transport: Remove circular dependency at free time
   0185496a115d xfs: remove kmem_zalloc_greedy
   088b9a41b605 i2c: meson: fix wrong variable usage in meson_i2c_put_data
   cb07496eab43 md/raid10: submit bio directly to replacement disk
   13099ee9c7d5 rds: ib: add error handle
   9bcd5ceef96e iommu/io-pgtable-arm: Check for leaf entry before dereferencing it
   cadfa3a688d2 parisc: perf: Fix potential NULL pointer dereference
   4203f2a73882 netfilter: nfnl_cthelper: fix incorrect helper->expect_class_max
   fa029020bddd exynos-gsc: Do not swap cb/cr for semi planar formats
   8bd7216d3386 MIPS: IRQ Stack: Unwind IRQ stack onto task stack
   f7f46b3ba20d netfilter: invoke synchronize_rcu after set the _hook_ to NULL
   e29066778bc2 bridge: netlink: register netdevice before executing changelink
   1b760fdad9f0 mmc: sdio: fix alignment issue in struct sdio_func
   e1e99dc319cc usb: plusb: Add support for PL-27A1
   4212115da67b team: fix memory leaks
   fa63895f47c9 net/packet: check length in getsockopt() called with PACKET_HDRLEN
   b9ff317b5cd4 net: core: Prevent from dereferencing null pointer when releasing SKB
   4e6cdc0a7dec MIPS: Lantiq: Fix another request_mem_region() return code check
   c5710390cc76 ASoC: dapm: fix some pointer error handling
   7b8c9e6e0fca usb: chipidea: vbus event may exist before starting gadget
   093fe104c5bb audit: log 32-bit socketcalls
   af3749456042 ASoC: dapm: handle probe deferrals
   8e8c3d4bb629 partitions/efi: Fix integer overflow in GPT size calculation
   abbccd855753 USB: serial: mos7840: fix control-message error handling
   0d1b459a0baf USB: serial: mos7720: fix control-message error handling
   8b2522eb44ae drm/amdkfd: fix improper return value on error
   bf184ddd2180 IB/ipoib: Replace list_del of the neigh->list with list_del_init
   f1d53c6d4843 IB/ipoib: rtnl_unlock can not come after free_netdev
   9326a1374b13 IB/ipoib: Fix deadlock over vlan_mutex
   01b3db29ba1e tty: goldfish: Fix a parameter of a call to free_irq
   f97c79e83f7e ARM: 8635/1: nommu: allow enabling REMAP_VECTORS_TO_RAM
   89642710fdb3 iio: adc: hx711: Add DT binding for avia,hx711
   a1f7b8ff496d iio: adc: axp288: Drop bogus AXP288_ADC_TS_PIN_CTRL register modifications
   297b8b01ec27 hwmon: (gl520sm) Fix overflows and crash seen when writing into limit attributes
   d89f41c20f32 sh_eth: use correct name for ECMR_MPDE bit
   effdf2b134d5 extcon: axp288: Use vbus-valid instead of -present to determine cable presence
   5603b10236da igb: re-assign hw address pointer on reset after PCI error
   1c3ef07eb8eb MIPS: ralink: Fix incorrect assignment on ralink_soc
   1e35a2adc078 MIPS: Ensure bss section ends on a long-aligned address
   b00cfc01e70f ARM: dts: r8a7790: Use R-Car Gen 2 fallback binding for msiof nodes
   6a501bddeba3 RDS: RDMA: Fix the composite message user notification
   d4f97441cb88 GFS2: Fix reference to ERR_PTR in gfs2_glock_iter_next
   11bf4a8e1d5a drm: bridge: add DT bindings for TI ths8135
   771dacea92cd drm_fourcc: Fix DRM_FORMAT_MOD_LINEAR #define
   37c2d0d3e850 Linux 4.4.90
   228969b4764f fix xen_swiotlb_dma_mmap prototype
   079c03f4a915 swiotlb-xen: implement xen_swiotlb_dma_mmap callback
   27323cb81eae video: fbdev: aty: do not leak uninitialized padding in clk to userspace
   150cd84bb6ea KVM: VMX: use cmpxchg64
   90df2daa1da0 ARM: pxa: fix the number of DMA requestor lines
   c575be9a393f ARM: pxa: add the number of DMA requestor lines
   a85f176c857e dmaengine: mmp-pdma: add number of requestors
   6124ed1a712a cxl: Fix driver use count
   9037837e0c32 KVM: VMX: remove WARN_ON_ONCE in kvm_vcpu_trigger_posted_interrupt
   fc39e561e343 KVM: VMX: do not change SN bit in vmx_update_pi_irte()
   5e9b526fcc90 timer/sysclt: Restrict timer migration sysctl values to 0 and 1
   ddf25aea679d gfs2: Fix debugfs glocks dump
   d25fea066a8e x86/fpu: Don't let userspace set bogus xcomp_bv
   4c16afac1875 btrfs: prevent to set invalid default subvolid
   0efde43517a5 btrfs: propagate error to btrfs_cmp_data_prepare caller
   9a7d93dd2cad btrfs: fix NULL pointer dereference from free_reloc_roots()
   b08dc7d4cfa1 PCI: Fix race condition with driver_override
   21a638c5efd6 kvm: nVMX: Don't allow L2 to access the hardware CR8
   7520be6a454c KVM: VMX: Do not BUG() on out-of-bounds guest IRQ
   e726c30c758b arm64: fault: Route pte translation faults via do_translation_fault
   638e7874f682 arm64: Make sure SPsel is always set
   9237605e0bfb seccomp: fix the usage of get/put_seccomp_filter() in seccomp_get_filter()
   668cee82cd28 bsg-lib: don't free job in bsg_prepare_job
   9d74367d1a35 nl80211: check for the required netlink attributes presence
   3393445ef440 vfs: Return -ENXIO for negative SEEK_HOLE / SEEK_DATA offsets
   3bb7084cc031 SMB3: Don't ignore O_SYNC/O_DSYNC and O_DIRECT flags
   02ef29f9cbb6 SMB: Validate negotiate (to protect against downgrade) even if signing off
   c096b31f9d9a Fix SMB3.1.1 guest authentication to Samba
   fe37a445ea3f powerpc/pseries: Fix parent_dn reference leak in add_dt_node()
   638b38505045 KEYS: prevent KEYCTL_READ on negative key
   539255aea88e KEYS: prevent creating a different user's keyrings
   af24e9d8ba1a KEYS: fix writing past end of user-supplied buffer in keyring_read()
   362711d59b0c crypto: talitos - fix sha224
   231c4f646b77 crypto: talitos - Don't provide setkey for non hmac hashing algs.
   9d2534917c25 scsi: scsi_transport_iscsi: fix the issue that iscsi_if_rx doesn't parse nlmsg properly
   29854a77f793 md/raid5: preserve STRIPE_ON_UNPLUG_LIST in break_stripe_batch_list
   d03d1567866e md/raid5: fix a race condition in stripe batch
   68a4a5289918 tracing: Erase irqsoff trace with empty write
   9c5afa726a52 tracing: Fix trace_pipe behavior for instance traces
   f75c0042f120 KVM: PPC: Book3S: Fix race and leak in kvm_vm_ioctl_create_spapr_tce()
   7d8fbf3db169 mac80211: flush hw_roc_start work before cancelling the ROC
   fcc949a48842 cifs: release auth_key.response for reconnect.
   10def3a67799 Linux 4.4.89
   ed1bf4397d22 ftrace: Fix memleak when unregistering dynamic ops when tracing disabled
   a069d0a43de4 bcache: fix bch_hprint crash and improve output
   f522051a84e5 bcache: fix for gc and write-back race
   a6c5e7a0cd01 bcache: Correct return value for sysfs attach errors
   d9c6a28a6a1c bcache: correct cache_dirty_target in __update_writeback_rate()
   0471f58e18e6 bcache: do not subtract sectors_to_gc for bypassed IO
   093457f2bd32 bcache: Fix leak of bdev reference
   5025da3b532b bcache: initialize dirty stripes in flash_dev_run()
   4931578fbeb5 media: uvcvideo: Prevent heap overflow when accessing mapped controls
   04affe4e1171 media: v4l2-compat-ioctl32: Fix timespec conversion
   7498bd605840 PCI: shpchp: Enable bridge bus mastering if MSI is enabled
   81306fc3dbb5 ARC: Re-enable MMU upon Machine Check exception
   d28e96be7c6a tracing: Apply trace_clock changes to instance max buffer
   753154fcfefe ftrace: Fix selftest goto location on error
   d8663aa27789 scsi: qla2xxx: Fix an integer overflow in sysfs code
   72896ca30a7f scsi: sg: fixup infoleak when using SG_GET_REQUEST_TABLE
   c04996ad58ee scsi: sg: factor out sg_fill_request_table()
   f0cd701d4750 scsi: sg: off by one in sg_ioctl()
   3682e0c61ffb scsi: sg: use standard lists for sg_requests
   6b498ad14472 scsi: sg: remove 'save_scat_len'
   cf22210c66ca scsi: storvsc: fix memory leak on ring buffer busy
   b4730f456e21 scsi: megaraid_sas: Return pended IOCTLs with cmd_status MFI_STAT_WRONG_STATE in case adapter is dead
   d9b8f1ccbb8c scsi: megaraid_sas: Check valid aen class range to avoid kernel panic
   4dd6cbbc2191 scsi: zfcp: trace high part of "new" 64 bit SCSI LUN
   1e6c640a75d0 scsi: zfcp: trace HBA FSF response by default on dismiss or timedout late response
   7194822422f9 scsi: zfcp: fix payload with full FCP_RSP IU in SCSI trace records
   d0fbe221b8f1 scsi: zfcp: fix missing trace records for early returns in TMF eh handlers
   1a847369487c scsi: zfcp: fix passing fsf_req to SCSI trace on TMF to correlate with HBA
   52661717ee66 scsi: zfcp: fix capping of unsuccessful GPN_FT SAN response trace records
   d0c02c6f3e85 scsi: zfcp: add handling for FCP_RESID_OVER to the fcp ingress path
   cfc49967434d scsi: zfcp: fix queuecommand for scsi_eh commands when DIX enabled
   19978c50db68 skd: Submit requests to firmware before triggering the doorbell
   0bcaf5178fe6 skd: Avoid that module unloading triggers a use-after-free
   f05dafbd7791 md/bitmap: disable bitmap_resize for file-backed bitmaps.
   30e81e7fe197 block: Relax a check in blk_start_queue()
   a918d32583e0 powerpc: Fix DAR reporting when alignment handler faults
   c53f01698f68 ext4: fix quota inconsistency during orphan cleanup for read-only mounts
   cd46241eb03c ext4: fix incorrect quotaoff if the quota feature is enabled
   5e9d28b003b0 crypto: AF_ALG - remove SGL terminator indicator when chaining
   9354f4d0beb0 MIPS: math-emu: MINA.<D|S>: Fix some cases of infinity and zero inputs
   f4d77fc754f2 MIPS: math-emu: <MAXA|MINA>.<D|S>: Fix cases of both infinite inputs
   322bf697bdc4 MIPS: math-emu: <MAXA|MINA>.<D|S>: Fix cases of input values with opposite signs
   a83ffb581f26 MIPS: math-emu: <MAX|MIN>.<D|S>: Fix cases of both inputs negative
   6acd1d26c32e MIPS: math-emu: <MAX|MAXA|MIN|MINA>.<D|S>: Fix cases of both inputs zero
   b6c818d813c6 MIPS: math-emu: <MAX|MAXA|MIN|MINA>.<D|S>: Fix quiet NaN propagation
   bf592dde1262 Input: i8042 - add Gigabyte P57 to the keyboard reset table
   c13c5c7e88d7 tty: fix __tty_insert_flip_char regression
   077933dcd5ca tty: improve tty_insert_flip_char() slow path
   e1e6620f042c tty: improve tty_insert_flip_char() fast path
   c576160ff3f3 mm: prevent double decrease of nr_reserved_highatomic
   6ea627b20205 nfsd: Fix general protection fault in release_lock_stateid()
   d5c59ee84820 md/raid5: release/flush io in raid5_do_work()
   e21d66048d4d x86/fsgsbase/64: Report FSBASE and GSBASE correctly in core dumps
   53e5f7b8d41b f2fs: check hot_data for roll-forward recovery
   be9994817ad5 ipv6: fix typo in fib6_net_exit()
   70479eafe3d9 ipv6: fix memory leak with multiple tables during netns destruction
   9b5e5d8a0045 gianfar: Fix Tx flow control deactivation
   5f529e0d7844 Revert "net: fix percpu memory leaks"
   40bc5355e134 Revert "net: use lib/percpu_counter API for fragmentation mem accounting"
   611a98c8eca3 tcp: initialize rcv_mss to TCP_MIN_MSS instead of 0
   081be8c9efd6 Revert "net: phy: Correctly process PHY_HALTED in phy_stop_machine()"
   6d8c8fd1c4c7 qlge: avoid memcpy buffer overflow
   354d36b746c3 ipv6: fix sparse warning on rt6i_node
   e51bf99be7cc ipv6: add rcu grace period before freeing fib6_node
   6eb7ae1223f7 ipv6: accept 64k - 1 packet length in ip6_find_1stfragopt()
   b52c9082f2eb Linux 4.4.88
   ad3903434142 xfs: XFS_IS_REALTIME_INODE() should be false if no rt device present
   677a80364049 NFS: Fix 2 use after free issues in the I/O code
   84478477d0b8 ARM: 8692/1: mm: abort uaccess retries upon fatal signal
   f7ec367c8ea7 Bluetooth: Properly check L2CAP config option output buffer length
   556814701545 ALSA: msnd: Optimize / harden DSP and MIDI loops
   10863607c242 locktorture: Fix potential memory leak with rw lock test
   693b7f62a439 btrfs: resume qgroup rescan on rw remount
   f4596ead66a7 drm/bridge: adv7511: Re-write the i2c address before EDID probing
   e22a4308547c drm/bridge: adv7511: Switch to using drm_kms_helper_hotplug_event()
   9183e45db777 drm/bridge: adv7511: Use work_struct to defer hotplug handing to out of irq context
   c634cecad4c1 drm/bridge: adv7511: Fix mutex deadlock when interrupts are disabled
   aea7e5ce4a52 drm: adv7511: really enable interrupts for EDID detection
   a2e71dcfb0d4 scsi: sg: recheck MMAP_IO request length with lock held
   0d7592a03b8a scsi: sg: protect against races between mmap() and SG_SET_RESERVED_SIZE
   9a4cabf3bf8b cs5536: add support for IDE controller variant
   302364990c05 workqueue: Fix flag collision
   966e3a2d98c1 drm/nouveau/pci/msi: disable MSI on big-endian platforms by default
   4a9c294d7b1e mwifiex: correct channel stat buffer overflows
   926374f5e669 dlm: avoid double-free on error path in dlm_device_{register,unregister}
   bf3a0acce440 Bluetooth: Add support of 13d3:3494 RTL8723BE device
   ca245a6414e4 rtlwifi: rtl_pci_probe: Fix fail path of _rtl_pci_find_adapter
   c5b8e1dd9629 Input: trackpoint - assume 3 buttons when buttons detection fails
   2c65494080c9 ath10k: fix memory leak in rx ring buffer allocation
   69eeacb5cd87 intel_th: pci: Add Cannon Lake PCH-LP support
   eb98d15d3cbe intel_th: pci: Add Cannon Lake PCH-H support
   1875ed81c2b7 driver core: bus: Fix a potential double free
   f3584d55a8d8 staging/rts5208: fix incorrect shift to extract upper nybble
   812e484133fb USB: core: Avoid race of async_completed() w/ usbdev_release()
   9f1d78c62a4b usb:xhci:Fix regression when ATI chipsets detected
   b3e92cd7a820 usb: Add device quirk for Logitech HD Pro Webcam C920-C
   6e957a81c77f USB: serial: option: add support for D-Link DWM-157 C1
   f7a0f7318c27 usb: quirks: add delay init quirk for Corsair Strafe RGB keyboard

(From OE-Core rev: 8abd7663e6780fcda81ed44da9f90a2f6233e3a9)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit e3ae1935a0e5fe0d5867250ef62ae8ffd08b5b4e)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Bruce Ashfield
f609c3f755 linux-yocto/4.12: configuration and feature updates
Integrating features and new configurations for the 4.12 kernel.
With this update, a CGL-ready kernel can be configured out of
the box.

(From OE-Core rev: e0d3407289f8a494d76618d0e2a506657b70cd5e)

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 43c5846e22d246dde314657dbf90f9752b06a54c)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Richard Purdie
9217de77b9 rng-tools: Fix crazy defaults
Feeding the output of /dev/urandom into /dev/random is pretty much insane
and not something we should encourage.

I can't really imagine a scenario where this would be a sensible idea since
/dev/urandom if effectively derived from /dev/random.

This changes the tool to default to /dev/hwrng which makes much more sense,
feeding hardware entropy into the random pool. In the QEMU case, this will
feed entropy from the host into the guests which is also what we want.

Yes, this change will cause rngd not to start if /dev/hwrng isn't present,
but it isn't needed if that isn't so I don't see this as a bad thing.

(https://wiki.archlinux.org/index.php/Rng-tools has a section in red which
agrees with the above, "this is a really bad idea, since you are simple
filling the kernel entropy pool with entropy coming from the kernel itself!")

(From OE-Core rev: d177516d846ec4bed483d7e9d80775bb341c869e)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit f1dc9ac46710814c27cae2d22e79c84a9522993a)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Richard Purdie
87f8aafd53 oe-buildenv-internal: Fix finding build directory
The intent of the env setup scripts is to set BBPATH to point at the
build directory. This means if the user changes directory, bitbake can
still find the original build directory. The default bblayers.conf files
reset BBPATH to the correct components so this is safe and restores the
behaviour the script was intended to have.

[YOCTO #12163]

(From OE-Core rev: bfacf88f15a27db579d8790d92f8497d832961f8)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 82eeb934997c9eaa6443079dfb649a89872a222c)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Artur Mądrzak
6709452171 wic: add 'part-name' argument for naming GPT partitions
The WIC's 'part' can now give a name for GPT partition in WKS file.
It's similar to '--label', but is naming partintions instead file systems.
It's required by some bootloaders to partitions have specified names.

Backport from master, without it WIC cannot be used on Qualcomm based machines.

(From OE-Core rev: 45aee3d57697f8dcc967120b5afd280d5ceadd21)

Signed-off-by: Artur Mądrzak <artur@madrzak.eu>
Signed-off-by: Nicolas Dechesne <nicolas.dechesne@linaro.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
(cherry picked from commit 9b60e3466ed7cff0cea10815851eb1304002eb52)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-12-04 17:23:54 +00:00
Richard Purdie
f7b90ab3ea bitbake: main: Give a user readable error if we can't locate topdir
Currently if you run bitbake in an invalid directory, the user experience
is poor:

birbake/lib/bb/main.py", line 427, in setup_bitbake
    topdir, lock = lockBitbake()
  File "./bitbake/lib/bb/main.py", line 494, in lockBitbake
    lockfile = topdir + "/bitbake.lock"
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

This ensures we exit straight away with a better error message.

[YOCTO #12163]

(Bitbake rev: 2a931d5e4ac092ce275f3a51e22b802689f511e6)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-10-31 09:09:27 +00:00
Paul Eggleton
7226a1c600 bitbake: cooker: fix watching directories with Python 3.6+
In Python 3.6, glob.glob() was reimplemented to use os.scandir() (which
itself appeared in Python 3.5), thus our monkey patching of os.listdir()
here was no longer effective. The end result was not only that bitbake
wouldn't notice added recipes or bbappends with BB_SERVER_TIMEOUT set
when being run with Python 3.6 (the shipped Python version on Fedora 26
and some other distribution versions), it also broke devtool modify,
devtool upgrade and devtool extract since they rely on the ability to
create a bbappend on the fly and have bitbake pick it up.

To fix it, do the same monkey patching for os.scandir(), which needs to
be conditional upon that actually existing since we have to support
Python 3.4 that doesn't have it. Long term we should probably look for a
better way to handle this that doesn't involve monkey patching Python
library code.

Fixes [YOCTO #12185].

(Bitbake rev: d57c4718a3a1eb7b8397085c307fcb0bec6454ef)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2017-10-31 09:09:27 +00:00
2409 changed files with 78581 additions and 70183 deletions

10
.gitignore vendored
View File

@@ -18,13 +18,9 @@ hob-image-*.bb
!meta-yocto
!meta-yocto-bsp
!meta-yocto-imported
/documentation/*/eclipse/
/documentation/*/*.html
/documentation/*/*.pdf
/documentation/*/*.tgz
/bitbake/doc/bitbake-user-manual/bitbake-user-manual.html
/bitbake/doc/bitbake-user-manual/bitbake-user-manual.pdf
/bitbake/doc/bitbake-user-manual/bitbake-user-manual.tgz
documentation/user-manual/user-manual.html
documentation/user-manual/user-manual.pdf
documentation/user-manual/user-manual.tgz
pull-*/
bitbake/lib/toaster/contrib/tts/backlog.txt
bitbake/lib/toaster/contrib/tts/log/*

View File

@@ -23,4 +23,3 @@ therefore provides compatibility with the following caveats:
* libpng 1.2 isn't provided; oe-core includes the latest release of libpng
instead.
* pax (POSIX standard archive) tool is not provided.

View File

@@ -38,7 +38,7 @@ from bb.main import bitbake_main, BitBakeConfigParameters, BBMainException
if sys.getfilesystemencoding() != "utf-8":
sys.exit("Please use a locale setting which supports UTF-8 (such as LANG=en_US.UTF-8).\nPython can't change the filesystem locale after loading so we need a UTF-8 when Python starts or things won't work.")
__version__ = "1.38.0"
__version__ = "1.36.0"
if __name__ == "__main__":
if __version__ != bb.__version__:

View File

@@ -18,12 +18,10 @@
# along with this program. If not, see http://www.gnu.org/licenses/.
HELP="
Usage: source toaster start|stop [webport=<address:port>] [noweb] [nobuild] [toasterdir]
Usage: source toaster start|stop [webport=<address:port>] [noweb]
Optional arguments:
[nobuild] Setup the environment for capturing builds with toaster but disable managed builds
[noweb] Setup the environment for capturing builds with toaster but don't start the web server
[noweb] Setup the environment for building with toaster but don't start the development server
[webport] Set the development server (default: localhost:8000)
[toasterdir] Set absolute path to be used as TOASTER_DIR (default: BUILDDIR/../)
"
custom_extention()
@@ -69,7 +67,7 @@ webserverKillAll()
if [ -f ${pidfile} ]; then
pid=`cat ${pidfile}`
while kill -0 $pid 2>/dev/null; do
kill -SIGTERM $pid 2>/dev/null
kill -SIGTERM -$pid 2>/dev/null
sleep 1
done
rm ${pidfile}
@@ -92,7 +90,7 @@ webserverStartAll()
echo "Starting webserver..."
$MANAGE runserver --noreload "$ADDR_PORT" \
$MANAGE runserver "$ADDR_PORT" \
</dev/null >>${BUILDDIR}/toaster_web.log 2>&1 \
& echo $! >${BUILDDIR}/.toastermain.pid
@@ -161,9 +159,7 @@ fi
export BBBASEDIR=`dirname $TOASTER`/..
MANAGE="python3 $BBBASEDIR/lib/toaster/manage.py"
if [ -z "$OE_ROOT" ]; then
OE_ROOT=`dirname $TOASTER`/../..
fi
OE_ROOT=`dirname $TOASTER`/../..
# this is the configuraton file we are using for toaster
# we are using the same logic that oe-setup-builddir uses
@@ -187,18 +183,13 @@ unset OE_ROOT
WEBSERVER=1
export TOASTER_BUILDSERVER=1
ADDR_PORT="localhost:8000"
TOASTERDIR=`dirname $BUILDDIR`
unset CMD
for param in $*; do
case $param in
noweb )
WEBSERVER=0
;;
nobuild )
TOASTER_BUILDSERVER=0
;;
start )
CMD=$param
;;
@@ -215,9 +206,6 @@ for param in $*; do
ADDR_PORT="localhost:$PORT"
fi
;;
toasterdir=*)
TOASTERDIR="${param#*=}"
;;
--help)
echo "$HELP"
return 0
@@ -248,7 +236,7 @@ fi
# 2) the build dir (in build)
# 3) the sqlite db if that is being used.
# 4) pid's we need to clean up on exit/shutdown
export TOASTER_DIR=$TOASTERDIR
export TOASTER_DIR=`dirname $BUILDDIR`
export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE TOASTER_DIR"
# Determine the action. If specified by arguments, fine, if not, toggle it
@@ -298,13 +286,9 @@ case $CMD in
return 4
fi
export BITBAKE_UI='toasterui'
if [ $TOASTER_BUILDSERVER -eq 1 ] ; then
$MANAGE runbuilds \
</dev/null >>${BUILDDIR}/toaster_runbuilds.log 2>&1 \
& echo $! >${BUILDDIR}/.runbuilds.pid
else
echo "Toaster build server not started."
fi
$MANAGE runbuilds \
</dev/null >>${BUILDDIR}/toaster_runbuilds.log 2>&1 \
& echo $! >${BUILDDIR}/.runbuilds.pid
# set fail safe stop system on terminal exit
trap stop_system SIGHUP

View File

@@ -2,7 +2,7 @@
# ex:ts=4:sw=4:sts=4:et
# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
#
# Copyright (C) 2012, 2018 Wind River Systems, Inc.
# Copyright (C) 2012 Wind River Systems, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
@@ -18,68 +18,51 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Used for dumping the bb_cache.dat
# This is used for dumping the bb_cache.dat, the output format is:
# recipe_path PN PV PACKAGES
#
import os
import sys
import argparse
import warnings
# For importing bb.cache
sys.path.insert(0, os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), '../lib'))
from bb.cache import CoreRecipeInfo
import pickle
import pickle as pickle
class DumpCache(object):
def __init__(self):
parser = argparse.ArgumentParser(
description="bb_cache.dat's dumper",
epilog="Use %(prog)s --help to get help")
parser.add_argument("-r", "--recipe",
help="specify the recipe, default: all recipes", action="store")
parser.add_argument("-m", "--members",
help = "specify the member, use comma as separator for multiple ones, default: all members", action="store", default="")
parser.add_argument("-s", "--skip",
help = "skip skipped recipes", action="store_true")
parser.add_argument("cachefile",
help = "specify bb_cache.dat", nargs = 1, action="store", default="")
def main(argv=None):
"""
Get the mapping for the target recipe.
"""
if len(argv) != 1:
print("Error, need one argument!", file=sys.stderr)
return 2
self.args = parser.parse_args()
cachefile = argv[0]
def main(self):
with open(self.args.cachefile[0], "rb") as cachefile:
pickled = pickle.Unpickler(cachefile)
while True:
try:
key = pickled.load()
val = pickled.load()
except Exception:
break
if isinstance(val, CoreRecipeInfo):
pn = val.pn
with open(cachefile, "rb") as cachefile:
pickled = pickle.Unpickler(cachefile)
while cachefile:
try:
key = pickled.load()
val = pickled.load()
except Exception:
break
if isinstance(val, CoreRecipeInfo) and (not val.skipped):
pn = val.pn
# Filter out the native recipes.
if key.startswith('virtual:native:') or pn.endswith("-native"):
continue
if self.args.recipe and self.args.recipe != pn:
continue
# 1.0 is the default version for a no PV recipe.
if "pv" in val.__dict__:
pv = val.pv
else:
pv = "1.0"
if self.args.skip and val.skipped:
continue
if self.args.members:
out = key
for member in self.args.members.split(','):
out += ": %s" % val.__dict__.get(member)
print("%s" % out)
else:
print("%s: %s" % (key, val.__dict__))
elif not self.args.recipe:
print("%s %s" % (key, val))
print("%s %s %s %s" % (key, pn, pv, ' '.join(val.packages)))
if __name__ == "__main__":
try:
dump = DumpCache()
ret = dump.main()
except Exception as esc:
ret = 1
import traceback
traceback.print_exc()
sys.exit(ret)
sys.exit(main(sys.argv[1:]))

View File

@@ -781,7 +781,7 @@
The code in <filename>meta/lib/oe/sstatesig.py</filename> shows two examples
of this and also illustrates how you can insert your own policy into the system
if so desired.
This file defines the two basic signature generators OpenEmbedded-Core
This file defines the two basic signature generators OpenEmbedded Core
uses: "OEBasic" and "OEBasicHash".
By default, there is a dummy "noop" signature handler enabled in BitBake.
This means that behavior is unchanged from previous versions.

View File

@@ -777,43 +777,6 @@
</para>
</section>
<section id='repo-fetcher'>
<title>Repo Fetcher (<filename>repo://</filename>)</title>
<para>
This fetcher submodule fetches code from
<filename>google-repo</filename> source control system.
The fetcher works by initiating and syncing sources of the
repository into
<link linkend='var-REPODIR'><filename>REPODIR</filename></link>,
which is usually
<link linkend='var-DL_DIR'><filename>DL_DIR</filename></link><filename>/repo</filename>.
</para>
<para>
This fetcher supports the following parameters:
<itemizedlist>
<listitem><para>
<emphasis>"protocol":</emphasis>
Protocol to fetch the repository manifest (default: git).
</para></listitem>
<listitem><para>
<emphasis>"branch":</emphasis>
Branch or tag of repository to get (default: master).
</para></listitem>
<listitem><para>
<emphasis>"manifest":</emphasis>
Name of the manifest file (default: <filename>default.xml</filename>).
</para></listitem>
</itemizedlist>
Here are some example URLs:
<literallayout class='monospaced'>
SRC_URI = "repo://REPOROOT;protocol=git;branch=some_branch;manifest=my_manifest.xml"
SRC_URI = "repo://REPOROOT;protocol=file;branch=some_branch;manifest=my_manifest.xml"
</literallayout>
</para>
</section>
<section id='other-fetchers'>
<title>Other Fetchers</title>
@@ -832,6 +795,9 @@
<listitem><para>
Secure Shell (<filename>ssh://</filename>)
</para></listitem>
<listitem><para>
Repo (<filename>repo://</filename>)
</para></listitem>
<listitem><para>
OSC (<filename>osc://</filename>)
</para></listitem>

View File

@@ -260,7 +260,7 @@
files.
For this example, you need to create the file in your project directory
and define some key BitBake variables.
For more information on the <filename>bitbake.conf</filename> file,
For more information on the <filename>bitbake.conf</filename>,
see
<ulink url='http://git.openembedded.org/bitbake/tree/conf/bitbake.conf'></ulink>.
</para>
@@ -273,32 +273,14 @@
some editor to create the <filename>bitbake.conf</filename>
so that it contains the following:
<literallayout class='monospaced'>
<link linkend='var-PN'>PN</link> = "${@bb.parse.BBHandler.vars_from_file(d.getVar('FILE', False),d)[0] or 'defaultpkgname'}"
</literallayout>
<literallayout class='monospaced'>
TMPDIR = "${<link linkend='var-TOPDIR'>TOPDIR</link>}/tmp"
<link linkend='var-CACHE'>CACHE</link> = "${TMPDIR}/cache"
<link linkend='var-STAMP'>STAMP</link> = "${TMPDIR}/${PN}/stamps"
<link linkend='var-T'>T</link> = "${TMPDIR}/${PN}/work"
<link linkend='var-B'>B</link> = "${TMPDIR}/${PN}"
<link linkend='var-STAMP'>STAMP</link> = "${TMPDIR}/stamps"
<link linkend='var-T'>T</link> = "${TMPDIR}/work"
<link linkend='var-B'>B</link> = "${TMPDIR}"
</literallayout>
<note>
Without a value for <filename>PN</filename>, the
variables <filename>STAMP</filename>,
<filename>T</filename>, and <filename>B</filename>,
prevent more than one recipe from working. You can fix
this by either setting <filename>PN</filename> to have
a value similar to what OpenEmbedded and BitBake use
in the default <filename>bitbake.conf</filename> file
(see previous example). Or, by manually updating each
recipe to set <filename>PN</filename>. You will also
need to include <filename>PN</filename> as part of the
<filename>STAMP</filename>, <filename>T</filename>, and
<filename>B</filename> variable definitions in the
<filename>local.conf</filename> file.
</note>
The <filename>TMPDIR</filename> variable establishes a directory
that BitBake uses for build output and intermediate files other
that BitBake uses for build output and intermediate files (other
than the cached information used by the
<link linkend='setscene'>Setscene</link> process.
Here, the <filename>TMPDIR</filename> directory is set to
@@ -318,19 +300,19 @@
file exists, you can run the <filename>bitbake</filename>
command again:
<literallayout class='monospaced'>
$ bitbake
ERROR: Traceback (most recent call last):
File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 163, in wrapped
return func(fn, *args)
File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 177, in _inherit
bb.parse.BBHandler.inherit(bbclass, "configuration INHERITs", 0, data)
File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/BBHandler.py", line 92, in inherit
include(fn, file, lineno, d, "inherit")
File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/ConfHandler.py", line 100, in include
raise ParseError("Could not %(error_out)s file %(fn)s" % vars(), oldfn, lineno)
ParseError: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass
$ bitbake
ERROR: Traceback (most recent call last):
File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 163, in wrapped
return func(fn, *args)
File "/home/scott-lenovo/bitbake/lib/bb/cookerdata.py", line 177, in _inherit
bb.parse.BBHandler.inherit(bbclass, "configuration INHERITs", 0, data)
File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/BBHandler.py", line 92, in inherit
include(fn, file, lineno, d, "inherit")
File "/home/scott-lenovo/bitbake/lib/bb/parse/parse_py/ConfHandler.py", line 100, in include
raise ParseError("Could not %(error_out)s file %(fn)s" % vars(), oldfn, lineno)
ParseError: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass
ERROR: Unable to parse base: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass
ERROR: Unable to parse base: ParseError in configuration INHERITs: Could not inherit file classes/base.bbclass
</literallayout>
In the sample output, BitBake could not find the
<filename>classes/base.bbclass</filename> file.
@@ -383,10 +365,10 @@
code separate from the general metadata used by BitBake.
Thus, this example creates and uses a layer called "mylayer".
<note>
You can find additional information on layers in the
"<link linkend='layers'>Layers</link>" section.
</note></para>
You can find additional information on layers at
<ulink url='http://www.yoctoproject.org/docs/2.3/bitbake-user-manual/bitbake-user-manual.html#layers'></ulink>.
</note>
</para>
<para>Minimally, you need a recipe file and a layer configuration
file in your layer.
The configuration file needs to be in the <filename>conf</filename>

View File

@@ -488,6 +488,8 @@
target that failed and anything depending on it cannot
be built, as much as possible will be built before
stopping.
-a, --tryaltconfigs Continue with builds by trying to use alternative
providers where possible.
-f, --force Force the specified targets/task to run (invalidating
any existing stamp file).
-c CMD, --cmd=CMD Specify the task to execute. The exact options
@@ -502,20 +504,19 @@
Read the specified file before bitbake.conf.
-R POSTFILE, --postread=POSTFILE
Read the specified file after bitbake.conf.
-v, --verbose Enable tracing of shell tasks (with 'set -x'). Also
print bb.note(...) messages to stdout (in addition to
writing them to ${T}/log.do_&lt;task&gt;).
-D, --debug Increase the debug level. You can specify this more
than once. -D sets the debug level to 1, where only
bb.debug(1, ...) messages are printed to stdout; -DD
sets the debug level to 2, where both bb.debug(1, ...)
and bb.debug(2, ...) messages are printed; etc.
Without -D, no debug messages are printed. Note that
-D only affects output to stdout. All debug messages
are written to ${T}/log.do_taskname, regardless of the
debug level.
-q, --quiet Output less log message data to the terminal. You can
specify this more than once.
-v, --verbose Enable tracing of shell tasks (with 'set -x').
Also print bb.note(...) messages to stdout (in
addition to writing them to ${T}/log.do_&lt;task&gt;).
-D, --debug Increase the debug level. You can specify this
more than once. -D sets the debug level to 1,
where only bb.debug(1, ...) messages are printed
to stdout; -DD sets the debug level to 2, where
both bb.debug(1, ...) and bb.debug(2, ...)
messages are printed; etc. Without -D, no debug
messages are printed. Note that -D only affects
output to stdout. All debug messages are written
to ${T}/log.do_taskname, regardless of the debug
level.
-n, --dry-run Don't execute, just go through the motions.
-S SIGNATURE_HANDLER, --dump-signatures=SIGNATURE_HANDLER
Dump out the signature construction information, with
@@ -538,38 +539,30 @@
-l DEBUG_DOMAINS, --log-domains=DEBUG_DOMAINS
Show debug logging for the specified logging domains
-P, --profile Profile the command and save reports.
-u UI, --ui=UI The user interface to use (knotty, ncurses or taskexp
- default knotty).
-u UI, --ui=UI The user interface to use (taskexp, knotty or
ncurses - default knotty).
-t SERVERTYPE, --servertype=SERVERTYPE
Choose which server type to use (process or xmlrpc -
default process).
--token=XMLRPCTOKEN Specify the connection token to be used when
connecting to a remote server.
--revisions-changed Set the exit code depending on whether upstream
floating revisions have changed or not.
--server-only Run bitbake without a UI, only starting a server
(cooker) process.
-B BIND, --bind=BIND The name/address for the bitbake xmlrpc server to bind
to.
-T SERVER_TIMEOUT, --idle-timeout=SERVER_TIMEOUT
Set timeout to unload bitbake server due to
inactivity, set to -1 means no unload, default:
Environment variable BB_SERVER_TIMEOUT.
-B BIND, --bind=BIND The name/address for the bitbake server to bind to.
--no-setscene Do not run any setscene tasks. sstate will be ignored
and everything needed, built.
--setscene-only Only run setscene tasks, don't run any real tasks.
--remote-server=REMOTE_SERVER
Connect to the specified server.
-m, --kill-server Terminate any running bitbake server.
-m, --kill-server Terminate the remote server.
--observe-only Connect to a server as an observing-only client.
--status-only Check the status of the remote bitbake server.
-w WRITEEVENTLOG, --write-log=WRITEEVENTLOG
Writes the event log of the build to a bitbake event
json file. Use '' (empty string) to assign the name
automatically.
--runall=RUNALL Run the specified task for any recipe in the taskgraph
of the specified target (even if it wouldn't otherwise
have run).
--runonly=RUNONLY Run only the specified task within the taskgraph of
the specified targets (and any task dependencies those
tasks may have).
</literallayout>
</para>
</section>

View File

@@ -2132,8 +2132,6 @@
<listitem><para>
<filename>bb.event.BuildStarted()</filename>:
Fired when a new build starts.
BitBake fires multiple "BuildStarted" events (one per configuration)
when multiple configuration (multiconfig) is enabled.
</para></listitem>
<listitem><para>
<filename>bb.build.TaskStarted()</filename>:
@@ -2652,70 +2650,47 @@
</para>
<para>
These checksums are stored in
<link linkend='var-STAMP'><filename>STAMP</filename></link>.
You can examine the checksums using the following BitBake command:
<literallayout class='monospaced'>
$ bitbake-dumpsigs
</literallayout>
This command returns the signature data in a readable format
that allows you to examine the inputs used when the
OpenEmbedded build system generates signatures.
For example, using <filename>bitbake-dumpsigs</filename>
allows you to examine the <filename>do_compile</filename>
task's “sigdata” for a C application (e.g.
<filename>bash</filename>).
Running the command also reveals that the “CC” variable is part of
the inputs that are hashed.
Any changes to this variable would invalidate the stamp and
cause the <filename>do_compile</filename> task to run.
</para>
<para>
The following list describes related variables:
This list is a place holder of content existed from previous work
on the manual.
Some or all of it probably needs integrated into the subsections
that make up this section.
For now, I have just provided a short glossary-like description
for each variable.
Ultimately, this list goes away.
<itemizedlist>
<listitem><para>
<link linkend='var-BB_HASHCHECK_FUNCTION'><filename>BB_HASHCHECK_FUNCTION</filename></link>:
<listitem><para><filename>STAMP</filename>:
The base path to create stamp files.</para></listitem>
<listitem><para><filename>STAMPCLEAN</filename>
Again, the base path to create stamp files but can use wildcards
for matching a range of files for clean operations.
</para></listitem>
<listitem><para><filename>BB_STAMP_WHITELIST</filename>
Lists stamp files that are looked at when the stamp policy
is "whitelist".
</para></listitem>
<listitem><para><filename>BB_STAMP_POLICY</filename>
Defines the mode for comparing timestamps of stamp files.
</para></listitem>
<listitem><para><filename>BB_HASHCHECK_FUNCTION</filename>
Specifies the name of the function to call during
the "setscene" part of the task's execution in order
to validate the list of task hashes.
</para></listitem>
<listitem><para>
<link linkend='var-BB_SETSCENE_DEPVALID'><filename>BB_SETSCENE_DEPVALID</filename></link>:
Specifies a function BitBake calls that determines
whether BitBake requires a setscene dependency to
be met.
</para></listitem>
<listitem><para>
<link linkend='var-BB_SETSCENE_VERIFY_FUNCTION2'><filename>BB_SETSCENE_VERIFY_FUNCTION2</filename></link>:
<listitem><para><filename>BB_SETSCENE_VERIFY_FUNCTION2</filename>
Specifies a function to call that verifies the list of
planned task execution before the main task execution
happens.
</para></listitem>
<listitem><para>
<link linkend='var-BB_STAMP_POLICY'><filename>BB_STAMP_POLICY</filename></link>:
Defines the mode for comparing timestamps of stamp files.
<listitem><para><filename>BB_SETSCENE_DEPVALID</filename>
Specifies a function BitBake calls that determines
whether BitBake requires a setscene dependency to
be met.
</para></listitem>
<listitem><para>
<link linkend='var-BB_STAMP_WHITELIST'><filename>BB_STAMP_WHITELIST</filename></link>:
Lists stamp files that are looked at when the stamp policy
is "whitelist".
</para></listitem>
<listitem><para>
<link linkend='var-BB_TASKHASH'><filename>BB_TASKHASH</filename></link>:
<listitem><para><filename>BB_TASKHASH</filename>
Within an executing task, this variable holds the hash
of the task as returned by the currently enabled
signature generator.
</para></listitem>
<listitem><para>
<link linkend='var-STAMP'><filename>STAMP</filename></link>:
The base path to create stamp files.
</para></listitem>
<listitem><para>
<link linkend='var-STAMPCLEAN'><filename>STAMPCLEAN</filename></link>:
Again, the base path to create stamp files but can use wildcards
for matching a range of files for clean operations.
</para></listitem>
</itemizedlist>
</para>
</section>

View File

@@ -78,7 +78,7 @@
</para>
<para>
In OpenEmbedded-Core, <filename>ASSUME_PROVIDED</filename>
In OpenEmbedded Core, <filename>ASSUME_PROVIDED</filename>
mostly specifies native tools that should not be built.
An example is <filename>git-native</filename>, which
when specified allows for the Git binary from the host to
@@ -964,7 +964,7 @@
Allows you to extend a recipe so that it builds variants
of the software.
Some examples of these variants for recipes from the
OpenEmbedded-Core metadata are "natives" such as
OpenEmbedded Core metadata are "natives" such as
<filename>quilt-native</filename>, which is a copy of
Quilt built to run on the build system; "crosses" such
as <filename>gcc-cross</filename>, which is a compiler
@@ -980,7 +980,7 @@
amount of code, it usually is as simple as adding the
variable to your recipe.
Here are two examples.
The "native" variants are from the OpenEmbedded-Core
The "native" variants are from the OpenEmbedded Core
metadata:
<literallayout class='monospaced'>
BBCLASSEXTEND =+ "native nativesdk"
@@ -2089,16 +2089,6 @@
</glossdef>
</glossentry>
<glossentry id='var-REPODIR'><glossterm>REPODIR</glossterm>
<glossdef>
<para>
The directory in which a local copy of a
<filename>google-repo</filename> directory is stored
when it is synced.
</para>
</glossdef>
</glossentry>
<glossentry id='var-RPROVIDES'><glossterm>RPROVIDES</glossterm>
<glossdef>
<para>

View File

@@ -56,7 +56,7 @@
-->
<copyright>
<year>2004-2018</year>
<year>2004-2016</year>
<holder>Richard Purdie</holder>
<holder>Chris Larson</holder>
<holder>and Phil Blundell</holder>

View File

@@ -21,7 +21,7 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
__version__ = "1.38.0"
__version__ = "1.36.0"
import sys
if sys.version_info < (3, 4, 0):

View File

@@ -872,12 +872,6 @@ def preceedtask(task, with_recrdeptasks, d):
that this may lead to the task itself being listed.
"""
preceed = set()
# Ignore tasks which don't exist
tasks = d.getVar('__BBTASKS', False)
if task not in tasks:
return preceed
preceed.update(d.getVarFlag(task, 'deps') or [])
if with_recrdeptasks:
recrdeptask = d.getVarFlag(task, 'recrdeptask')

View File

@@ -395,7 +395,7 @@ class Cache(NoCache):
self.has_cache = True
self.cachefile = getCacheFile(self.cachedir, "bb_cache.dat", self.data_hash)
logger.debug(1, "Cache dir: %s", self.cachedir)
logger.debug(1, "Using cache in '%s'", self.cachedir)
bb.utils.mkdirhier(self.cachedir)
cache_ok = True
@@ -408,8 +408,6 @@ class Cache(NoCache):
self.load_cachefile()
elif os.path.isfile(self.cachefile):
logger.info("Out of date cache found, rebuilding...")
else:
logger.debug(1, "Cache file %s not found, building..." % self.cachefile)
def load_cachefile(self):
cachesize = 0
@@ -426,7 +424,6 @@ class Cache(NoCache):
for cache_class in self.caches_array:
cachefile = getCacheFile(self.cachedir, cache_class.cachefile, self.data_hash)
logger.debug(1, 'Loading cache file: %s' % cachefile)
with open(cachefile, "rb") as cachefile:
pickled = pickle.Unpickler(cachefile)
# Check cache version information

View File

@@ -97,8 +97,6 @@ class FileChecksumCache(MultiProcessCache):
def checksum_dir(pth):
# Handle directories recursively
if pth == "/":
bb.fatal("Refusing to checksum /")
dirchecksums = []
for root, dirs, files in os.walk(pth):
for name in files:

View File

@@ -516,8 +516,6 @@ class BBCooker:
fn = runlist[0][3]
else:
envdata = self.data
data.expandKeys(envdata)
parse.ast.runAnonFuncs(envdata)
if fn:
try:
@@ -538,6 +536,7 @@ class BBCooker:
logger.plain(env.getvalue())
# emit the metadata which isnt valid shell
data.expandKeys(envdata)
for e in sorted(envdata.keys()):
if envdata.getVarFlag(e, 'func', False) and envdata.getVarFlag(e, 'python', False):
logger.plain("\npython %s () {\n%s}\n", e, envdata.getVar(e, False))
@@ -857,12 +856,12 @@ class BBCooker:
with open('task-depends.dot', 'w') as f:
f.write("digraph depends {\n")
for task in sorted(depgraph["tdepends"]):
for task in depgraph["tdepends"]:
(pn, taskname) = task.rsplit(".", 1)
fn = depgraph["pn"][pn]["filename"]
version = depgraph["pn"][pn]["version"]
f.write('"%s.%s" [label="%s %s\\n%s\\n%s"]\n' % (pn, taskname, pn, taskname, version, fn))
for dep in sorted(depgraph["tdepends"][task]):
for dep in depgraph["tdepends"][task]:
f.write('"%s" -> "%s"\n' % (task, dep))
f.write("}\n")
logger.info("Task dependencies saved to 'task-depends.dot'")
@@ -870,23 +869,23 @@ class BBCooker:
with open('recipe-depends.dot', 'w') as f:
f.write("digraph depends {\n")
pndeps = {}
for task in sorted(depgraph["tdepends"]):
for task in depgraph["tdepends"]:
(pn, taskname) = task.rsplit(".", 1)
if pn not in pndeps:
pndeps[pn] = set()
for dep in sorted(depgraph["tdepends"][task]):
for dep in depgraph["tdepends"][task]:
(deppn, deptaskname) = dep.rsplit(".", 1)
pndeps[pn].add(deppn)
for pn in sorted(pndeps):
for pn in pndeps:
fn = depgraph["pn"][pn]["filename"]
version = depgraph["pn"][pn]["version"]
f.write('"%s" [label="%s\\n%s\\n%s"]\n' % (pn, pn, version, fn))
for dep in sorted(pndeps[pn]):
for dep in pndeps[pn]:
if dep == pn:
continue
f.write('"%s" -> "%s"\n' % (pn, dep))
f.write("}\n")
logger.info("Flattened recipe dependencies saved to 'recipe-depends.dot'")
logger.info("Flatened recipe dependencies saved to 'recipe-depends.dot'")
def show_appends_with_no_recipes(self):
# Determine which bbappends haven't been applied
@@ -1171,7 +1170,6 @@ class BBCooker:
elif regex == "":
parselog.debug(1, "BBFILE_PATTERN_%s is empty" % c)
errors = False
continue
else:
try:
cre = re.compile(regex)
@@ -1605,6 +1603,8 @@ class BBCooker:
if self.parser:
self.parser.shutdown(clean=not force, force=force)
self.notifier.stop()
self.confignotifier.stop()
def finishcommand(self):
self.state = state.initial
@@ -1807,25 +1807,21 @@ class CookerCollectFiles(object):
realfn, cls, mc = bb.cache.virtualfn2realfn(p)
priorities[p] = self.calc_bbfile_priority(realfn, matched)
# Don't show the warning if the BBFILE_PATTERN did match .bbappend files
unmatched = set()
for _, _, regex, pri in self.bbfile_config_priorities:
if not regex in matched:
unmatched.add(regex)
# Don't show the warning if the BBFILE_PATTERN did match .bbappend files
def find_bbappend_match(regex):
def findmatch(regex):
for b in self.bbappends:
(bbfile, append) = b
if regex.match(append):
# If the bbappend is matched by already "matched set", return False
for matched_regex in matched:
if matched_regex.match(append):
return False
return True
return False
for unmatch in unmatched.copy():
if find_bbappend_match(unmatch):
if findmatch(unmatch):
unmatched.remove(unmatch)
for collection, pattern, regex, _ in self.bbfile_config_priorities:

View File

@@ -143,8 +143,7 @@ class CookerConfiguration(object):
self.writeeventlog = False
self.server_only = False
self.limited_deps = False
self.runall = []
self.runonly = []
self.runall = None
self.env = {}
@@ -396,8 +395,6 @@ class CookerDataBuilder(object):
if compat and not (compat & layerseries):
bb.fatal("Layer %s is not compatible with the core layer which only supports these series: %s (layer is compatible with %s)"
% (c, " ".join(layerseries), " ".join(compat)))
elif not compat and not data.getVar("BB_WORKERCONTEXT"):
bb.warn("Layer %s should set LAYERSERIES_COMPAT_%s in its conf/layer.conf file to list the core layer names it is compatible with." % (c, c))
if not data.getVar("BBPATH"):
msg = "The BBPATH variable is not set"

View File

@@ -449,6 +449,12 @@ class BuildBase(Event):
def setName(self, name):
self._name = name
def getCfg(self):
return self.data
def setCfg(self, cfg):
self.data = cfg
def getFailures(self):
"""
Return the number of failed packages
@@ -457,6 +463,9 @@ class BuildBase(Event):
pkgs = property(getPkgs, setPkgs, None, "pkgs property")
name = property(getName, setName, None, "name property")
cfg = property(getCfg, setCfg, None, "cfg property")
class BuildInit(BuildBase):
"""buildFile or buildTargets was invoked"""

View File

@@ -643,25 +643,26 @@ def verify_donestamp(ud, d, origud=None):
if not ud.needdonestamp or (origud and not origud.needdonestamp):
return True
if not os.path.exists(ud.localpath):
# local path does not exist
if os.path.exists(ud.donestamp):
# done stamp exists, but the downloaded file does not; the done stamp
# must be incorrect, re-trigger the download
bb.utils.remove(ud.donestamp)
if not os.path.exists(ud.donestamp):
return False
if (not ud.method.supports_checksum(ud) or
(origud and not origud.method.supports_checksum(origud))):
# if done stamp exists and checksums not supported; assume the local
# file is current
return os.path.exists(ud.donestamp)
# done stamp exists, checksums not supported; assume the local file is
# current
return True
if not os.path.exists(ud.localpath):
# done stamp exists, but the downloaded file does not; the done stamp
# must be incorrect, re-trigger the download
bb.utils.remove(ud.donestamp)
return False
precomputed_checksums = {}
# Only re-use the precomputed checksums if the donestamp is newer than the
# file. Do not rely on the mtime of directories, though. If ud.localpath is
# a directory, there will probably not be any checksums anyway.
if os.path.exists(ud.donestamp) and (os.path.isdir(ud.localpath) or
if (os.path.isdir(ud.localpath) or
os.path.getmtime(ud.localpath) < os.path.getmtime(ud.donestamp)):
try:
with open(ud.donestamp, "rb") as cachefile:
@@ -852,9 +853,6 @@ def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None, workdir=None):
if val:
cmd = 'export ' + var + '=\"%s\"; %s' % (val, cmd)
# Disable pseudo as it may affect ssh, potentially causing it to hang.
cmd = 'export PSEUDO_DISABLED=1; ' + cmd
logger.debug(1, "Running %s", cmd)
success = False
@@ -1426,7 +1424,7 @@ class FetchMethod(object):
cmd = 'gzip -dc %s > %s' % (file, efile)
elif file.endswith('.bz2'):
cmd = 'bzip2 -dc %s > %s' % (file, efile)
elif file.endswith('.txz') or file.endswith('.tar.xz'):
elif file.endswith('.tar.xz'):
cmd = 'xz -dc %s | tar x --no-same-owner -f -' % file
elif file.endswith('.xz'):
cmd = 'xz -dc %s > %s' % (file, efile)

View File

@@ -69,6 +69,7 @@ from bb.fetch2 import FetchMethod
from bb.fetch2 import FetchError
from bb.fetch2 import runfetchcmd
from bb.fetch2 import logger
from distutils import spawn
class ClearCase(FetchMethod):
"""Class to fetch urls via 'clearcase'"""
@@ -106,7 +107,7 @@ class ClearCase(FetchMethod):
else:
ud.module = ""
ud.basecmd = d.getVar("FETCHCMD_ccrc") or "/usr/bin/env cleartool || rcleartool"
ud.basecmd = d.getVar("FETCHCMD_ccrc") or spawn.find_executable("cleartool") or spawn.find_executable("rcleartool")
if d.getVar("SRCREV") == "INVALID":
raise FetchError("Set a valid SRCREV for the clearcase fetcher in your recipe, e.g. SRCREV = \"/main/LATEST\" or any other label of your choice.")

View File

@@ -125,9 +125,6 @@ class GitProgressHandler(bb.progress.LineFilterProgressHandler):
class Git(FetchMethod):
bitbake_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.join(os.path.abspath(__file__))), '..', '..', '..'))
make_shallow_path = os.path.join(bitbake_dir, 'bin', 'git-make-shallow')
"""Class to fetch a module or modules from git repositories"""
def init(self, d):
pass
@@ -354,9 +351,10 @@ class Git(FetchMethod):
if not self._contains_ref(ud, d, name, ud.clonedir):
needupdate = True
if needupdate:
output = runfetchcmd("%s remote" % ud.basecmd, d, quiet=True, workdir=ud.clonedir)
if "origin" in output:
runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir)
try:
runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir)
except bb.fetch2.FetchError:
logger.debug(1, "No Origin")
runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d, workdir=ud.clonedir)
fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl)
@@ -365,7 +363,6 @@ class Git(FetchMethod):
progresshandler = GitProgressHandler(d)
runfetchcmd(fetch_cmd, d, log=progresshandler, workdir=ud.clonedir)
runfetchcmd("%s prune-packed" % ud.basecmd, d, workdir=ud.clonedir)
runfetchcmd("%s pack-refs --all" % ud.basecmd, d, workdir=ud.clonedir)
runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d, workdir=ud.clonedir)
try:
os.unlink(ud.fullmirror)
@@ -448,7 +445,7 @@ class Git(FetchMethod):
shallow_branches.append(r)
# Make the repository shallow
shallow_cmd = [self.make_shallow_path, '-s']
shallow_cmd = ['git', 'make-shallow', '-s']
for b in shallow_branches:
shallow_cmd.append('-r')
shallow_cmd.append(b)
@@ -594,8 +591,7 @@ class Git(FetchMethod):
tagregex = re.compile(d.getVar('UPSTREAM_CHECK_GITTAGREGEX') or "(?P<pver>([0-9][\.|_]?)+)")
try:
output = self._lsremote(ud, d, "refs/tags/*")
except (bb.fetch2.FetchError, bb.fetch2.NetworkAccess) as e:
bb.note("Could not list remote: %s" % str(e))
except bb.fetch2.FetchError or bb.fetch2.NetworkAccess:
return pupver
verstring = ""

View File

@@ -32,6 +32,7 @@ from bb.fetch2 import runfetchcmd
from bb.fetch2 import logger
from bb.fetch2 import UnpackError
from bb.fetch2 import ParameterError
from distutils import spawn
def subprocess_setup():
# Python installs a SIGPIPE handler by default. This is usually not what
@@ -194,11 +195,9 @@ class Npm(FetchMethod):
outputurl = pdata['dist']['tarball']
data[pkg] = {}
data[pkg]['tgz'] = os.path.basename(outputurl)
if outputurl in fetchedlist:
return
self._runwget(ud, d, "%s --directory-prefix=%s %s" % (self.basecmd, ud.prefixdir, outputurl), False)
fetchedlist.append(outputurl)
if not outputurl in fetchedlist:
self._runwget(ud, d, "%s --directory-prefix=%s %s" % (self.basecmd, ud.prefixdir, outputurl), False)
fetchedlist.append(outputurl)
dependencies = pdata.get('dependencies', {})
optionalDependencies = pdata.get('optionalDependencies', {})

View File

@@ -250,7 +250,6 @@ class Wget(FetchMethod):
return ""
def close(self):
pass
closed = False
resp = addinfourl(fp_dummy(), r.msg, req.get_full_url())
resp.code = r.status
@@ -333,8 +332,7 @@ class Wget(FetchMethod):
except (TypeError, ImportError, IOError, netrc.NetrcParseError):
pass
with opener.open(r) as response:
pass
opener.open(r)
except urllib.error.URLError as e:
if try_again:
logger.debug(2, "checkstatus: trying again")

View File

@@ -292,12 +292,8 @@ class BitBakeConfigParameters(cookerdata.ConfigParameters):
help="Writes the event log of the build to a bitbake event json file. "
"Use '' (empty string) to assign the name automatically.")
parser.add_option("", "--runall", action="append", dest="runall",
help="Run the specified task for any recipe in the taskgraph of the specified target (even if it wouldn't otherwise have run).")
parser.add_option("", "--runonly", action="append", dest="runonly",
help="Run only the specified task within the taskgraph of the specified targets (and any task dependencies those tasks may have).")
parser.add_option("", "--runall", action="store", dest="runall",
help="Run the specified task for all build targets and their dependencies.")
options, targets = parser.parse_args(argv)
@@ -405,6 +401,9 @@ def setup_bitbake(configParams, configuration, extrafeatures=None):
# In status only mode there are no logs and no UI
logger.addHandler(handler)
# Clear away any spurious environment variables while we stoke up the cooker
cleanedvars = bb.utils.clean_environment()
if configParams.server_only:
featureset = []
ui_module = None
@@ -420,10 +419,6 @@ def setup_bitbake(configParams, configuration, extrafeatures=None):
server_connection = None
# Clear away any spurious environment variables while we stoke up the cooker
# (done after import_extension_module() above since for example import gi triggers env var usage)
cleanedvars = bb.utils.clean_environment()
if configParams.remote_server:
# Connect to a remote XMLRPC server
server_connection = bb.server.xmlrpcclient.connectXMLRPC(configParams.remote_server, featureset,

View File

@@ -134,9 +134,8 @@ def resolve_file(fn, d):
if not newfn:
raise IOError(errno.ENOENT, "file %s not found in %s" % (fn, bbpath))
fn = newfn
else:
mark_dependency(d, fn)
mark_dependency(d, fn)
if not os.path.isfile(fn):
raise IOError(errno.ENOENT, "file %s not found" % fn)

View File

@@ -335,12 +335,6 @@ def handleInherit(statements, filename, lineno, m):
classes = m.group(1)
statements.append(InheritNode(filename, lineno, classes))
def runAnonFuncs(d):
code = []
for funcname in d.getVar("__BBANONFUNCS", False) or []:
code.append("%s(d)" % funcname)
bb.utils.better_exec("\n".join(code), {"d": d})
def finalize(fn, d, variant = None):
saved_handlers = bb.event.get_handlers().copy()
@@ -355,7 +349,10 @@ def finalize(fn, d, variant = None):
bb.event.fire(bb.event.RecipePreFinalise(fn), d)
bb.data.expandKeys(d)
runAnonFuncs(d)
code = []
for funcname in d.getVar("__BBANONFUNCS", False) or []:
code.append("%s(d)" % funcname)
bb.utils.better_exec("\n".join(code), {"d": d})
tasklist = d.getVar('__BBTASKS', False) or []
bb.event.fire(bb.event.RecipeTaskPreProcess(fn, list(tasklist)), d)

View File

@@ -131,6 +131,9 @@ def handle(fn, d, include):
abs_fn = resolve_file(fn, d)
if include:
bb.parse.mark_dependency(d, abs_fn)
# actual loading
statements = get_statements(fn, abs_fn, base_name)

View File

@@ -134,6 +134,9 @@ def handle(fn, data, include):
abs_fn = resolve_file(fn, data)
f = open(abs_fn, 'r')
if include:
bb.parse.mark_dependency(data, abs_fn)
statements = ast.StatementGroup()
lineno = 0
while True:

View File

@@ -244,17 +244,17 @@ def _filterProviders(providers, item, cfgData, dataCache):
pkg_pn[pn] = []
pkg_pn[pn].append(p)
logger.debug(1, "providers for %s are: %s", item, list(sorted(pkg_pn.keys())))
logger.debug(1, "providers for %s are: %s", item, list(pkg_pn.keys()))
# First add PREFERRED_VERSIONS
for pn in sorted(pkg_pn):
for pn in pkg_pn:
sortpkg_pn[pn] = sortPriorities(pn, dataCache, pkg_pn)
preferred_versions[pn] = findPreferredProvider(pn, cfgData, dataCache, sortpkg_pn[pn], item)
if preferred_versions[pn][1]:
eligible.append(preferred_versions[pn][1])
# Now add latest versions
for pn in sorted(sortpkg_pn):
for pn in sortpkg_pn:
if pn in preferred_versions and preferred_versions[pn][1]:
continue
preferred_versions[pn] = findLatestProvider(pn, cfgData, dataCache, sortpkg_pn[pn][0])

View File

@@ -181,7 +181,7 @@ class RunQueueScheduler(object):
if self.rq.stats.active < self.rq.number_tasks:
return self.next_buildable_task()
def newbuildable(self, task):
def newbuilable(self, task):
self.buildable.append(task)
def describe_task(self, taskid):
@@ -581,6 +581,12 @@ class RunQueueData:
if t in taskData[mc].taskentries:
depends.add(t)
def add_resolved_dependencies(mc, fn, tasknames, depends):
for taskname in tasknames:
tid = build_tid(mc, fn, taskname)
if tid in self.runtaskentries:
depends.add(tid)
for mc in taskData:
for tid in taskData[mc].taskentries:
@@ -667,106 +673,57 @@ class RunQueueData:
recursiveitasks[tid].append(newdep)
self.runtaskentries[tid].depends = depends
# Remove all self references
self.runtaskentries[tid].depends.discard(tid)
#self.dump_data()
self.init_progress_reporter.next_stage()
# Resolve recursive 'recrdeptask' dependencies (Part B)
#
# e.g. do_sometask[recrdeptask] = "do_someothertask"
# (makes sure sometask runs after someothertask of all DEPENDS, RDEPENDS and intertask dependencies, recursively)
# We need to do this separately since we need all of runtaskentries[*].depends to be complete before this is processed
self.init_progress_reporter.next_stage(len(recursivetasks))
extradeps = {}
for taskcounter, tid in enumerate(recursivetasks):
extradeps[tid] = set(self.runtaskentries[tid].depends)
# Generating/interating recursive lists of dependencies is painful and potentially slow
# Precompute recursive task dependencies here by:
# a) create a temp list of reverse dependencies (revdeps)
# b) walk up the ends of the chains (when a given task no longer has dependencies i.e. len(deps) == 0)
# c) combine the total list of dependencies in cumulativedeps
# d) optimise by pre-truncating 'task' off the items in cumulativedeps (keeps items in sets lower)
tasknames = recursivetasks[tid]
seendeps = set()
def generate_recdeps(t):
newdeps = set()
(mc, fn, taskname, _) = split_tid_mcfn(t)
add_resolved_dependencies(mc, fn, tasknames, newdeps)
extradeps[tid].update(newdeps)
seendeps.add(t)
newdeps.add(t)
for i in newdeps:
if i not in self.runtaskentries:
# Not all recipes might have the recrdeptask task as a task
continue
task = self.runtaskentries[i].task
for n in self.runtaskentries[i].depends:
if n not in seendeps:
generate_recdeps(n)
generate_recdeps(tid)
if tid in recursiveitasks:
for dep in recursiveitasks[tid]:
generate_recdeps(dep)
self.init_progress_reporter.update(taskcounter)
# Remove circular references so that do_a[recrdeptask] = "do_a do_b" can work
for tid in recursivetasks:
extradeps[tid].difference_update(recursivetasksselfref)
revdeps = {}
deps = {}
cumulativedeps = {}
for tid in self.runtaskentries:
deps[tid] = set(self.runtaskentries[tid].depends)
revdeps[tid] = set()
cumulativedeps[tid] = set()
# Generate a temp list of reverse dependencies
for tid in self.runtaskentries:
for dep in self.runtaskentries[tid].depends:
revdeps[dep].add(tid)
# Find the dependency chain endpoints
endpoints = set()
for tid in self.runtaskentries:
if len(deps[tid]) == 0:
endpoints.add(tid)
# Iterate the chains collating dependencies
while endpoints:
next = set()
for tid in endpoints:
for dep in revdeps[tid]:
cumulativedeps[dep].add(fn_from_tid(tid))
cumulativedeps[dep].update(cumulativedeps[tid])
if tid in deps[dep]:
deps[dep].remove(tid)
if len(deps[dep]) == 0:
next.add(dep)
endpoints = next
#for tid in deps:
# if len(deps[tid]) != 0:
# bb.warn("Sanity test failure, dependencies left for %s (%s)" % (tid, deps[tid]))
# Loop here since recrdeptasks can depend upon other recrdeptasks and we have to
# resolve these recursively until we aren't adding any further extra dependencies
extradeps = True
while extradeps:
extradeps = 0
for tid in recursivetasks:
tasknames = recursivetasks[tid]
totaldeps = set(self.runtaskentries[tid].depends)
if tid in recursiveitasks:
totaldeps.update(recursiveitasks[tid])
for dep in recursiveitasks[tid]:
if dep not in self.runtaskentries:
continue
totaldeps.update(self.runtaskentries[dep].depends)
deps = set()
for dep in totaldeps:
if dep in cumulativedeps:
deps.update(cumulativedeps[dep])
for t in deps:
for taskname in tasknames:
newtid = t + ":" + taskname
if newtid == tid:
continue
if newtid in self.runtaskentries and newtid not in self.runtaskentries[tid].depends:
extradeps += 1
self.runtaskentries[tid].depends.add(newtid)
# Handle recursive tasks which depend upon other recursive tasks
deps = set()
for dep in self.runtaskentries[tid].depends.intersection(recursivetasks):
deps.update(self.runtaskentries[dep].depends.difference(self.runtaskentries[tid].depends))
for newtid in deps:
for taskname in tasknames:
if not newtid.endswith(":" + taskname):
continue
if newtid in self.runtaskentries:
extradeps += 1
self.runtaskentries[tid].depends.add(newtid)
bb.debug(1, "Added %s recursive dependencies in this loop" % extradeps)
# Remove recrdeptask circular references so that do_a[recrdeptask] = "do_a do_b" can work
for tid in recursivetasksselfref:
self.runtaskentries[tid].depends.difference_update(recursivetasksselfref)
task = self.runtaskentries[tid].task
# Add in extra dependencies
if tid in extradeps:
self.runtaskentries[tid].depends = extradeps[tid]
# Remove all self references
if tid in self.runtaskentries[tid].depends:
logger.debug(2, "Task %s contains self reference!", tid)
self.runtaskentries[tid].depends.remove(tid)
self.init_progress_reporter.next_stage()
@@ -841,57 +798,30 @@ class RunQueueData:
#
# Once all active tasks are marked, prune the ones we don't need.
delcount = {}
delcount = 0
for tid in list(self.runtaskentries.keys()):
if tid not in runq_build:
delcount[tid] = self.runtaskentries[tid]
del self.runtaskentries[tid]
# Handle --runall
if self.cooker.configuration.runall:
# re-run the mark_active and then drop unused tasks from new list
runq_build = {}
for task in self.cooker.configuration.runall:
runall_tids = set()
for tid in list(self.runtaskentries):
wanttid = fn_from_tid(tid) + ":do_%s" % task
if wanttid in delcount:
self.runtaskentries[wanttid] = delcount[wanttid]
if wanttid in self.runtaskentries:
runall_tids.add(wanttid)
for tid in list(runall_tids):
mark_active(tid,1)
for tid in list(self.runtaskentries.keys()):
if tid not in runq_build:
delcount[tid] = self.runtaskentries[tid]
del self.runtaskentries[tid]
if len(self.runtaskentries) == 0:
bb.msg.fatal("RunQueue", "Could not find any tasks with the tasknames %s to run within the recipes of the taskgraphs of the targets %s" % (str(self.cooker.configuration.runall), str(self.targets)))
delcount += 1
self.init_progress_reporter.next_stage()
# Handle runonly
if self.cooker.configuration.runonly:
if self.cooker.configuration.runall is not None:
runall = "do_%s" % self.cooker.configuration.runall
runall_tids = { k: v for k, v in self.runtaskentries.items() if taskname_from_tid(k) == runall }
# re-run the mark_active and then drop unused tasks from new list
runq_build = {}
for task in self.cooker.configuration.runonly:
runonly_tids = { k: v for k, v in self.runtaskentries.items() if taskname_from_tid(k) == "do_%s" % task }
for tid in list(runonly_tids):
mark_active(tid,1)
for tid in list(runall_tids):
mark_active(tid,1)
for tid in list(self.runtaskentries.keys()):
if tid not in runq_build:
delcount[tid] = self.runtaskentries[tid]
del self.runtaskentries[tid]
delcount += 1
if len(self.runtaskentries) == 0:
bb.msg.fatal("RunQueue", "Could not find any tasks with the tasknames %s to run within the taskgraphs of the targets %s" % (str(self.cooker.configuration.runonly), str(self.targets)))
bb.msg.fatal("RunQueue", "No remaining tasks to run for build target %s with runall %s" % (target, runall))
#
# Step D - Sanity checks and computation
@@ -904,7 +834,7 @@ class RunQueueData:
else:
bb.msg.fatal("RunQueue", "No active tasks and not in --continue mode?! Please report this bug.")
logger.verbose("Pruned %s inactive tasks, %s left", len(delcount), len(self.runtaskentries))
logger.verbose("Pruned %s inactive tasks, %s left", delcount, len(self.runtaskentries))
logger.verbose("Assign Weightings")
@@ -1851,7 +1781,7 @@ class RunQueueExecuteTasks(RunQueueExecute):
def setbuildable(self, task):
self.runq_buildable.add(task)
self.sched.newbuildable(task)
self.sched.newbuilable(task)
def task_completeoutright(self, task):
"""

View File

@@ -223,8 +223,6 @@ class ProcessServer(multiprocessing.Process):
try:
self.cooker.shutdown(True)
self.cooker.notifier.stop()
self.cooker.confignotifier.stop()
except:
pass

820
bitbake/lib/bb/shell.py Normal file
View File

@@ -0,0 +1,820 @@
# ex:ts=4:sw=4:sts=4:et
# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
##########################################################################
#
# Copyright (C) 2005-2006 Michael 'Mickey' Lauer <mickey@Vanille.de>
# Copyright (C) 2005-2006 Vanille Media
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
##########################################################################
#
# Thanks to:
# * Holger Freyther <zecke@handhelds.org>
# * Justin Patrin <papercrane@reversefold.com>
#
##########################################################################
"""
BitBake Shell
IDEAS:
* list defined tasks per package
* list classes
* toggle force
* command to reparse just one (or more) bbfile(s)
* automatic check if reparsing is necessary (inotify?)
* frontend for bb file manipulation
* more shell-like features:
- output control, i.e. pipe output into grep, sort, etc.
- job control, i.e. bring running commands into background and foreground
* start parsing in background right after startup
* ncurses interface
PROBLEMS:
* force doesn't always work
* readline completion for commands with more than one parameters
"""
##########################################################################
# Import and setup global variables
##########################################################################
from __future__ import print_function
from functools import reduce
try:
set
except NameError:
from sets import Set as set
import sys, os, readline, socket, httplib, urllib, commands, popen2, shlex, Queue, fnmatch
from bb import data, parse, build, cache, taskdata, runqueue, providers as Providers
__version__ = "0.5.3.1"
__credits__ = """BitBake Shell Version %s (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de>
Type 'help' for more information, press CTRL-D to exit.""" % __version__
cmds = {}
leave_mainloop = False
last_exception = None
cooker = None
parsed = False
debug = os.environ.get( "BBSHELL_DEBUG", "" )
##########################################################################
# Class BitBakeShellCommands
##########################################################################
class BitBakeShellCommands:
"""This class contains the valid commands for the shell"""
def __init__( self, shell ):
"""Register all the commands"""
self._shell = shell
for attr in BitBakeShellCommands.__dict__:
if not attr.startswith( "_" ):
if attr.endswith( "_" ):
command = attr[:-1].lower()
else:
command = attr[:].lower()
method = getattr( BitBakeShellCommands, attr )
debugOut( "registering command '%s'" % command )
# scan number of arguments
usage = getattr( method, "usage", "" )
if usage != "<...>":
numArgs = len( usage.split() )
else:
numArgs = -1
shell.registerCommand( command, method, numArgs, "%s %s" % ( command, usage ), method.__doc__ )
def _checkParsed( self ):
if not parsed:
print("SHELL: This command needs to parse bbfiles...")
self.parse( None )
def _findProvider( self, item ):
self._checkParsed()
# Need to use taskData for this information
preferred = data.getVar( "PREFERRED_PROVIDER_%s" % item, cooker.configuration.data, 1 )
if not preferred: preferred = item
try:
lv, lf, pv, pf = Providers.findBestProvider(preferred, cooker.configuration.data, cooker.status)
except KeyError:
if item in cooker.status.providers:
pf = cooker.status.providers[item][0]
else:
pf = None
return pf
def alias( self, params ):
"""Register a new name for a command"""
new, old = params
if not old in cmds:
print("ERROR: Command '%s' not known" % old)
else:
cmds[new] = cmds[old]
print("OK")
alias.usage = "<alias> <command>"
def buffer( self, params ):
"""Dump specified output buffer"""
index = params[0]
print(self._shell.myout.buffer( int( index ) ))
buffer.usage = "<index>"
def buffers( self, params ):
"""Show the available output buffers"""
commands = self._shell.myout.bufferedCommands()
if not commands:
print("SHELL: No buffered commands available yet. Start doing something.")
else:
print("="*35, "Available Output Buffers", "="*27)
for index, cmd in enumerate( commands ):
print("| %s %s" % ( str( index ).ljust( 3 ), cmd ))
print("="*88)
def build( self, params, cmd = "build" ):
"""Build a providee"""
global last_exception
globexpr = params[0]
self._checkParsed()
names = globfilter( cooker.status.pkg_pn, globexpr )
if len( names ) == 0: names = [ globexpr ]
print("SHELL: Building %s" % ' '.join( names ))
td = taskdata.TaskData(cooker.configuration.abort)
localdata = data.createCopy(cooker.configuration.data)
data.update_data(localdata)
data.expandKeys(localdata)
try:
tasks = []
for name in names:
td.add_provider(localdata, cooker.status, name)
providers = td.get_provider(name)
if len(providers) == 0:
raise Providers.NoProvider
tasks.append([name, "do_%s" % cmd])
td.add_unresolved(localdata, cooker.status)
rq = runqueue.RunQueue(cooker, localdata, cooker.status, td, tasks)
rq.prepare_runqueue()
rq.execute_runqueue()
except Providers.NoProvider:
print("ERROR: No Provider")
last_exception = Providers.NoProvider
except runqueue.TaskFailure as fnids:
last_exception = runqueue.TaskFailure
except build.FuncFailed as e:
print("ERROR: Couldn't build '%s'" % names)
last_exception = e
build.usage = "<providee>"
def clean( self, params ):
"""Clean a providee"""
self.build( params, "clean" )
clean.usage = "<providee>"
def compile( self, params ):
"""Execute 'compile' on a providee"""
self.build( params, "compile" )
compile.usage = "<providee>"
def configure( self, params ):
"""Execute 'configure' on a providee"""
self.build( params, "configure" )
configure.usage = "<providee>"
def install( self, params ):
"""Execute 'install' on a providee"""
self.build( params, "install" )
install.usage = "<providee>"
def edit( self, params ):
"""Call $EDITOR on a providee"""
name = params[0]
bbfile = self._findProvider( name )
if bbfile is not None:
os.system( "%s %s" % ( os.environ.get( "EDITOR", "vi" ), bbfile ) )
else:
print("ERROR: Nothing provides '%s'" % name)
edit.usage = "<providee>"
def environment( self, params ):
"""Dump out the outer BitBake environment"""
cooker.showEnvironment()
def exit_( self, params ):
"""Leave the BitBake Shell"""
debugOut( "setting leave_mainloop to true" )
global leave_mainloop
leave_mainloop = True
def fetch( self, params ):
"""Fetch a providee"""
self.build( params, "fetch" )
fetch.usage = "<providee>"
def fileBuild( self, params, cmd = "build" ):
"""Parse and build a .bb file"""
global last_exception
name = params[0]
bf = completeFilePath( name )
print("SHELL: Calling '%s' on '%s'" % ( cmd, bf ))
try:
cooker.buildFile(bf, cmd)
except parse.ParseError:
print("ERROR: Unable to open or parse '%s'" % bf)
except build.FuncFailed as e:
print("ERROR: Couldn't build '%s'" % name)
last_exception = e
fileBuild.usage = "<bbfile>"
def fileClean( self, params ):
"""Clean a .bb file"""
self.fileBuild( params, "clean" )
fileClean.usage = "<bbfile>"
def fileEdit( self, params ):
"""Call $EDITOR on a .bb file"""
name = params[0]
os.system( "%s %s" % ( os.environ.get( "EDITOR", "vi" ), completeFilePath( name ) ) )
fileEdit.usage = "<bbfile>"
def fileRebuild( self, params ):
"""Rebuild (clean & build) a .bb file"""
self.fileBuild( params, "rebuild" )
fileRebuild.usage = "<bbfile>"
def fileReparse( self, params ):
"""(re)Parse a bb file"""
bbfile = params[0]
print("SHELL: Parsing '%s'" % bbfile)
parse.update_mtime( bbfile )
cooker.parser.reparse(bbfile)
if False: #fromCache:
print("SHELL: File has not been updated, not reparsing")
else:
print("SHELL: Parsed")
fileReparse.usage = "<bbfile>"
def abort( self, params ):
"""Toggle abort task execution flag (see bitbake -k)"""
cooker.configuration.abort = not cooker.configuration.abort
print("SHELL: Abort Flag is now '%s'" % repr( cooker.configuration.abort ))
def force( self, params ):
"""Toggle force task execution flag (see bitbake -f)"""
cooker.configuration.force = not cooker.configuration.force
print("SHELL: Force Flag is now '%s'" % repr( cooker.configuration.force ))
def help( self, params ):
"""Show a comprehensive list of commands and their purpose"""
print("="*30, "Available Commands", "="*30)
for cmd in sorted(cmds):
function, numparams, usage, helptext = cmds[cmd]
print("| %s | %s" % (usage.ljust(30), helptext))
print("="*78)
def lastError( self, params ):
"""Show the reason or log that was produced by the last BitBake event exception"""
if last_exception is None:
print("SHELL: No Errors yet (Phew)...")
else:
reason, event = last_exception.args
print("SHELL: Reason for the last error: '%s'" % reason)
if ':' in reason:
msg, filename = reason.split( ':' )
filename = filename.strip()
print("SHELL: Dumping log file for last error:")
try:
print(open( filename ).read())
except IOError:
print("ERROR: Couldn't open '%s'" % filename)
def match( self, params ):
"""Dump all files or providers matching a glob expression"""
what, globexpr = params
if what == "files":
self._checkParsed()
for key in globfilter( cooker.status.pkg_fn, globexpr ): print(key)
elif what == "providers":
self._checkParsed()
for key in globfilter( cooker.status.pkg_pn, globexpr ): print(key)
else:
print("Usage: match %s" % self.print_.usage)
match.usage = "<files|providers> <glob>"
def new( self, params ):
"""Create a new .bb file and open the editor"""
dirname, filename = params
packages = '/'.join( data.getVar( "BBFILES", cooker.configuration.data, 1 ).split('/')[:-2] )
fulldirname = "%s/%s" % ( packages, dirname )
if not os.path.exists( fulldirname ):
print("SHELL: Creating '%s'" % fulldirname)
os.mkdir( fulldirname )
if os.path.exists( fulldirname ) and os.path.isdir( fulldirname ):
if os.path.exists( "%s/%s" % ( fulldirname, filename ) ):
print("SHELL: ERROR: %s/%s already exists" % ( fulldirname, filename ))
return False
print("SHELL: Creating '%s/%s'" % ( fulldirname, filename ))
newpackage = open( "%s/%s" % ( fulldirname, filename ), "w" )
print("""DESCRIPTION = ""
SECTION = ""
AUTHOR = ""
HOMEPAGE = ""
MAINTAINER = ""
LICENSE = "GPL"
PR = "r0"
SRC_URI = ""
#inherit base
#do_configure() {
#
#}
#do_compile() {
#
#}
#do_stage() {
#
#}
#do_install() {
#
#}
""", file=newpackage)
newpackage.close()
os.system( "%s %s/%s" % ( os.environ.get( "EDITOR" ), fulldirname, filename ) )
new.usage = "<directory> <filename>"
def package( self, params ):
"""Execute 'package' on a providee"""
self.build( params, "package" )
package.usage = "<providee>"
def pasteBin( self, params ):
"""Send a command + output buffer to the pastebin at http://rafb.net/paste"""
index = params[0]
contents = self._shell.myout.buffer( int( index ) )
sendToPastebin( "output of " + params[0], contents )
pasteBin.usage = "<index>"
def pasteLog( self, params ):
"""Send the last event exception error log (if there is one) to http://rafb.net/paste"""
if last_exception is None:
print("SHELL: No Errors yet (Phew)...")
else:
reason, event = last_exception.args
print("SHELL: Reason for the last error: '%s'" % reason)
if ':' in reason:
msg, filename = reason.split( ':' )
filename = filename.strip()
print("SHELL: Pasting log file to pastebin...")
file = open( filename ).read()
sendToPastebin( "contents of " + filename, file )
def patch( self, params ):
"""Execute 'patch' command on a providee"""
self.build( params, "patch" )
patch.usage = "<providee>"
def parse( self, params ):
"""(Re-)parse .bb files and calculate the dependency graph"""
cooker.status = cache.CacheData(cooker.caches_array)
ignore = data.getVar("ASSUME_PROVIDED", cooker.configuration.data, 1) or ""
cooker.status.ignored_dependencies = set( ignore.split() )
cooker.handleCollections( data.getVar("BBFILE_COLLECTIONS", cooker.configuration.data, 1) )
(filelist, masked) = cooker.collect_bbfiles()
cooker.parse_bbfiles(filelist, masked, cooker.myProgressCallback)
cooker.buildDepgraph()
global parsed
parsed = True
print()
def reparse( self, params ):
"""(re)Parse a providee's bb file"""
bbfile = self._findProvider( params[0] )
if bbfile is not None:
print("SHELL: Found bbfile '%s' for '%s'" % ( bbfile, params[0] ))
self.fileReparse( [ bbfile ] )
else:
print("ERROR: Nothing provides '%s'" % params[0])
reparse.usage = "<providee>"
def getvar( self, params ):
"""Dump the contents of an outer BitBake environment variable"""
var = params[0]
value = data.getVar( var, cooker.configuration.data, 1 )
print(value)
getvar.usage = "<variable>"
def peek( self, params ):
"""Dump contents of variable defined in providee's metadata"""
name, var = params
bbfile = self._findProvider( name )
if bbfile is not None:
the_data = cache.Cache.loadDataFull(bbfile, cooker.configuration.data)
value = the_data.getVar( var, 1 )
print(value)
else:
print("ERROR: Nothing provides '%s'" % name)
peek.usage = "<providee> <variable>"
def poke( self, params ):
"""Set contents of variable defined in providee's metadata"""
name, var, value = params
bbfile = self._findProvider( name )
if bbfile is not None:
print("ERROR: Sorry, this functionality is currently broken")
#d = cooker.pkgdata[bbfile]
#data.setVar( var, value, d )
# mark the change semi persistant
#cooker.pkgdata.setDirty(bbfile, d)
#print "OK"
else:
print("ERROR: Nothing provides '%s'" % name)
poke.usage = "<providee> <variable> <value>"
def print_( self, params ):
"""Dump all files or providers"""
what = params[0]
if what == "files":
self._checkParsed()
for key in cooker.status.pkg_fn: print(key)
elif what == "providers":
self._checkParsed()
for key in cooker.status.providers: print(key)
else:
print("Usage: print %s" % self.print_.usage)
print_.usage = "<files|providers>"
def python( self, params ):
"""Enter the expert mode - an interactive BitBake Python Interpreter"""
sys.ps1 = "EXPERT BB>>> "
sys.ps2 = "EXPERT BB... "
import code
interpreter = code.InteractiveConsole( dict( globals() ) )
interpreter.interact( "SHELL: Expert Mode - BitBake Python %s\nType 'help' for more information, press CTRL-D to switch back to BBSHELL." % sys.version )
def showdata( self, params ):
"""Execute 'showdata' on a providee"""
cooker.showEnvironment(None, params)
showdata.usage = "<providee>"
def setVar( self, params ):
"""Set an outer BitBake environment variable"""
var, value = params
data.setVar( var, value, cooker.configuration.data )
print("OK")
setVar.usage = "<variable> <value>"
def rebuild( self, params ):
"""Clean and rebuild a .bb file or a providee"""
self.build( params, "clean" )
self.build( params, "build" )
rebuild.usage = "<providee>"
def shell( self, params ):
"""Execute a shell command and dump the output"""
if params != "":
print(commands.getoutput( " ".join( params ) ))
shell.usage = "<...>"
def stage( self, params ):
"""Execute 'stage' on a providee"""
self.build( params, "populate_staging" )
stage.usage = "<providee>"
def status( self, params ):
"""<just for testing>"""
print("-" * 78)
print("building list = '%s'" % cooker.building_list)
print("build path = '%s'" % cooker.build_path)
print("consider_msgs_cache = '%s'" % cooker.consider_msgs_cache)
print("build stats = '%s'" % cooker.stats)
if last_exception is not None: print("last_exception = '%s'" % repr( last_exception.args ))
print("memory output contents = '%s'" % self._shell.myout._buffer)
def test( self, params ):
"""<just for testing>"""
print("testCommand called with '%s'" % params)
def unpack( self, params ):
"""Execute 'unpack' on a providee"""
self.build( params, "unpack" )
unpack.usage = "<providee>"
def which( self, params ):
"""Computes the providers for a given providee"""
# Need to use taskData for this information
item = params[0]
self._checkParsed()
preferred = data.getVar( "PREFERRED_PROVIDER_%s" % item, cooker.configuration.data, 1 )
if not preferred: preferred = item
try:
lv, lf, pv, pf = Providers.findBestProvider(preferred, cooker.configuration.data, cooker.status)
except KeyError:
lv, lf, pv, pf = (None,)*4
try:
providers = cooker.status.providers[item]
except KeyError:
print("SHELL: ERROR: Nothing provides", preferred)
else:
for provider in providers:
if provider == pf: provider = " (***) %s" % provider
else: provider = " %s" % provider
print(provider)
which.usage = "<providee>"
##########################################################################
# Common helper functions
##########################################################################
def completeFilePath( bbfile ):
"""Get the complete bbfile path"""
if not cooker.status: return bbfile
if not cooker.status.pkg_fn: return bbfile
for key in cooker.status.pkg_fn:
if key.endswith( bbfile ):
return key
return bbfile
def sendToPastebin( desc, content ):
"""Send content to http://oe.pastebin.com"""
mydata = {}
mydata["lang"] = "Plain Text"
mydata["desc"] = desc
mydata["cvt_tabs"] = "No"
mydata["nick"] = "%s@%s" % ( os.environ.get( "USER", "unknown" ), socket.gethostname() or "unknown" )
mydata["text"] = content
params = urllib.urlencode( mydata )
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
host = "rafb.net"
conn = httplib.HTTPConnection( "%s:80" % host )
conn.request("POST", "/paste/paste.php", params, headers )
response = conn.getresponse()
conn.close()
if response.status == 302:
location = response.getheader( "location" ) or "unknown"
print("SHELL: Pasted to http://%s%s" % ( host, location ))
else:
print("ERROR: %s %s" % ( response.status, response.reason ))
def completer( text, state ):
"""Return a possible readline completion"""
debugOut( "completer called with text='%s', state='%d'" % ( text, state ) )
if state == 0:
line = readline.get_line_buffer()
if " " in line:
line = line.split()
# we are in second (or more) argument
if line[0] in cmds and hasattr( cmds[line[0]][0], "usage" ): # known command and usage
u = getattr( cmds[line[0]][0], "usage" ).split()[0]
if u == "<variable>":
allmatches = cooker.configuration.data.keys()
elif u == "<bbfile>":
if cooker.status.pkg_fn is None: allmatches = [ "(No Matches Available. Parsed yet?)" ]
else: allmatches = [ x.split("/")[-1] for x in cooker.status.pkg_fn ]
elif u == "<providee>":
if cooker.status.pkg_fn is None: allmatches = [ "(No Matches Available. Parsed yet?)" ]
else: allmatches = cooker.status.providers.iterkeys()
else: allmatches = [ "(No tab completion available for this command)" ]
else: allmatches = [ "(No tab completion available for this command)" ]
else:
# we are in first argument
allmatches = cmds.iterkeys()
completer.matches = [ x for x in allmatches if x[:len(text)] == text ]
#print "completer.matches = '%s'" % completer.matches
if len( completer.matches ) > state:
return completer.matches[state]
else:
return None
def debugOut( text ):
if debug:
sys.stderr.write( "( %s )\n" % text )
def columnize( alist, width = 80 ):
"""
A word-wrap function that preserves existing line breaks
and most spaces in the text. Expects that existing line
breaks are posix newlines (\n).
"""
return reduce(lambda line, word, width=width: '%s%s%s' %
(line,
' \n'[(len(line[line.rfind('\n')+1:])
+ len(word.split('\n', 1)[0]
) >= width)],
word),
alist
)
def globfilter( names, pattern ):
return fnmatch.filter( names, pattern )
##########################################################################
# Class MemoryOutput
##########################################################################
class MemoryOutput:
"""File-like output class buffering the output of the last 10 commands"""
def __init__( self, delegate ):
self.delegate = delegate
self._buffer = []
self.text = []
self._command = None
def startCommand( self, command ):
self._command = command
self.text = []
def endCommand( self ):
if self._command is not None:
if len( self._buffer ) == 10: del self._buffer[0]
self._buffer.append( ( self._command, self.text ) )
def removeLast( self ):
if self._buffer:
del self._buffer[ len( self._buffer ) - 1 ]
self.text = []
self._command = None
def lastBuffer( self ):
if self._buffer:
return self._buffer[ len( self._buffer ) -1 ][1]
def bufferedCommands( self ):
return [ cmd for cmd, output in self._buffer ]
def buffer( self, i ):
if i < len( self._buffer ):
return "BB>> %s\n%s" % ( self._buffer[i][0], "".join( self._buffer[i][1] ) )
else: return "ERROR: Invalid buffer number. Buffer needs to be in (0, %d)" % ( len( self._buffer ) - 1 )
def write( self, text ):
if self._command is not None and text != "BB>> ": self.text.append( text )
if self.delegate is not None: self.delegate.write( text )
def flush( self ):
return self.delegate.flush()
def fileno( self ):
return self.delegate.fileno()
def isatty( self ):
return self.delegate.isatty()
##########################################################################
# Class BitBakeShell
##########################################################################
class BitBakeShell:
def __init__( self ):
"""Register commands and set up readline"""
self.commandQ = Queue.Queue()
self.commands = BitBakeShellCommands( self )
self.myout = MemoryOutput( sys.stdout )
self.historyfilename = os.path.expanduser( "~/.bbsh_history" )
self.startupfilename = os.path.expanduser( "~/.bbsh_startup" )
readline.set_completer( completer )
readline.set_completer_delims( " " )
readline.parse_and_bind("tab: complete")
try:
readline.read_history_file( self.historyfilename )
except IOError:
pass # It doesn't exist yet.
print(__credits__)
def cleanup( self ):
"""Write readline history and clean up resources"""
debugOut( "writing command history" )
try:
readline.write_history_file( self.historyfilename )
except:
print("SHELL: Unable to save command history")
def registerCommand( self, command, function, numparams = 0, usage = "", helptext = "" ):
"""Register a command"""
if usage == "": usage = command
if helptext == "": helptext = function.__doc__ or "<not yet documented>"
cmds[command] = ( function, numparams, usage, helptext )
def processCommand( self, command, params ):
"""Process a command. Check number of params and print a usage string, if appropriate"""
debugOut( "processing command '%s'..." % command )
try:
function, numparams, usage, helptext = cmds[command]
except KeyError:
print("SHELL: ERROR: '%s' command is not a valid command." % command)
self.myout.removeLast()
else:
if (numparams != -1) and (not len( params ) == numparams):
print("Usage: '%s'" % usage)
return
result = function( self.commands, params )
debugOut( "result was '%s'" % result )
def processStartupFile( self ):
"""Read and execute all commands found in $HOME/.bbsh_startup"""
if os.path.exists( self.startupfilename ):
startupfile = open( self.startupfilename, "r" )
for cmdline in startupfile:
debugOut( "processing startup line '%s'" % cmdline )
if not cmdline:
continue
if "|" in cmdline:
print("ERROR: '|' in startup file is not allowed. Ignoring line")
continue
self.commandQ.put( cmdline.strip() )
def main( self ):
"""The main command loop"""
while not leave_mainloop:
try:
if self.commandQ.empty():
sys.stdout = self.myout.delegate
cmdline = raw_input( "BB>> " )
sys.stdout = self.myout
else:
cmdline = self.commandQ.get()
if cmdline:
allCommands = cmdline.split( ';' )
for command in allCommands:
pipecmd = None
#
# special case for expert mode
if command == 'python':
sys.stdout = self.myout.delegate
self.processCommand( command, "" )
sys.stdout = self.myout
else:
self.myout.startCommand( command )
if '|' in command: # disable output
command, pipecmd = command.split( '|' )
delegate = self.myout.delegate
self.myout.delegate = None
tokens = shlex.split( command, True )
self.processCommand( tokens[0], tokens[1:] or "" )
self.myout.endCommand()
if pipecmd is not None: # restore output
self.myout.delegate = delegate
pipe = popen2.Popen4( pipecmd )
pipe.tochild.write( "\n".join( self.myout.lastBuffer() ) )
pipe.tochild.close()
sys.stdout.write( pipe.fromchild.read() )
#
except EOFError:
print()
return
except KeyboardInterrupt:
print()
##########################################################################
# Start function - called from the BitBake command line utility
##########################################################################
def start( aCooker ):
global cooker
cooker = aCooker
bbshell = BitBakeShell()
bbshell.processStartupFile()
bbshell.main()
bbshell.cleanup()
if __name__ == "__main__":
print("SHELL: Sorry, this program should only be called by BitBake.")

View File

@@ -30,45 +30,28 @@ import time
import pickle
from unittest.mock import Mock
from unittest.mock import call
from bb.msg import BBLogFormatter
class EventQueueStubBase(object):
""" Base class for EventQueueStub classes """
def __init__(self):
self.event_calls = []
return
def _store_event_data_string(self, event):
if isinstance(event, logging.LogRecord):
formatter = BBLogFormatter("%(levelname)s: %(message)s")
self.event_calls.append(formatter.format(event))
else:
self.event_calls.append(bb.event.getName(event))
return
class EventQueueStub(EventQueueStubBase):
class EventQueueStub():
""" Class used as specification for UI event handler queue stub objects """
def __init__(self):
super(EventQueueStub, self).__init__()
return
def send(self, event):
super(EventQueueStub, self)._store_event_data_string(event)
return
class PickleEventQueueStub(EventQueueStubBase):
class PickleEventQueueStub():
""" Class used as specification for UI event handler queue stub objects
with sendpickle method """
def __init__(self):
super(PickleEventQueueStub, self).__init__()
return
def sendpickle(self, pickled_event):
event = pickle.loads(pickled_event)
super(PickleEventQueueStub, self)._store_event_data_string(event)
return
class UIClientStub(object):
class UIClientStub():
""" Class used as specification for UI event handler stub objects """
def __init__(self):
self.event = None
@@ -76,7 +59,7 @@ class UIClientStub(object):
class EventHandlingTest(unittest.TestCase):
""" Event handling test class """
_threadlock_test_calls = []
def setUp(self):
self._test_process = Mock()
@@ -196,33 +179,6 @@ class EventHandlingTest(unittest.TestCase):
self.assertEqual(self._test_process.event_handler2.call_args_list,
expected_event_handler2)
def test_class_handler_filters(self):
""" Test filters for class handlers """
mask = ["bb.event.OperationStarted"]
result = bb.event.register("event_handler1",
self._test_process.event_handler1,
mask)
self.assertEqual(result, bb.event.Registered)
result = bb.event.register("event_handler2",
self._test_process.event_handler2,
"*")
self.assertEqual(result, bb.event.Registered)
bb.event.set_eventfilter(
lambda name, handler, event, d :
name == 'event_handler2' and
bb.event.getName(event) == "OperationStarted")
event1 = bb.event.OperationStarted()
event2 = bb.event.OperationCompleted(total=123)
bb.event.fire_class_handlers(event1, None)
bb.event.fire_class_handlers(event2, None)
bb.event.fire_class_handlers(event2, None)
expected_event_handler1 = []
expected_event_handler2 = [call(event1)]
self.assertEqual(self._test_process.event_handler1.call_args_list,
expected_event_handler1)
self.assertEqual(self._test_process.event_handler2.call_args_list,
expected_event_handler2)
def test_change_handler_event_mapping(self):
""" Test changing the event mapping for class handlers """
event1 = bb.event.OperationStarted()
@@ -240,8 +196,8 @@ class EventHandlingTest(unittest.TestCase):
expected)
# unregister handler and register it only for OperationStarted
bb.event.remove("event_handler1",
self._test_process.event_handler1)
result = bb.event.remove("event_handler1",
self._test_process.event_handler1)
mask = ["bb.event.OperationStarted"]
result = bb.event.register("event_handler1",
self._test_process.event_handler1,
@@ -254,8 +210,8 @@ class EventHandlingTest(unittest.TestCase):
expected)
# unregister handler and register it only for OperationCompleted
bb.event.remove("event_handler1",
self._test_process.event_handler1)
result = bb.event.remove("event_handler1",
self._test_process.event_handler1)
mask = ["bb.event.OperationCompleted"]
result = bb.event.register("event_handler1",
self._test_process.event_handler1,
@@ -303,61 +259,6 @@ class EventHandlingTest(unittest.TestCase):
self.assertEqual(self._test_ui2.event.sendpickle.call_args_list,
expected)
def test_ui_handler_mask_filter(self):
""" Test filters for UI handlers """
mask = ["bb.event.OperationStarted"]
debug_domains = {}
self._test_ui1.event = Mock(spec_set=EventQueueStub)
result = bb.event.register_UIHhandler(self._test_ui1, mainui=True)
bb.event.set_UIHmask(result, logging.INFO, debug_domains, mask)
self._test_ui2.event = Mock(spec_set=PickleEventQueueStub)
result = bb.event.register_UIHhandler(self._test_ui2, mainui=True)
bb.event.set_UIHmask(result, logging.INFO, debug_domains, mask)
event1 = bb.event.OperationStarted()
event2 = bb.event.OperationCompleted(total=1)
bb.event.fire_ui_handlers(event1, None)
bb.event.fire_ui_handlers(event2, None)
expected = [call(event1)]
self.assertEqual(self._test_ui1.event.send.call_args_list,
expected)
expected = [call(pickle.dumps(event1))]
self.assertEqual(self._test_ui2.event.sendpickle.call_args_list,
expected)
def test_ui_handler_log_filter(self):
""" Test log filters for UI handlers """
mask = ["*"]
debug_domains = {'BitBake.Foo': logging.WARNING}
self._test_ui1.event = EventQueueStub()
result = bb.event.register_UIHhandler(self._test_ui1, mainui=True)
bb.event.set_UIHmask(result, logging.ERROR, debug_domains, mask)
self._test_ui2.event = PickleEventQueueStub()
result = bb.event.register_UIHhandler(self._test_ui2, mainui=True)
bb.event.set_UIHmask(result, logging.ERROR, debug_domains, mask)
event1 = bb.event.OperationStarted()
bb.event.fire_ui_handlers(event1, None) # All events match
event_log_handler = bb.event.LogHandler()
logger = logging.getLogger("BitBake")
logger.addHandler(event_log_handler)
logger1 = logging.getLogger("BitBake.Foo")
logger1.warning("Test warning LogRecord1") # Matches debug_domains level
logger1.info("Test info LogRecord") # Filtered out
logger2 = logging.getLogger("BitBake.Bar")
logger2.error("Test error LogRecord") # Matches filter base level
logger2.warning("Test warning LogRecord2") # Filtered out
logger.removeHandler(event_log_handler)
expected = ['OperationStarted',
'WARNING: Test warning LogRecord1',
'ERROR: Test error LogRecord']
self.assertEqual(self._test_ui1.event.event_calls, expected)
self.assertEqual(self._test_ui2.event.event_calls, expected)
def test_fire(self):
""" Test fire method used to trigger class and ui event handlers """
mask = ["bb.event.ConfigParsed"]
@@ -388,28 +289,18 @@ class EventHandlingTest(unittest.TestCase):
self.assertEqual(self._test_ui1.event.send.call_args_list,
expected)
def test_worker_fire(self):
""" Test the triggering of bb.event.worker_fire callback """
bb.event.worker_fire = Mock()
event = bb.event.Event()
bb.event.fire(event, None)
expected = [call(event, None)]
self.assertEqual(bb.event.worker_fire.call_args_list, expected)
def test_print_ui_queue(self):
""" Test print_ui_queue method """
event1 = bb.event.OperationStarted()
event2 = bb.event.OperationCompleted(total=123)
bb.event.fire(event1, None)
bb.event.fire(event2, None)
event_log_handler = bb.event.LogHandler()
logger = logging.getLogger("BitBake")
logger.addHandler(event_log_handler)
logger.addHandler(bb.event.LogHandler())
logger.info("Test info LogRecord")
logger.warning("Test warning LogRecord")
with self.assertLogs("BitBake", level="INFO") as cm:
bb.event.print_ui_queue()
logger.removeHandler(event_log_handler)
self.assertEqual(cm.output,
["INFO:BitBake:Test info LogRecord",
"WARNING:BitBake:Test warning LogRecord"])
@@ -473,7 +364,6 @@ class EventHandlingTest(unittest.TestCase):
self.assertEqual(self._threadlock_test_calls,
["w1_ui1", "w1_ui2", "w2_ui1", "w2_ui2"])
def test_disable_threadlock(self):
""" Test disable_threadlock method """
self._set_threadlock_test_mockups()
@@ -485,502 +375,3 @@ class EventHandlingTest(unittest.TestCase):
# processed before finishing handling the first worker event.
self.assertEqual(self._threadlock_test_calls,
["w1_ui1", "w2_ui1", "w1_ui2", "w2_ui2"])
class EventClassesTest(unittest.TestCase):
""" Event classes test class """
_worker_pid = 54321
def setUp(self):
bb.event.worker_pid = EventClassesTest._worker_pid
def test_Event(self):
""" Test the Event base class """
event = bb.event.Event()
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_HeartbeatEvent(self):
""" Test the HeartbeatEvent class """
time = 10
event = bb.event.HeartbeatEvent(time)
self.assertEqual(event.time, time)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_OperationStarted(self):
""" Test OperationStarted event class """
msg = "Foo Bar"
event = bb.event.OperationStarted(msg)
self.assertEqual(event.msg, msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_OperationCompleted(self):
""" Test OperationCompleted event class """
msg = "Foo Bar"
total = 123
event = bb.event.OperationCompleted(total, msg)
self.assertEqual(event.msg, msg)
self.assertEqual(event.total, total)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_OperationProgress(self):
""" Test OperationProgress event class """
msg = "Foo Bar"
total = 123
current = 111
event = bb.event.OperationProgress(current, total, msg)
self.assertEqual(event.msg, msg + ": %s/%s" % (current, total))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ConfigParsed(self):
""" Test the ConfigParsed class """
event = bb.event.ConfigParsed()
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_MultiConfigParsed(self):
""" Test MultiConfigParsed event class """
mcdata = {"foobar": "Foo Bar"}
event = bb.event.MultiConfigParsed(mcdata)
self.assertEqual(event.mcdata, mcdata)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_RecipeEvent(self):
""" Test RecipeEvent event base class """
callback = lambda a: 2 * a
event = bb.event.RecipeEvent(callback)
self.assertEqual(event.fn(1), callback(1))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_RecipePreFinalise(self):
""" Test RecipePreFinalise event class """
callback = lambda a: 2 * a
event = bb.event.RecipePreFinalise(callback)
self.assertEqual(event.fn(1), callback(1))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_RecipeTaskPreProcess(self):
""" Test RecipeTaskPreProcess event class """
callback = lambda a: 2 * a
tasklist = [("foobar", callback)]
event = bb.event.RecipeTaskPreProcess(callback, tasklist)
self.assertEqual(event.fn(1), callback(1))
self.assertEqual(event.tasklist, tasklist)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_RecipeParsed(self):
""" Test RecipeParsed event base class """
callback = lambda a: 2 * a
event = bb.event.RecipeParsed(callback)
self.assertEqual(event.fn(1), callback(1))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_StampUpdate(self):
targets = ["foo", "bar"]
stampfns = [lambda:"foobar"]
event = bb.event.StampUpdate(targets, stampfns)
self.assertEqual(event.targets, targets)
self.assertEqual(event.stampPrefix, stampfns)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_BuildBase(self):
""" Test base class for bitbake build events """
name = "foo"
pkgs = ["bar"]
failures = 123
event = bb.event.BuildBase(name, pkgs, failures)
self.assertEqual(event.name, name)
self.assertEqual(event.pkgs, pkgs)
self.assertEqual(event.getFailures(), failures)
name = event.name = "bar"
pkgs = event.pkgs = ["foo"]
self.assertEqual(event.name, name)
self.assertEqual(event.pkgs, pkgs)
self.assertEqual(event.getFailures(), failures)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_BuildInit(self):
""" Test class for bitbake build invocation events """
event = bb.event.BuildInit()
self.assertEqual(event.name, None)
self.assertEqual(event.pkgs, [])
self.assertEqual(event.getFailures(), 0)
name = event.name = "bar"
pkgs = event.pkgs = ["foo"]
self.assertEqual(event.name, name)
self.assertEqual(event.pkgs, pkgs)
self.assertEqual(event.getFailures(), 0)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_BuildStarted(self):
""" Test class for build started events """
name = "foo"
pkgs = ["bar"]
failures = 123
event = bb.event.BuildStarted(name, pkgs, failures)
self.assertEqual(event.name, name)
self.assertEqual(event.pkgs, pkgs)
self.assertEqual(event.getFailures(), failures)
self.assertEqual(event.msg, "Building Started")
name = event.name = "bar"
pkgs = event.pkgs = ["foo"]
msg = event.msg = "foobar"
self.assertEqual(event.name, name)
self.assertEqual(event.pkgs, pkgs)
self.assertEqual(event.getFailures(), failures)
self.assertEqual(event.msg, msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_BuildCompleted(self):
""" Test class for build completed events """
total = 1000
name = "foo"
pkgs = ["bar"]
failures = 123
interrupted = 1
event = bb.event.BuildCompleted(total, name, pkgs, failures,
interrupted)
self.assertEqual(event.name, name)
self.assertEqual(event.pkgs, pkgs)
self.assertEqual(event.getFailures(), failures)
self.assertEqual(event.msg, "Building Failed")
event2 = bb.event.BuildCompleted(total, name, pkgs)
self.assertEqual(event2.name, name)
self.assertEqual(event2.pkgs, pkgs)
self.assertEqual(event2.getFailures(), 0)
self.assertEqual(event2.msg, "Building Succeeded")
self.assertEqual(event2.pid, EventClassesTest._worker_pid)
def test_DiskFull(self):
""" Test DiskFull event class """
dev = "/dev/foo"
type = "ext4"
freespace = "104M"
mountpoint = "/"
event = bb.event.DiskFull(dev, type, freespace, mountpoint)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_MonitorDiskEvent(self):
""" Test MonitorDiskEvent class """
available_bytes = 10000000
free_bytes = 90000000
total_bytes = 1000000000
du = bb.event.DiskUsageSample(available_bytes, free_bytes,
total_bytes)
event = bb.event.MonitorDiskEvent(du)
self.assertEqual(event.disk_usage.available_bytes, available_bytes)
self.assertEqual(event.disk_usage.free_bytes, free_bytes)
self.assertEqual(event.disk_usage.total_bytes, total_bytes)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_NoProvider(self):
""" Test NoProvider event class """
item = "foobar"
event1 = bb.event.NoProvider(item)
self.assertEqual(event1.getItem(), item)
self.assertEqual(event1.isRuntime(), False)
self.assertEqual(str(event1), "Nothing PROVIDES 'foobar'")
runtime = True
dependees = ["foo", "bar"]
reasons = None
close_matches = ["foibar", "footbar"]
event2 = bb.event.NoProvider(item, runtime, dependees, reasons,
close_matches)
self.assertEqual(event2.isRuntime(), True)
expected = ("Nothing RPROVIDES 'foobar' (but foo, bar RDEPENDS"
" on or otherwise requires it). Close matches:\n"
" foibar\n"
" footbar")
self.assertEqual(str(event2), expected)
reasons = ["Item does not exist on database"]
close_matches = ["foibar", "footbar"]
event3 = bb.event.NoProvider(item, runtime, dependees, reasons,
close_matches)
expected = ("Nothing RPROVIDES 'foobar' (but foo, bar RDEPENDS"
" on or otherwise requires it)\n"
"Item does not exist on database")
self.assertEqual(str(event3), expected)
self.assertEqual(event3.pid, EventClassesTest._worker_pid)
def test_MultipleProviders(self):
""" Test MultipleProviders event class """
item = "foobar"
candidates = ["foobarv1", "foobars"]
event1 = bb.event.MultipleProviders(item, candidates)
self.assertEqual(event1.isRuntime(), False)
self.assertEqual(event1.getItem(), item)
self.assertEqual(event1.getCandidates(), candidates)
expected = ("Multiple providers are available for foobar (foobarv1,"
" foobars)\n"
"Consider defining a PREFERRED_PROVIDER entry to match "
"foobar")
self.assertEqual(str(event1), expected)
runtime = True
event2 = bb.event.MultipleProviders(item, candidates, runtime)
self.assertEqual(event2.isRuntime(), runtime)
expected = ("Multiple providers are available for runtime foobar "
"(foobarv1, foobars)\n"
"Consider defining a PREFERRED_RPROVIDER entry to match "
"foobar")
self.assertEqual(str(event2), expected)
self.assertEqual(event2.pid, EventClassesTest._worker_pid)
def test_ParseStarted(self):
""" Test ParseStarted event class """
total = 123
event = bb.event.ParseStarted(total)
self.assertEqual(event.msg, "Recipe parsing Started")
self.assertEqual(event.total, total)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ParseCompleted(self):
""" Test ParseCompleted event class """
cached = 10
parsed = 13
skipped = 7
virtuals = 2
masked = 1
errors = 0
total = 23
event = bb.event.ParseCompleted(cached, parsed, skipped, masked,
virtuals, errors, total)
self.assertEqual(event.msg, "Recipe parsing Completed")
expected = [cached, parsed, skipped, virtuals, masked, errors,
cached + parsed, total]
actual = [event.cached, event.parsed, event.skipped, event.virtuals,
event.masked, event.errors, event.sofar, event.total]
self.assertEqual(str(actual), str(expected))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ParseProgress(self):
""" Test ParseProgress event class """
current = 10
total = 100
event = bb.event.ParseProgress(current, total)
self.assertEqual(event.msg,
"Recipe parsing" + ": %s/%s" % (current, total))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_CacheLoadStarted(self):
""" Test CacheLoadStarted event class """
total = 123
event = bb.event.CacheLoadStarted(total)
self.assertEqual(event.msg, "Loading cache Started")
self.assertEqual(event.total, total)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_CacheLoadProgress(self):
""" Test CacheLoadProgress event class """
current = 10
total = 100
event = bb.event.CacheLoadProgress(current, total)
self.assertEqual(event.msg,
"Loading cache" + ": %s/%s" % (current, total))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_CacheLoadCompleted(self):
""" Test CacheLoadCompleted event class """
total = 23
num_entries = 12
event = bb.event.CacheLoadCompleted(total, num_entries)
self.assertEqual(event.msg, "Loading cache Completed")
expected = [total, num_entries]
actual = [event.total, event.num_entries]
self.assertEqual(str(actual), str(expected))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_TreeDataPreparationStarted(self):
""" Test TreeDataPreparationStarted event class """
event = bb.event.TreeDataPreparationStarted()
self.assertEqual(event.msg, "Preparing tree data Started")
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_TreeDataPreparationProgress(self):
""" Test TreeDataPreparationProgress event class """
current = 10
total = 100
event = bb.event.TreeDataPreparationProgress(current, total)
self.assertEqual(event.msg,
"Preparing tree data" + ": %s/%s" % (current, total))
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_TreeDataPreparationCompleted(self):
""" Test TreeDataPreparationCompleted event class """
total = 23
event = bb.event.TreeDataPreparationCompleted(total)
self.assertEqual(event.msg, "Preparing tree data Completed")
self.assertEqual(event.total, total)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_DepTreeGenerated(self):
""" Test DepTreeGenerated event class """
depgraph = Mock()
event = bb.event.DepTreeGenerated(depgraph)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_TargetsTreeGenerated(self):
""" Test TargetsTreeGenerated event class """
model = Mock()
event = bb.event.TargetsTreeGenerated(model)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ReachableStamps(self):
""" Test ReachableStamps event class """
stamps = [Mock(), Mock()]
event = bb.event.ReachableStamps(stamps)
self.assertEqual(event.stamps, stamps)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_FilesMatchingFound(self):
""" Test FilesMatchingFound event class """
pattern = "foo.*bar"
matches = ["foobar"]
event = bb.event.FilesMatchingFound(pattern, matches)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ConfigFilesFound(self):
""" Test ConfigFilesFound event class """
variable = "FOO_BAR"
values = ["foo", "bar"]
event = bb.event.ConfigFilesFound(variable, values)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ConfigFilePathFound(self):
""" Test ConfigFilePathFound event class """
path = "/foo/bar"
event = bb.event.ConfigFilePathFound(path)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_message_classes(self):
""" Test message event classes """
msg = "foobar foo bar"
event = bb.event.MsgBase(msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
event = bb.event.MsgDebug(msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
event = bb.event.MsgNote(msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
event = bb.event.MsgWarn(msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
event = bb.event.MsgError(msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
event = bb.event.MsgFatal(msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
event = bb.event.MsgPlain(msg)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_LogExecTTY(self):
""" Test LogExecTTY event class """
msg = "foo bar"
prog = "foo.sh"
sleep_delay = 10
retries = 3
event = bb.event.LogExecTTY(msg, prog, sleep_delay, retries)
self.assertEqual(event.msg, msg)
self.assertEqual(event.prog, prog)
self.assertEqual(event.sleep_delay, sleep_delay)
self.assertEqual(event.retries, retries)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def _throw_zero_division_exception(self):
a = 1 / 0
return
def _worker_handler(self, event, d):
self._returned_event = event
return
def test_LogHandler(self):
""" Test LogHandler class """
logger = logging.getLogger("TestEventClasses")
logger.propagate = False
handler = bb.event.LogHandler(logging.INFO)
logger.addHandler(handler)
bb.event.worker_fire = self._worker_handler
try:
self._throw_zero_division_exception()
except ZeroDivisionError as ex:
logger.exception(ex)
event = self._returned_event
try:
pe = pickle.dumps(event)
newevent = pickle.loads(pe)
except:
self.fail('Logged event is not serializable')
self.assertEqual(event.taskpid, EventClassesTest._worker_pid)
def test_MetadataEvent(self):
""" Test MetadataEvent class """
eventtype = "footype"
eventdata = {"foo": "bar"}
event = bb.event.MetadataEvent(eventtype, eventdata)
self.assertEqual(event.type, eventtype)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ProcessStarted(self):
""" Test ProcessStarted class """
processname = "foo"
total = 9783128974
event = bb.event.ProcessStarted(processname, total)
self.assertEqual(event.processname, processname)
self.assertEqual(event.total, total)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ProcessProgress(self):
""" Test ProcessProgress class """
processname = "foo"
progress = 243224
event = bb.event.ProcessProgress(processname, progress)
self.assertEqual(event.processname, processname)
self.assertEqual(event.progress, progress)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_ProcessFinished(self):
""" Test ProcessFinished class """
processname = "foo"
total = 1242342344
event = bb.event.ProcessFinished(processname)
self.assertEqual(event.processname, processname)
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_SanityCheck(self):
""" Test SanityCheck class """
event1 = bb.event.SanityCheck()
self.assertEqual(event1.generateevents, True)
self.assertEqual(event1.pid, EventClassesTest._worker_pid)
generateevents = False
event2 = bb.event.SanityCheck(generateevents)
self.assertEqual(event2.generateevents, generateevents)
self.assertEqual(event2.pid, EventClassesTest._worker_pid)
def test_SanityCheckPassed(self):
""" Test SanityCheckPassed class """
event = bb.event.SanityCheckPassed()
self.assertEqual(event.pid, EventClassesTest._worker_pid)
def test_SanityCheckFailed(self):
""" Test SanityCheckFailed class """
msg = "The sanity test failed."
event1 = bb.event.SanityCheckFailed(msg)
self.assertEqual(event1.pid, EventClassesTest._worker_pid)
network_error = True
event2 = bb.event.SanityCheckFailed(msg, network_error)
self.assertEqual(event2.pid, EventClassesTest._worker_pid)
def test_network_event_classes(self):
""" Test network event classes """
event1 = bb.event.NetworkTest()
generateevents = False
self.assertEqual(event1.pid, EventClassesTest._worker_pid)
event2 = bb.event.NetworkTest(generateevents)
self.assertEqual(event2.pid, EventClassesTest._worker_pid)
event3 = bb.event.NetworkTestPassed()
self.assertEqual(event3.pid, EventClassesTest._worker_pid)
event4 = bb.event.NetworkTestFailed()
self.assertEqual(event4.pid, EventClassesTest._worker_pid)
def test_FindSigInfoResult(self):
""" Test FindSigInfoResult event class """
result = [Mock()]
event = bb.event.FindSigInfoResult(result)
self.assertEqual(event.result, result)
self.assertEqual(event.pid, EventClassesTest._worker_pid)

View File

@@ -20,7 +20,6 @@
#
import unittest
import hashlib
import tempfile
import subprocess
import collections
@@ -523,109 +522,6 @@ class FetcherLocalTest(FetcherTest):
with self.assertRaises(bb.fetch2.UnpackError):
self.fetchUnpack(['file://a;subdir=/bin/sh'])
class FetcherNoNetworkTest(FetcherTest):
def setUp(self):
super().setUp()
# all test cases are based on not having network
self.d.setVar("BB_NO_NETWORK", "1")
def test_missing(self):
string = "this is a test file\n".encode("utf-8")
self.d.setVarFlag("SRC_URI", "md5sum", hashlib.md5(string).hexdigest())
self.d.setVarFlag("SRC_URI", "sha256sum", hashlib.sha256(string).hexdigest())
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/test-file.tar.gz"], self.d)
with self.assertRaises(bb.fetch2.NetworkAccess):
fetcher.download()
def test_valid_missing_donestamp(self):
# create the file in the download directory with correct hash
string = "this is a test file\n".encode("utf-8")
with open(os.path.join(self.dldir, "test-file.tar.gz"), "wb") as f:
f.write(string)
self.d.setVarFlag("SRC_URI", "md5sum", hashlib.md5(string).hexdigest())
self.d.setVarFlag("SRC_URI", "sha256sum", hashlib.sha256(string).hexdigest())
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/test-file.tar.gz"], self.d)
fetcher.download()
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
def test_invalid_missing_donestamp(self):
# create an invalid file in the download directory with incorrect hash
string = "this is a test file\n".encode("utf-8")
with open(os.path.join(self.dldir, "test-file.tar.gz"), "wb"):
pass
self.d.setVarFlag("SRC_URI", "md5sum", hashlib.md5(string).hexdigest())
self.d.setVarFlag("SRC_URI", "sha256sum", hashlib.sha256(string).hexdigest())
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
fetcher = bb.fetch.Fetch(["http://invalid.yoctoproject.org/test-file.tar.gz"], self.d)
with self.assertRaises(bb.fetch2.NetworkAccess):
fetcher.download()
# the existing file should not exist or should have be moved to "bad-checksum"
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
def test_nochecksums_missing(self):
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
# ssh fetch does not support checksums
fetcher = bb.fetch.Fetch(["ssh://invalid@invalid.yoctoproject.org/test-file.tar.gz"], self.d)
# attempts to download with missing donestamp
with self.assertRaises(bb.fetch2.NetworkAccess):
fetcher.download()
def test_nochecksums_missing_donestamp(self):
# create a file in the download directory
with open(os.path.join(self.dldir, "test-file.tar.gz"), "wb"):
pass
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
# ssh fetch does not support checksums
fetcher = bb.fetch.Fetch(["ssh://invalid@invalid.yoctoproject.org/test-file.tar.gz"], self.d)
# attempts to download with missing donestamp
with self.assertRaises(bb.fetch2.NetworkAccess):
fetcher.download()
def test_nochecksums_has_donestamp(self):
# create a file in the download directory with the donestamp
with open(os.path.join(self.dldir, "test-file.tar.gz"), "wb"):
pass
with open(os.path.join(self.dldir, "test-file.tar.gz.done"), "wb"):
pass
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
# ssh fetch does not support checksums
fetcher = bb.fetch.Fetch(["ssh://invalid@invalid.yoctoproject.org/test-file.tar.gz"], self.d)
# should not fetch
fetcher.download()
# both files should still exist
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
def test_nochecksums_missing_has_donestamp(self):
# create a file in the download directory with the donestamp
with open(os.path.join(self.dldir, "test-file.tar.gz.done"), "wb"):
pass
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertTrue(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
# ssh fetch does not support checksums
fetcher = bb.fetch.Fetch(["ssh://invalid@invalid.yoctoproject.org/test-file.tar.gz"], self.d)
with self.assertRaises(bb.fetch2.NetworkAccess):
fetcher.download()
# both files should still exist
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz")))
self.assertFalse(os.path.exists(os.path.join(self.dldir, "test-file.tar.gz.done")))
class FetcherNetworkTest(FetcherTest):
@skipIfNoNetwork()
def test_fetch(self):
@@ -861,12 +757,12 @@ class FetchLatestVersionTest(FetcherTest):
("dtc", "git://git.qemu.org/dtc.git", "65cc4d2748a2c2e6f27f1cf39e07a5dbabd80ebf", "")
: "1.4.0",
# combination version pattern
("sysprof", "git://gitlab.gnome.org/GNOME/sysprof;protocol=https", "cd44ee6644c3641507fb53b8a2a69137f2971219", "")
("sysprof", "git://git.gnome.org/sysprof", "cd44ee6644c3641507fb53b8a2a69137f2971219", "")
: "1.2.0",
("u-boot-mkimage", "git://git.denx.de/u-boot.git;branch=master;protocol=git", "62c175fbb8a0f9a926c88294ea9f7e88eb898f6c", "")
: "2014.01",
# version pattern "yyyymmdd"
("mobile-broadband-provider-info", "git://gitlab.gnome.org/GNOME/mobile-broadband-provider-info;protocol=https", "4ed19e11c2975105b71b956440acdb25d46a347d", "")
("mobile-broadband-provider-info", "git://git.gnome.org/mobile-broadband-provider-info", "4ed19e11c2975105b71b956440acdb25d46a347d", "")
: "20120614",
# packages with a valid UPSTREAM_CHECK_GITTAGREGEX
("xf86-video-omap", "git://anongit.freedesktop.org/xorg/driver/xf86-video-omap", "ae0394e687f1a77e966cf72f895da91840dffb8f", "(?P<pver>(\d+\.(\d\.?)*))")
@@ -913,7 +809,7 @@ class FetchLatestVersionTest(FetcherTest):
ud = bb.fetch2.FetchData(k[1], self.d)
pupver= ud.method.latest_versionstring(ud, self.d)
verstring = pupver[0]
self.assertTrue(verstring, msg="Could not find upstream version for %s" % k[0])
self.assertTrue(verstring, msg="Could not find upstream version")
r = bb.utils.vercmp_string(v, verstring)
self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring))
@@ -926,7 +822,7 @@ class FetchLatestVersionTest(FetcherTest):
ud = bb.fetch2.FetchData(k[1], self.d)
pupver = ud.method.latest_versionstring(ud, self.d)
verstring = pupver[0]
self.assertTrue(verstring, msg="Could not find upstream version for %s" % k[0])
self.assertTrue(verstring, msg="Could not find upstream version")
r = bb.utils.vercmp_string(v, verstring)
self.assertTrue(r == -1 or r == 0, msg="Package %s, version: %s <= %s" % (k[0], v, verstring))
@@ -978,6 +874,9 @@ class FetchCheckStatusTest(FetcherTest):
class GitMakeShallowTest(FetcherTest):
bitbake_dir = os.path.join(os.path.dirname(os.path.join(__file__)), '..', '..', '..')
make_shallow_path = os.path.join(bitbake_dir, 'bin', 'git-make-shallow')
def setUp(self):
FetcherTest.setUp(self)
self.gitdir = os.path.join(self.tempdir, 'gitshallow')
@@ -1006,7 +905,7 @@ class GitMakeShallowTest(FetcherTest):
def make_shallow(self, args=None):
if args is None:
args = ['HEAD']
return bb.process.run([bb.fetch2.git.Git.make_shallow_path] + args, cwd=self.gitdir)
return bb.process.run([self.make_shallow_path] + args, cwd=self.gitdir)
def add_empty_file(self, path, msg=None):
if msg is None:

View File

@@ -604,16 +604,13 @@ class Tinfoil:
recipecache = self.cooker.recipecaches[mc]
prov = self.find_best_provider(pn)
fn = prov[3]
if fn:
actual_pn = recipecache.pkg_fn[fn]
recipe = TinfoilRecipeInfo(recipecache,
self.config_data,
pn=actual_pn,
fn=fn,
fns=recipecache.pkg_pn[actual_pn])
return recipe
else:
return None
actual_pn = recipecache.pkg_fn[fn]
recipe = TinfoilRecipeInfo(recipecache,
self.config_data,
pn=actual_pn,
fn=fn,
fns=recipecache.pkg_pn[actual_pn])
return recipe
def parse_recipe(self, pn):
"""

View File

@@ -719,11 +719,7 @@ class ORMWrapper(object):
def save_build_package_information(self, build_obj, package_info, recipes,
built_package):
# assert isinstance(build_obj, Build)
if not 'PN' in package_info.keys():
# no package data to save (e.g. 'OPKGN'="lib64-*"|"lib32-*")
return None
# assert isinstance(build_obj, Build)
# create and save the object
pname = package_info['PKG']

View File

@@ -187,7 +187,7 @@ def explode_deps(s):
#r[-1] += ' ' + ' '.join(j)
return r
def explode_dep_versions2(s, *, sort=True):
def explode_dep_versions2(s):
"""
Take an RDEPENDS style string of format:
"DEPEND1 (optional version) DEPEND2 (optional version) ..."
@@ -250,8 +250,7 @@ def explode_dep_versions2(s, *, sort=True):
if not (i in r and r[i]):
r[lastdep] = []
if sort:
r = collections.OrderedDict(sorted(r.items(), key=lambda x: x[0]))
r = collections.OrderedDict(sorted(r.items(), key=lambda x: x[0]))
return r
def explode_dep_versions(s):
@@ -524,17 +523,12 @@ def md5_file(filename):
"""
Return the hex string representation of the MD5 checksum of filename.
"""
import hashlib, mmap
import hashlib
m = hashlib.md5()
with open(filename, "rb") as f:
m = hashlib.md5()
try:
with mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) as mm:
for chunk in iter(lambda: mm.read(8192), b''):
m.update(chunk)
except ValueError:
# You can't mmap() an empty file so silence this exception
pass
for line in f:
m.update(line)
return m.hexdigest()
def sha256_file(filename):
@@ -812,8 +806,8 @@ def movefile(src, dest, newmtime = None, sstat = None):
return None # failure
try:
if didcopy:
os.lchown(destpath, sstat[stat.ST_UID], sstat[stat.ST_GID])
os.chmod(destpath, stat.S_IMODE(sstat[stat.ST_MODE])) # Sticky is reset on chown
os.lchown(dest, sstat[stat.ST_UID], sstat[stat.ST_GID])
os.chmod(dest, stat.S_IMODE(sstat[stat.ST_MODE])) # Sticky is reset on chown
os.unlink(src)
except Exception as e:
print("movefile: Failed to chown/chmod/unlink", dest, e)

View File

@@ -18,18 +18,16 @@ def plugin_init(plugins):
class ActionPlugin(LayerPlugin):
def do_add_layer(self, args):
"""Add one or more layers to bblayers.conf."""
layerdirs = [os.path.abspath(ldir) for ldir in args.layerdir]
"""Add a layer to bblayers.conf."""
layerdir = os.path.abspath(args.layerdir)
if not os.path.exists(layerdir):
sys.stderr.write("Specified layer directory doesn't exist\n")
return 1
for layerdir in layerdirs:
if not os.path.exists(layerdir):
sys.stderr.write("Specified layer directory %s doesn't exist\n" % layerdir)
return 1
layer_conf = os.path.join(layerdir, 'conf', 'layer.conf')
if not os.path.exists(layer_conf):
sys.stderr.write("Specified layer directory %s doesn't contain a conf/layer.conf file\n" % layerdir)
return 1
layer_conf = os.path.join(layerdir, 'conf', 'layer.conf')
if not os.path.exists(layer_conf):
sys.stderr.write("Specified layer directory doesn't contain a conf/layer.conf file\n")
return 1
bblayers_conf = os.path.join('conf', 'bblayers.conf')
if not os.path.exists(bblayers_conf):
@@ -42,7 +40,7 @@ class ActionPlugin(LayerPlugin):
shutil.copy2(bblayers_conf, backup)
try:
notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdirs, None)
notadded, _ = bb.utils.edit_bblayers_conf(bblayers_conf, layerdir, None)
if not (args.force or notadded):
try:
self.tinfoil.parseRecipes()
@@ -58,22 +56,19 @@ class ActionPlugin(LayerPlugin):
shutil.rmtree(tempdir)
def do_remove_layer(self, args):
"""Remove one or more layers from bblayers.conf."""
"""Remove a layer from bblayers.conf."""
bblayers_conf = os.path.join('conf', 'bblayers.conf')
if not os.path.exists(bblayers_conf):
sys.stderr.write("Unable to find bblayers.conf\n")
return 1
layerdirs = []
for item in args.layerdir:
if item.startswith('*'):
layerdir = item
elif not '/' in item:
layerdir = '*/%s' % item
else:
layerdir = os.path.abspath(item)
layerdirs.append(layerdir)
(_, notremoved) = bb.utils.edit_bblayers_conf(bblayers_conf, None, layerdirs)
if args.layerdir.startswith('*'):
layerdir = args.layerdir
elif not '/' in args.layerdir:
layerdir = '*/%s' % args.layerdir
else:
layerdir = os.path.abspath(args.layerdir)
(_, notremoved) = bb.utils.edit_bblayers_conf(bblayers_conf, None, layerdir)
if notremoved:
for item in notremoved:
sys.stderr.write("No layers matching %s found in BBLAYERS\n" % item)
@@ -245,10 +240,10 @@ build results (as the layer priority order has effectively changed).
def register_commands(self, sp):
parser_add_layer = self.add_command(sp, 'add-layer', self.do_add_layer, parserecipes=False)
parser_add_layer.add_argument('layerdir', nargs='+', help='Layer directory/directories to add')
parser_add_layer.add_argument('layerdir', help='Layer directory to add')
parser_remove_layer = self.add_command(sp, 'remove-layer', self.do_remove_layer, parserecipes=False)
parser_remove_layer.add_argument('layerdir', nargs='+', help='Layer directory/directories to remove (wildcards allowed, enclose in quotes to avoid shell expansion)')
parser_remove_layer.add_argument('layerdir', help='Layer directory to remove (wildcards allowed, enclose in quotes to avoid shell expansion)')
parser_remove_layer.set_defaults(func=self.do_remove_layer)
parser_flatten = self.add_command(sp, 'flatten', self.do_flatten)

View File

@@ -161,12 +161,7 @@ skipped recipes will also be listed, with a " (skipped)" suffix.
items_listed = False
for p in sorted(pkg_pn):
if pnspec:
found=False
for pnm in pnspec:
if fnmatch.fnmatch(p, pnm):
found=True
break
if not found:
if not fnmatch.fnmatch(p, pnspec):
continue
if len(allproviders[p]) > 1 or not show_multi_provider_only:
@@ -256,14 +251,8 @@ Lists recipes with the bbappends that apply to them as subitems.
pnlist.sort()
appends = False
for pn in pnlist:
if args.pnspec:
found=False
for pnm in args.pnspec:
if fnmatch.fnmatch(pn, pnm):
found=True
break
if not found:
continue
if args.pnspec and pn != args.pnspec:
continue
if self.show_appends_for_pn(pn):
appends = True
@@ -490,11 +479,11 @@ NOTE: .bbappend files can impact the dependencies.
parser_show_recipes = self.add_command(sp, 'show-recipes', self.do_show_recipes)
parser_show_recipes.add_argument('-f', '--filenames', help='instead of the default formatting, list filenames of higher priority recipes with the ones they overlay indented underneath', action='store_true')
parser_show_recipes.add_argument('-m', '--multiple', help='only list where multiple recipes (in the same layer or different layers) exist for the same recipe name', action='store_true')
parser_show_recipes.add_argument('-i', '--inherits', help='only list recipes that inherit the named class(es) - separate multiple classes using , (without spaces)', metavar='CLASS', default='')
parser_show_recipes.add_argument('pnspec', nargs='*', help='optional recipe name specification (wildcards allowed, enclose in quotes to avoid shell expansion)')
parser_show_recipes.add_argument('-i', '--inherits', help='only list recipes that inherit the named class', metavar='CLASS', default='')
parser_show_recipes.add_argument('pnspec', nargs='?', help='optional recipe name specification (wildcards allowed, enclose in quotes to avoid shell expansion)')
parser_show_appends = self.add_command(sp, 'show-appends', self.do_show_appends)
parser_show_appends.add_argument('pnspec', nargs='*', help='optional recipe name specification (wildcards allowed, enclose in quotes to avoid shell expansion)')
parser_show_appends.add_argument('pnspec', nargs='?', help='optional recipe name specification (wildcards allowed, enclose in quotes to avoid shell expansion)')
parser_show_cross_depends = self.add_command(sp, 'show-cross-depends', self.do_show_cross_depends)
parser_show_cross_depends.add_argument('-f', '--filenames', help='show full file path', action='store_true')

View File

@@ -17,7 +17,7 @@
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from django.conf.urls import include, url
from django.conf.urls import patterns, include, url
import bldcollector.views

View File

@@ -52,14 +52,12 @@ class LocalhostBEController(BuildEnvironmentController):
self.pokydirname = None
self.islayerset = False
def _shellcmd(self, command, cwd=None, nowait=False,env=None):
def _shellcmd(self, command, cwd=None, nowait=False):
if cwd is None:
cwd = self.be.sourcedir
if env is None:
env=os.environ.copy()
logger.debug("lbc_shellcmd: (%s) %s" % (cwd, command))
p = subprocess.Popen(command, cwd = cwd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
logger.debug("lbc_shellcmmd: (%s) %s" % (cwd, command))
p = subprocess.Popen(command, cwd = cwd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if nowait:
return
(out,err) = p.communicate()
@@ -100,8 +98,6 @@ class LocalhostBEController(BuildEnvironmentController):
layerlist = []
nongitlayerlist = []
git_env = os.environ.copy()
# (note: add custom environment settings here)
# set layers in the layersource
@@ -142,7 +138,7 @@ class LocalhostBEController(BuildEnvironmentController):
cached_layers = {}
try:
for remotes in self._shellcmd("git remote -v", self.be.sourcedir,env=git_env).split("\n"):
for remotes in self._shellcmd("git remote -v", self.be.sourcedir).split("\n"):
try:
remote = remotes.split("\t")[1].split(" ")[0]
if remote not in cached_layers:
@@ -171,7 +167,7 @@ class LocalhostBEController(BuildEnvironmentController):
if os.path.exists(localdirname):
try:
localremotes = self._shellcmd("git remote -v",
localdirname,env=git_env)
localdirname)
if not giturl in localremotes and commit != 'HEAD':
raise BuildSetupException("Existing git repository at %s, but with different remotes ('%s', expected '%s'). Toaster will not continue out of fear of damaging something." % (localdirname, ", ".join(localremotes.split("\n")), giturl))
except ShellCmdException:
@@ -181,18 +177,18 @@ class LocalhostBEController(BuildEnvironmentController):
else:
if giturl in cached_layers:
logger.debug("localhostbecontroller git-copying %s to %s" % (cached_layers[giturl], localdirname))
self._shellcmd("git clone \"%s\" \"%s\"" % (cached_layers[giturl], localdirname),env=git_env)
self._shellcmd("git remote remove origin", localdirname,env=git_env)
self._shellcmd("git remote add origin \"%s\"" % giturl, localdirname,env=git_env)
self._shellcmd("git clone \"%s\" \"%s\"" % (cached_layers[giturl], localdirname))
self._shellcmd("git remote remove origin", localdirname)
self._shellcmd("git remote add origin \"%s\"" % giturl, localdirname)
else:
logger.debug("localhostbecontroller: cloning %s in %s" % (giturl, localdirname))
self._shellcmd('git clone "%s" "%s"' % (giturl, localdirname),env=git_env)
self._shellcmd('git clone "%s" "%s"' % (giturl, localdirname))
# branch magic name "HEAD" will inhibit checkout
if commit != "HEAD":
logger.debug("localhostbecontroller: checking out commit %s to %s " % (commit, localdirname))
ref = commit if re.match('^[a-fA-F0-9]+$', commit) else 'origin/%s' % commit
self._shellcmd('git fetch && git reset --hard "%s"' % ref, localdirname,env=git_env)
self._shellcmd('git fetch --all && git reset --hard "%s"' % ref, localdirname)
# take the localdirname as poky dir if we can find the oe-init-build-env
if self.pokydirname is None and os.path.exists(os.path.join(localdirname, "oe-init-build-env")):
@@ -202,7 +198,7 @@ class LocalhostBEController(BuildEnvironmentController):
# make sure we have a working bitbake
if not os.path.exists(os.path.join(self.pokydirname, 'bitbake')):
logger.debug("localhostbecontroller: checking bitbake into the poky dirname %s " % self.pokydirname)
self._shellcmd("git clone -b \"%s\" \"%s\" \"%s\" " % (bitbake.commit, bitbake.giturl, os.path.join(self.pokydirname, 'bitbake')),env=git_env)
self._shellcmd("git clone -b \"%s\" \"%s\" \"%s\" " % (bitbake.commit, bitbake.giturl, os.path.join(self.pokydirname, 'bitbake')))
# verify our repositories
for name, dirpath in gitrepos[(giturl, commit)]:
@@ -217,21 +213,9 @@ class LocalhostBEController(BuildEnvironmentController):
self.setCloneStatus(bitbake,'complete',clone_total,clone_count)
logger.debug("localhostbecontroller: current layer list %s " % pformat(layerlist))
# Resolve self.pokydirname if not resolved yet, consider the scenario
# where all layers are local, that's the else clause
if self.pokydirname is None:
if os.path.exists(os.path.join(self.be.sourcedir, "oe-init-build-env")):
logger.debug("localhostbecontroller: selected poky dir name %s" % self.be.sourcedir)
self.pokydirname = self.be.sourcedir
else:
# Alternatively, scan local layers for relative "oe-init-build-env" location
for layer in layers:
if os.path.exists(os.path.join(layer.layer_version.layer.local_source_dir,"..","oe-init-build-env")):
logger.debug("localhostbecontroller, setting pokydirname to %s" % (layer.layer_version.layer.local_source_dir))
self.pokydirname = os.path.join(layer.layer_version.layer.local_source_dir,"..")
break
else:
logger.error("pokydirname is not set, you will run into trouble!")
if self.pokydirname is None and os.path.exists(os.path.join(self.be.sourcedir, "oe-init-build-env")):
logger.debug("localhostbecontroller: selected poky dir name %s" % self.be.sourcedir)
self.pokydirname = self.be.sourcedir
# 5. create custom layer and add custom recipes to it
for target in targets:
@@ -348,31 +332,15 @@ class LocalhostBEController(BuildEnvironmentController):
conf.write('%s="%s"\n' % (var.name, var.value))
conf.write('INHERIT+="toaster buildhistory"')
# clean the Toaster to build environment
env_clean = 'unset BBPATH;' # clean BBPATH for <= YP-2.4.0
# run bitbake server from the clone if available
# otherwise pick it from the PATH
bitbake = os.path.join(self.pokydirname, 'bitbake', 'bin', 'bitbake')
if not os.path.exists(bitbake):
logger.info("Bitbake not available under %s, will try to use it from PATH" %
self.pokydirname)
for path in os.environ["PATH"].split(os.pathsep):
if os.path.exists(os.path.join(path, 'bitbake')):
bitbake = os.path.join(path, 'bitbake')
logger.info("Found Bitbake at: %s" % path)
break
else:
logger.error("Looks like Bitbake is not available, please fix your environment")
# run bitbake server from the clone
bitbake = os.path.join(self.pokydirname, 'bitbake', 'bin', 'bitbake')
toasterlayers = os.path.join(builddir,"conf/toaster-bblayers.conf")
self._shellcmd('%s bash -c \"source %s %s; BITBAKE_UI="knotty" %s --read %s --read %s '
'--server-only -B 0.0.0.0:0\"' % (env_clean, oe_init,
self._shellcmd('bash -c \"source %s %s; BITBAKE_UI="knotty" %s --read %s --read %s '
'--server-only -B 0.0.0.0:0\"' % (oe_init,
builddir, bitbake, confpath, toasterlayers), self.be.sourcedir)
# read port number from bitbake.lock
self.be.bbport = -1
self.be.bbport = ""
bblock = os.path.join(builddir, 'bitbake.lock')
# allow 10 seconds for bb lock file to appear but also be populated
for lock_check in range(10):
@@ -384,9 +352,6 @@ class LocalhostBEController(BuildEnvironmentController):
break
logger.debug("localhostbecontroller: waiting for bblock content to appear")
time.sleep(1)
else:
raise BuildSetupException("Cannot find bitbake server lock file '%s'. Aborting." % bblock)
with open(bblock) as fplock:
for line in fplock:
if ":" in line:
@@ -394,7 +359,7 @@ class LocalhostBEController(BuildEnvironmentController):
logger.debug("localhostbecontroller: bitbake port %s", self.be.bbport)
break
if -1 == self.be.bbport:
if not self.be.bbport:
raise BuildSetupException("localhostbecontroller: can't read bitbake port from %s" % bblock)
self.be.bbaddress = "localhost"
@@ -415,10 +380,10 @@ class LocalhostBEController(BuildEnvironmentController):
log = os.path.join(builddir, 'toaster_ui.log')
local_bitbake = os.path.join(os.path.dirname(os.getenv('BBBASEDIR')),
'bitbake')
self._shellcmd(['%s bash -c \"(TOASTER_BRBE="%s" BBSERVER="0.0.0.0:%s" '
self._shellcmd(['bash -c \"(TOASTER_BRBE="%s" BBSERVER="0.0.0.0:%s" '
'%s %s -u toasterui --read %s --read %s --token="" >>%s 2>&1;'
'BITBAKE_UI="knotty" BBSERVER=0.0.0.0:%s %s -m)&\"' \
% (env_clean, brbe, self.be.bbport, local_bitbake, bbtargets, confpath, toasterlayers, log,
% (brbe, self.be.bbport, local_bitbake, bbtargets, confpath, toasterlayers, log,
self.be.bbport, bitbake,)],
builddir, nowait=True)

View File

@@ -74,9 +74,8 @@ class Command(BaseCommand):
print("Loading default settings")
call_command("loaddata", "settings")
template_conf = os.environ.get("TEMPLATECONF", "")
custom_xml_only = os.environ.get("CUSTOM_XML_ONLY")
if ToasterSetting.objects.filter(name='CUSTOM_XML_ONLY').count() > 0 or (not custom_xml_only == None):
if ToasterSetting.objects.filter(name='CUSTOM_XML_ONLY').count() > 0:
# only use the custom settings
pass
elif "poky" in template_conf:
@@ -108,10 +107,7 @@ class Command(BaseCommand):
action="ignore",
message="^.*No fixture named.*$")
print("Importing custom settings if present")
try:
call_command("loaddata", "custom")
except:
print("NOTE: optional fixture 'custom' not found")
call_command("loaddata", "custom")
# we run lsupdates after config update
print("\nFetching information from the layer index, "

View File

@@ -8,9 +8,9 @@
<!-- Bitbake versions which correspond to the metadata release -->
<object model="orm.bitbakeversion" pk="1">
<field type="CharField" name="name">sumo</field>
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
<field type="CharField" name="branch">1.38</field>
<field type="CharField" name="branch">1.36</field>
</object>
<object model="orm.bitbakeversion" pk="2">
<field type="CharField" name="name">HEAD</field>
@@ -22,19 +22,14 @@
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
<field type="CharField" name="branch">master</field>
</object>
<object model="orm.bitbakeversion" pk="4">
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="giturl">git://git.openembedded.org/bitbake</field>
<field type="CharField" name="branch">1.36</field>
</object>
<!-- Releases available -->
<object model="orm.release" pk="1">
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="description">Openembedded Sumo</field>
<field type="CharField" name="description">Openembedded Rocko</field>
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field>
<field type="CharField" name="branch_name">sumo</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=sumo\"&gt;OpenEmbedded Sumo&lt;/a&gt; branch.</field>
<field type="CharField" name="branch_name">rocko</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=rocko\"&gt;OpenEmbedded Rocko&lt;/a&gt; branch.</field>
</object>
<object model="orm.release" pk="2">
<field type="CharField" name="name">local</field>
@@ -50,13 +45,6 @@
<field type="CharField" name="branch_name">master</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"http://cgit.openembedded.org/openembedded-core/log/\"&gt;OpenEmbedded master&lt;/a&gt; branch.</field>
</object>
<object model="orm.release" pk="4">
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="description">Openembedded Rocko</field>
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field>
<field type="CharField" name="branch_name">rocko</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href=\"http://cgit.openembedded.org/openembedded-core/log/?h=rocko\"&gt;OpenEmbedded Rocko&lt;/a&gt; branch.</field>
</object>
<!-- Default layers for each release -->
<object model="orm.releasedefaultlayer" pk="1">
@@ -71,10 +59,6 @@
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<object model="orm.releasedefaultlayer" pk="4">
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<!-- Layer for the Local release -->

View File

@@ -8,9 +8,9 @@
<!-- Bitbake versions which correspond to the metadata release -->
<object model="orm.bitbakeversion" pk="1">
<field type="CharField" name="name">sumo</field>
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
<field type="CharField" name="branch">sumo</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">bitbake</field>
</object>
<object model="orm.bitbakeversion" pk="2">
@@ -25,21 +25,15 @@
<field type="CharField" name="branch">master</field>
<field type="CharField" name="dirpath">bitbake</field>
</object>
<object model="orm.bitbakeversion" pk="4">
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="giturl">git://git.yoctoproject.org/poky</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">bitbake</field>
</object>
<!-- Releases available -->
<object model="orm.release" pk="1">
<field type="CharField" name="name">sumo</field>
<field type="CharField" name="description">Yocto Project 2.5 "Sumo"</field>
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="description">Yocto Project 2.4 "Rocko"</field>
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field>
<field type="CharField" name="branch_name">sumo</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=sumo"&gt;Yocto Project Sumo branch&lt;/a&gt;.</field>
<field type="CharField" name="branch_name">rocko</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=rocko"&gt;Yocto Project Rocko branch&lt;/a&gt;.</field>
</object>
<object model="orm.release" pk="2">
<field type="CharField" name="name">local</field>
@@ -55,13 +49,6 @@
<field type="CharField" name="branch_name">master</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/"&gt;Yocto Project Master branch&lt;/a&gt;.</field>
</object>
<object model="orm.release" pk="4">
<field type="CharField" name="name">rocko</field>
<field type="CharField" name="description">Yocto Project 2.4 "Rocko"</field>
<field rel="ManyToOneRel" to="orm.bitbakeversion" name="bitbake_version">1</field>
<field type="CharField" name="branch_name">rocko</field>
<field type="TextField" name="helptext">Toaster will run your builds using the tip of the &lt;a href="http://git.yoctoproject.org/cgit/cgit.cgi/poky/log/?h=rocko"&gt;Yocto Project Rocko branch&lt;/a&gt;.</field>
</object>
<!-- Default project layers for each release -->
<object model="orm.releasedefaultlayer" pk="1">
@@ -100,18 +87,6 @@
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
</object>
<object model="orm.releasedefaultlayer" pk="10">
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="layer_name">openembedded-core</field>
</object>
<object model="orm.releasedefaultlayer" pk="11">
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="layer_name">meta-poky</field>
</object>
<object model="orm.releasedefaultlayer" pk="12">
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="layer_name">meta-yocto-bsp</field>
</object>
<!-- Default layers provided by poky
openembedded-core
@@ -130,7 +105,7 @@
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
<field type="CharField" name="branch">sumo</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">meta</field>
</object>
<object model="orm.layer_version" pk="2">
@@ -148,13 +123,6 @@
<field type="CharField" name="branch">master</field>
<field type="CharField" name="dirpath">meta</field>
</object>
<object model="orm.layer_version" pk="4">
<field rel="ManyToOneRel" to="orm.layer" name="layer">1</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">meta</field>
</object>
<object model="orm.layer" pk="2">
<field type="CharField" name="name">meta-poky</field>
@@ -164,14 +132,14 @@
<field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
<field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
</object>
<object model="orm.layer_version" pk="5">
<object model="orm.layer_version" pk="4">
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
<field type="CharField" name="branch">sumo</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">meta-poky</field>
</object>
<object model="orm.layer_version" pk="6">
<object model="orm.layer_version" pk="5">
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">2</field>
@@ -179,20 +147,13 @@
<field type="CharField" name="commit">HEAD</field>
<field type="CharField" name="dirpath">meta-poky</field>
</object>
<object model="orm.layer_version" pk="7">
<object model="orm.layer_version" pk="6">
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="branch">master</field>
<field type="CharField" name="dirpath">meta-poky</field>
</object>
<object model="orm.layer_version" pk="8">
<field rel="ManyToOneRel" to="orm.layer" name="layer">2</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">meta-poky</field>
</object>
<object model="orm.layer" pk="3">
<field type="CharField" name="name">meta-yocto-bsp</field>
@@ -202,14 +163,14 @@
<field type="CharField" name="vcs_web_tree_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
<field type="CharField" name="vcs_web_file_base_url">http://git.yoctoproject.org/cgit/cgit.cgi/poky/tree/%path%?h=%branch%</field>
</object>
<object model="orm.layer_version" pk="9">
<object model="orm.layer_version" pk="7">
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">1</field>
<field type="CharField" name="branch">sumo</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
</object>
<object model="orm.layer_version" pk="10">
<object model="orm.layer_version" pk="8">
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">2</field>
@@ -217,18 +178,11 @@
<field type="CharField" name="commit">HEAD</field>
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
</object>
<object model="orm.layer_version" pk="11">
<object model="orm.layer_version" pk="9">
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">3</field>
<field type="CharField" name="branch">master</field>
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
</object>
<object model="orm.layer_version" pk="12">
<field rel="ManyToOneRel" to="orm.layer" name="layer">3</field>
<field type="IntegerField" name="layer_source">0</field>
<field rel="ManyToOneRel" to="orm.release" name="release">4</field>
<field type="CharField" name="branch">rocko</field>
<field type="CharField" name="dirpath">meta-yocto-bsp</field>
</object>
</django-objects>

View File

@@ -1663,9 +1663,6 @@ class CustomImageRecipe(Recipe):
path_schema_two = self.base_recipe.file_path
path_schema_three = "%s/%s" % (self.base_recipe.layer_version.layer.local_source_dir,
self.base_recipe.file_path)
if os.path.exists(path_schema_one):
return path_schema_one
@@ -1673,10 +1670,6 @@ class CustomImageRecipe(Recipe):
if os.path.exists(path_schema_two):
return path_schema_two
# Or a local path if all layers are local
if os.path.exists(path_schema_three):
return path_schema_three
return None
def generate_recipe_file_contents(self):

View File

@@ -359,8 +359,7 @@ function layerDetailsPageInit (ctx) {
if ($(this).is("dt")) {
var dd = $(this).next("dd");
if (!dd.children("form:visible")|| !dd.find(".current-value").html()){
if (ctx.layerVersion.layer_source == ctx.layerSourceTypes.TYPE_IMPORTED ||
ctx.layerVersion.layer_source == ctx.layerSourceTypes.TYPE_LOCAL) {
if (ctx.layerVersion.layer_source == ctx.layerSourceTypes.TYPE_IMPORTED){
/* There's no current value and the layer is editable
* so show the "Not set" and hide the delete icon
*/

View File

@@ -110,7 +110,6 @@
All builds
</a>
</li>
{% if project_enable %}
<li id="navbar-all-projects"
{% if request.resolver_match.url_name == 'all-projects' %}
class="active"
@@ -120,7 +119,6 @@
All projects
</a>
</li>
{% endif %}
{% endif %}
<li id="navbar-docs">
<a target="_blank" href="http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html">
@@ -129,9 +127,7 @@
</a>
</li>
</ul>
{% if project_enable %}
<a class="btn btn-default navbar-btn navbar-right" id="new-project-button" href="{% url 'newproject' %}">New project</a>
{% endif %}
</div>
</div>
</nav>

View File

@@ -14,20 +14,12 @@
<p>A web interface to <a href="http://www.openembedded.org">OpenEmbedded</a> and <a href="http://www.yoctoproject.org/tools-resources/projects/bitbake">BitBake</a>, the <a href="http://www.yoctoproject.org">Yocto Project</a> build system.</p>
<p class="top-air">
<a class="btn btn-info btn-lg" href="http://www.yoctoproject.org/docs/latest/toaster-manual/toaster-manual.html#toaster-manual-setup-and-use">
Toaster is ready to capture your command line builds
</a>
</p>
{% if lvs_nos %}
{% if project_enable %}
<p class="top-air">
<a class="btn btn-primary btn-lg" href="{% url 'newproject' %}">
Create your first Toaster project to run manage builds
To start building, create your first Toaster project
</a>
</p>
{% endif %}
{% else %}
<div class="alert alert-info lead top-air">
Toaster has no layer information. Without layer information, you cannot run builds. To generate layer information you can:

View File

@@ -54,12 +54,12 @@
<span class="help-block">{{release.helptext|safe}}</span>
</div>
{% endfor %}
</div>
</div>
{% else %}
<input type="hidden" name="projectversion" value="{{releases.0.id}}"/>
{% endif %}
</div>
</div>
</fieldset>
{% endif %}
<div class="top-air">
<input type="submit" id="create-project-button" class="btn btn-primary btn-lg" value="Create project"/>

View File

@@ -176,7 +176,7 @@
<td>{{task.get_executed_display}}</td>
<td>{{task.get_outcome_display}}
{% if task.outcome == task.OUTCOME_FAILED %}
{% if task.outcome = task.OUTCOME_FAILED %}
<a href="{% url 'build_artifact' build.pk "tasklogfile" task.pk %}">
<span class="glyphicon glyphicon-download-alt
get-help" title="Download task log

View File

@@ -16,7 +16,7 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from django.conf.urls import include, url
from django.conf.urls import patterns, include, url
from django.views.generic import RedirectView, TemplateView
from django.http import HttpResponseBadRequest

View File

@@ -49,8 +49,6 @@ import logging
logger = logging.getLogger("toaster")
# Project creation and managed build enable
project_enable = ('1' == os.environ.get('TOASTER_BUILDSERVER'))
class MimeTypeFinder(object):
# setting this to False enables additional non-standard mimetypes
@@ -67,12 +65,6 @@ class MimeTypeFinder(object):
guessed_type = 'application/octet-stream'
return guessed_type
# single point to add global values into the context before rendering
def toaster_render(request, page, context):
context['project_enable'] = project_enable
return render(request, page, context)
# all new sessions should come through the landing page;
# determine in which mode we are running in, and redirect appropriately
def landing(request):
@@ -94,7 +86,7 @@ def landing(request):
context = {'lvs_nos' : Layer_Version.objects.all().count()}
return toaster_render(request, 'landing.html', context)
return render(request, 'landing.html', context)
def objtojson(obj):
from django.db.models.query import QuerySet
@@ -285,7 +277,7 @@ def _validate_input(field_input, model):
return None, invalid + str(field_input_list)
# Check we are looking for a valid field
valid_fields = [f.name for f in model._meta.get_fields()]
valid_fields = model._meta.get_all_field_names()
for field in field_input_list[0].split(AND_VALUE_SEPARATOR):
if True in [field.startswith(x) for x in valid_fields]:
break
@@ -527,7 +519,7 @@ def builddashboard( request, build_id ):
'packagecount' : packageCount,
'logmessages' : logmessages,
}
return toaster_render( request, template, context )
return render( request, template, context )
@@ -599,7 +591,7 @@ def task( request, build_id, task_id ):
build__completed_on__lt=task_object.build.completed_on).exclude(
order__isnull=True).exclude(outcome=Task.OUTCOME_NA).order_by('-build__completed_on')
return toaster_render( request, template, context )
return render( request, template, context )
def recipe(request, build_id, recipe_id, active_tab="1"):
template = "recipe.html"
@@ -626,7 +618,7 @@ def recipe(request, build_id, recipe_id, active_tab="1"):
'package_count' : package_count,
'tab_states' : tab_states,
}
return toaster_render(request, template, context)
return render(request, template, context)
def recipe_packages(request, build_id, recipe_id):
template = "recipe_packages.html"
@@ -671,7 +663,7 @@ def recipe_packages(request, build_id, recipe_id):
},
]
}
response = toaster_render(request, template, context)
response = render(request, template, context)
_set_parameters_values(pagesize, orderby, request)
return response
@@ -793,7 +785,7 @@ def dirinfo(request, build_id, target_id, file_path=None):
'dir_list': dir_list,
'file_path': file_path,
}
return toaster_render(request, template, context)
return render(request, template, context)
def _find_task_dep(task_object):
tdeps = Task_Dependency.objects.filter(task=task_object).filter(depends_on__order__gt=0)
@@ -845,7 +837,7 @@ def configuration(request, build_id):
'build': build,
'project': build.project,
'targets': Target.objects.filter(build=build_id)})
return toaster_render(request, template, context)
return render(request, template, context)
def configvars(request, build_id):
@@ -934,7 +926,7 @@ def configvars(request, build_id):
],
}
response = toaster_render(request, template, context)
response = render(request, template, context)
_set_parameters_values(pagesize, orderby, request)
return response
@@ -947,7 +939,7 @@ def bfile(request, build_id, package_id):
'project': build.project,
'objects' : files
}
return toaster_render(request, template, context)
return render(request, template, context)
# A set of dependency types valid for both included and built package views
@@ -1100,7 +1092,7 @@ def package_built_detail(request, build_id, package_id):
if paths.all().count() < 2:
context['disable_sort'] = True;
response = toaster_render(request, template, context)
response = render(request, template, context)
_set_parameters_values(pagesize, orderby, request)
return response
@@ -1119,7 +1111,7 @@ def package_built_dependencies(request, build_id, package_id):
'other_deps' : dependencies['other_deps'],
'dependency_count' : _get_package_dependency_count(package, -1, False)
}
return toaster_render(request, template, context)
return render(request, template, context)
def package_included_detail(request, build_id, target_id, package_id):
@@ -1165,7 +1157,7 @@ def package_included_detail(request, build_id, target_id, package_id):
}
if paths.all().count() < 2:
context['disable_sort'] = True
response = toaster_render(request, template, context)
response = render(request, template, context)
_set_parameters_values(pagesize, orderby, request)
return response
@@ -1189,7 +1181,7 @@ def package_included_dependencies(request, build_id, target_id, package_id):
'reverse_count' : _get_package_reverse_dep_count(package, target_id),
'dependency_count' : _get_package_dependency_count(package, target_id, True)
}
return toaster_render(request, template, context)
return render(request, template, context)
def package_included_reverse_dependencies(request, build_id, target_id, package_id):
template = "package_included_reverse_dependencies.html"
@@ -1240,7 +1232,7 @@ def package_included_reverse_dependencies(request, build_id, target_id, package_
}
if objects.all().count() < 2:
context['disable_sort'] = True
response = toaster_render(request, template, context)
response = render(request, template, context)
_set_parameters_values(pagesize, orderby, request)
return response
@@ -1373,9 +1365,6 @@ if True:
# new project
def newproject(request):
if not project_enable:
return redirect( landing )
template = "newproject.html"
context = {
'email': request.user.email if request.user.is_authenticated() else '',
@@ -1390,7 +1379,7 @@ if True:
if request.method == "GET":
# render new project page
return toaster_render(request, template, context)
return render(request, template, context)
elif request.method == "POST":
mandatory_fields = ['projectname', 'ptype']
try:
@@ -1430,7 +1419,7 @@ if True:
context['alert'] = "Your chosen username is already used"
else:
context['alert'] = str(e)
return toaster_render(request, template, context)
return render(request, template, context)
raise Exception("Invalid HTTP method for this page")
@@ -1438,7 +1427,7 @@ if True:
def project(request, pid):
project = Project.objects.get(pk=pid)
context = {"project": project}
return toaster_render(request, "project.html", context)
return render(request, "project.html", context)
def jsunittests(request):
""" Provides a page for the js unit tests """
@@ -1464,7 +1453,7 @@ if True:
name="MACHINE",
value="qemux86")
context = {'project': new_project}
return toaster_render(request, "js-unit-tests.html", context)
return render(request, "js-unit-tests.html", context)
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
@@ -1599,7 +1588,7 @@ if True:
context = {
'project': Project.objects.get(id=pid),
}
return toaster_render(request, template, context)
return render(request, template, context)
def layerdetails(request, pid, layerid):
project = Project.objects.get(pk=pid)
@@ -1628,7 +1617,7 @@ if True:
'projectlayers': list(project_layers)
}
return toaster_render(request, 'layerdetails.html', context)
return render(request, 'layerdetails.html', context)
def get_project_configvars_context():
@@ -1718,7 +1707,7 @@ if True:
except (ProjectVariable.DoesNotExist, BuildEnvironment.DoesNotExist):
pass
return toaster_render(request, "projectconf.html", context)
return render(request, "projectconf.html", context)
def _file_names_for_artifact(build, artifact_type, artifact_id):
"""
@@ -1785,7 +1774,7 @@ if True:
return response
else:
return toaster_render(request, "unavailable_artifact.html")
return render(request, "unavailable_artifact.html")
except (ObjectDoesNotExist, IOError):
return toaster_render(request, "unavailable_artifact.html")
return render(request, "unavailable_artifact.html")

View File

@@ -41,7 +41,6 @@ import types
import json
import collections
import re
import os
from toastergui.tablefilter import TableFilterMap
@@ -87,9 +86,6 @@ class ToasterTable(TemplateView):
context['table_name'] = type(self).__name__.lower()
context['empty_state'] = self.empty_state
# global variables
context['project_enable'] = ('1' == os.environ.get('TOASTER_BUILDSERVER'))
return context
def get(self, request, *args, **kwargs):
@@ -511,18 +507,13 @@ class MostRecentBuildsView(View):
buildrequest_id = build_obj.buildrequest.pk
build['buildrequest_id'] = buildrequest_id
if build_obj.recipes_to_parse > 0:
build['recipes_parsed_percentage'] = \
int((build_obj.recipes_parsed /
build_obj.recipes_to_parse) * 100)
else:
build['recipes_parsed_percentage'] = 0
if build_obj.repos_to_clone > 0:
build['repos_cloned_percentage'] = \
int((build_obj.repos_cloned /
build_obj.repos_to_clone) * 100)
else:
build['repos_cloned_percentage'] = 0
build['recipes_parsed_percentage'] = \
int((build_obj.recipes_parsed /
build_obj.recipes_to_parse) * 100)
build['repos_cloned_percentage'] = \
int((build_obj.repos_cloned /
build_obj.repos_to_clone) * 100)
tasks_complete_percentage = 0
if build_obj.outcome in (Build.SUCCEEDED, Build.FAILED):

View File

@@ -186,7 +186,7 @@ TEMPLATES = [
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
# Custom
'django.template.context_processors.request',
'django.core.context_processors.request',
'toastergui.views.managedcontextprocessor',
],

View File

@@ -19,7 +19,7 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from django.conf.urls import include, url
from django.conf.urls import patterns, include, url
from django.views.generic import RedirectView, TemplateView
from django.views.decorators.cache import never_cache
import bldcollector.views

View File

@@ -1,3 +1,3 @@
Django>1.8,<1.11.9
Django>1.8,<1.9.9
beautifulsoup4>=4.4.0
pytz

View File

@@ -48,7 +48,7 @@
# Examples:
#
# make DOC=bsp-guide
# make html DOC=brief-yoctoprojectqs
# make html DOC=yocto-project-qs
# make pdf DOC=ref-manual
# make DOC=dev-manual BRANCH=edison
# make DOC=mega-manual BRANCH=denzil
@@ -56,7 +56,7 @@
# The first example generates the HTML and Eclipse help versions of the BSP Guide.
# The second example generates the HTML version only of the Quick Start. Note
# that the Quick Start only has an HTML version available. So, the
# 'make DOC=brief-yoctoprojectqs' command would be equivalent. The third example
# 'make DOC=yocto-project-qs' command would be equivalent. The third example
# generates just the PDF version of the Yocto Project Reference Manual.
# The fourth example generates the HTML 'edison' version and (if available)
# the Eclipse help version of the YP Development Tasks Manual. The last example
@@ -84,40 +84,6 @@
# for the 'denzil' branch.
#
ifeq ($(DOC),brief-yoctoprojectqs)
XSLTOPTS = --stringparam html.stylesheet brief-yoctoprojectqs-style.css \
--stringparam chapter.autolabel 0 \
--stringparam section.autolabel 0 \
--stringparam section.label.includes.component.label 0 \
--xinclude
ALLPREQ = html eclipse tarball
TARFILES = brief-yoctoprojectqs-style.css brief-yoctoprojectqs.html figures/bypqs-title.png \
figures/yocto-project-transp.png
MANUALS = $(DOC)/$(DOC).html $(DOC)/eclipse
FIGURES = figures
STYLESHEET = $(DOC)/*.css
endif
ifeq ($(DOC),overview-manual)
XSLTOPTS = --xinclude
ALLPREQ = html eclipse tarball
TARFILES = overview-manual-style.css overview-manual.html figures/overview-manual-title.png \
figures/git-workflow.png figures/source-repos.png figures/index-downloads.png \
figures/yp-download.png figures/YP-flow-diagram.png figures/key-dev-elements.png \
figures/poky-reference-distribution.png figures/cross-development-toolchains.png \
figures/user-configuration.png figures/layer-input.png figures/source-input.png \
figures/package-feeds.png figures/patching.png figures/source-fetching.png \
figures/configuration-compile-autoreconf.png figures/analysis-for-package-splitting.png \
figures/image-generation.png figures/sdk-generation.png figures/images.png \
figures/sdk.png \
eclipse
MANUALS = $(DOC)/$(DOC).html $(DOC)/eclipse
FIGURES = figures
STYLESHEET = $(DOC)/*.css
endif
ifeq ($(DOC),bsp-guide)
XSLTOPTS = --xinclude
ALLPREQ = html eclipse tarball
@@ -162,8 +128,8 @@ TARFILES = dev-style.css dev-manual.html \
figures/source-repos.png figures/yp-download.png \
figures/wip.png
else
TARFILES = dev-style.css dev-manual.html figures/buildhistory-web.png \
figures/dev-title.png figures/buildhistory.png \
TARFILES = dev-style.css dev-manual.html \
figures/dev-title.png \
figures/recipe-workflow.png figures/bitbake-build-flow.png \
eclipse
endif
@@ -174,6 +140,17 @@ STYLESHEET = $(DOC)/*.css
endif
ifeq ($(DOC),yocto-project-qs)
XSLTOPTS = --xinclude
ALLPREQ = html eclipse tarball
TARFILES = yocto-project-qs.html qs-style.css \
figures/yocto-project-transp.png \
eclipse
MANUALS = $(DOC)/$(DOC).html $(DOC)/eclipse
FIGURES = figures
STYLESHEET = $(DOC)/*.css
endif
ifeq ($(DOC),mega-manual)
XSLTOPTS = --stringparam html.stylesheet mega-style.css \
--stringparam chapter.autolabel 1 \
@@ -213,8 +190,8 @@ TARFILES = mega-manual.html mega-style.css figures/yocto-environment.png \
figures/source-repos.png figures/yp-download.png \
figures/wip.png
else
TARFILES = mega-manual.html mega-style.css \
figures/YP-flow-diagram.png \
TARFILES = mega-manual.html mega-style.css figures/yocto-environment.png \
figures/building-an-image.png figures/YP-flow-diagram.png \
figures/using-a-pre-built-image.png \
figures/poky-title.png figures/buildhistory.png \
figures/buildhistory-web.png \
@@ -252,23 +229,22 @@ TARFILES = mega-manual.html mega-style.css \
figures/sched-wakeup-profile.png figures/sysprof-callers.png \
figures/sysprof-copy-from-user.png figures/sysprof-copy-to-user.png \
figures/cross-development-toolchains.png \
figures/user-configuration.png \
figures/yocto-environment-ref.png figures/user-configuration.png \
figures/source-input.png figures/package-feeds.png \
figures/layer-input.png figures/images.png figures/sdk.png \
figures/source-fetching.png figures/patching.png \
figures/configuration-compile-autoreconf.png \
figures/analysis-for-package-splitting.png \
figures/image-generation.png figures/key-dev-elements.png\
figures/image-generation.png \
figures/sdk-generation.png figures/recipe-workflow.png \
figures/build-workspace-directory.png figures/mega-title.png \
figures/toaster-title.png figures/hosted-service.png \
figures/simple-configuration.png figures/poky-reference-distribution.png \
figures/simple-configuration.png \
figures/compatible-layers.png figures/import-layer.png figures/new-project.png \
figures/sdk-environment.png figures/sdk-installed-standard-sdk-directory.png \
figures/sdk-devtool-add-flow.png figures/sdk-installed-extensible-sdk-directory.png \
figures/sdk-devtool-modify-flow.png figures/sdk-eclipse-dev-flow.png \
figures/sdk-devtool-upgrade-flow.png figures/bitbake-build-flow.png figures/bypqs-title.png \
figures/overview-manual-title.png figures/sdk-autotools-flow.png figures/sdk-makefile-flow.png
figures/sdk-devtool-upgrade-flow.png figures/bitbake-build-flow.png
endif
MANUALS = $(DOC)/$(DOC).html
@@ -280,9 +256,17 @@ endif
ifeq ($(DOC),ref-manual)
XSLTOPTS = --xinclude
ALLPREQ = html eclipse tarball
TARFILES = ref-manual.html ref-style.css figures/poky-title.png \
figures/build-workspace-directory.png \
eclipse
TARFILES = ref-manual.html ref-style.css figures/poky-title.png figures/YP-flow-diagram.png \
figures/buildhistory.png figures/buildhistory-web.png eclipse \
figures/cross-development-toolchains.png figures/layer-input.png \
figures/package-feeds.png figures/source-input.png \
figures/user-configuration.png figures/yocto-environment-ref.png \
figures/images.png figures/sdk.png figures/source-fetching.png \
figures/patching.png figures/configuration-compile-autoreconf.png \
figures/analysis-for-package-splitting.png figures/image-generation.png \
figures/sdk-generation.png figures/building-an-image.png \
figures/build-workspace-directory.png figures/source-repos.png \
figures/index-downloads.png figures/yp-download.png figures/git-workflow.png
MANUALS = $(DOC)/$(DOC).html $(DOC)/eclipse
FIGURES = figures
STYLESHEET = $(DOC)/*.css
@@ -295,7 +279,7 @@ TARFILES = sdk-manual.html sdk-style.css figures/sdk-title.png \
figures/sdk-environment.png figures/sdk-installed-standard-sdk-directory.png \
figures/sdk-installed-extensible-sdk-directory.png figures/sdk-devtool-add-flow.png \
figures/sdk-devtool-modify-flow.png figures/sdk-eclipse-dev-flow.png \
figures/sdk-devtool-upgrade-flow.png figures/sdk-autotools-flow.png figures/sdk-makefile-flow.png \
figures/sdk-devtool-upgrade-flow.png \
eclipse
MANUALS = $(DOC)/$(DOC).html $(DOC)/eclipse
FIGURES = figures
@@ -371,9 +355,9 @@ XSL_XHTML_URI = $(XSL_BASE_URI)/xhtml/docbook.xsl
all: $(ALLPREQ)
pdf:
ifeq ($(DOC),brief-yoctoprojectqs)
ifeq ($(DOC),yocto-project-qs)
@echo " "
@echo "ERROR: You cannot generate a PDF file for brief-yoctoprojectqs."
@echo "ERROR: You cannot generate a yocto-project-qs PDF file."
@echo " "
else ifeq ($(DOC),mega-manual)
@@ -417,18 +401,17 @@ eclipse: eclipse-generate eclipse-resolve-links
.PHONY : eclipse-generate eclipse-resolve-links
eclipse-generate:
ifeq ($(filter $(DOC), overview-manual sdk-manual bsp-guide dev-manual kernel-dev profile-manual ref-manual brief-yoctoprojectqs),)
ifeq ($(filter $(DOC), sdk-manual bsp-guide dev-manual kernel-dev profile-manual ref-manual yocto-project-qs),)
@echo " "
@echo "ERROR: You can only create eclipse documentation"
@echo " of the following documentation parts:"
@echo " - overview-manual"
@echo " - sdk-manual"
@echo " - bsp-guide"
@echo " - dev-manual"
@echo " - kernel-dev"
@echo " - profile-manual"
@echo " - ref-manual"
@echo " - brief-yoctoprojectqs"
@echo " - yocto-project-qs"
@echo " "
else
@echo " "

View File

@@ -1,989 +0,0 @@
/*
Generic XHTML / DocBook XHTML CSS Stylesheet.
Browser wrangling and typographic design by
Oyvind Kolas / pippin@gimp.org
Customised for Poky by
Matthew Allum / mallum@o-hand.com
Thanks to:
Liam R. E. Quin
William Skaggs
Jakub Steiner
Structure
---------
The stylesheet is divided into the following sections:
Positioning
Margins, paddings, width, font-size, clearing.
Decorations
Borders, style
Colors
Colors
Graphics
Graphical backgrounds
Nasty IE tweaks
Workarounds needed to make it work in internet explorer,
currently makes the stylesheet non validating, but up until
this point it is validating.
Mozilla extensions
Transparency for footer
Rounded corners on boxes
*/
/*************** /
/ Positioning /
/ ***************/
body {
font-family: Verdana, Sans, sans-serif;
min-width: 640px;
width: 80%;
margin: 0em auto;
padding: 2em 5em 5em 5em;
color: #333;
}
h1,h2,h3,h4,h5,h6,h7 {
font-family: Arial, Sans;
color: #00557D;
clear: both;
}
h1 {
font-size: 2em;
text-align: left;
padding: 0em 0em 0em 0em;
margin: 2em 0em 0em 0em;
}
h2.subtitle {
margin: 0.10em 0em 3.0em 0em;
padding: 0em 0em 0em 0em;
font-size: 1.8em;
padding-left: 20%;
font-weight: normal;
font-style: italic;
}
h2 {
margin: 2em 0em 0.66em 0em;
padding: 0.5em 0em 0em 0em;
font-size: 1.5em;
font-weight: bold;
}
h3.subtitle {
margin: 0em 0em 1em 0em;
padding: 0em 0em 0em 0em;
font-size: 142.14%;
text-align: right;
}
h3 {
margin: 1em 0em 0.5em 0em;
padding: 1em 0em 0em 0em;
font-size: 140%;
font-weight: bold;
}
h4 {
margin: 1em 0em 0.5em 0em;
padding: 1em 0em 0em 0em;
font-size: 120%;
font-weight: bold;
}
h5 {
margin: 1em 0em 0.5em 0em;
padding: 1em 0em 0em 0em;
font-size: 110%;
font-weight: bold;
}
h6 {
margin: 1em 0em 0em 0em;
padding: 1em 0em 0em 0em;
font-size: 110%;
font-weight: bold;
}
.authorgroup {
background-color: transparent;
background-repeat: no-repeat;
padding-top: 256px;
background-image: url("figures/bypqs-title.png");
background-position: left top;
margin-top: -256px;
padding-right: 50px;
margin-left: 0px;
text-align: right;
width: 740px;
}
h3.author {
margin: 0em 0me 0em 0em;
padding: 0em 0em 0em 0em;
font-weight: normal;
font-size: 100%;
color: #333;
clear: both;
}
.author tt.email {
font-size: 66%;
}
.titlepage hr {
width: 0em;
clear: both;
}
.revhistory {
padding-top: 2em;
clear: both;
}
.toc,
.list-of-tables,
.list-of-examples,
.list-of-figures {
padding: 1.33em 0em 2.5em 0em;
color: #00557D;
}
.toc p,
.list-of-tables p,
.list-of-figures p,
.list-of-examples p {
padding: 0em 0em 0em 0em;
padding: 0em 0em 0.3em;
margin: 1.5em 0em 0em 0em;
}
.toc p b,
.list-of-tables p b,
.list-of-figures p b,
.list-of-examples p b{
font-size: 100.0%;
font-weight: bold;
}
.toc dl,
.list-of-tables dl,
.list-of-figures dl,
.list-of-examples dl {
margin: 0em 0em 0.5em 0em;
padding: 0em 0em 0em 0em;
}
.toc dt {
margin: 0em 0em 0em 0em;
padding: 0em 0em 0em 0em;
}
.toc dd {
margin: 0em 0em 0em 2.6em;
padding: 0em 0em 0em 0em;
}
div.glossary dl,
div.variablelist dl {
}
.glossary dl dt,
.variablelist dl dt,
.variablelist dl dt span.term {
font-weight: normal;
width: 20em;
text-align: right;
}
.variablelist dl dt {
margin-top: 0.5em;
}
.glossary dl dd,
.variablelist dl dd {
margin-top: -1em;
margin-left: 25.5em;
}
.glossary dd p,
.variablelist dd p {
margin-top: 0em;
margin-bottom: 1em;
}
div.calloutlist table td {
padding: 0em 0em 0em 0em;
margin: 0em 0em 0em 0em;
}
div.calloutlist table td p {
margin-top: 0em;
margin-bottom: 1em;
}
div p.copyright {
text-align: left;
}
div.legalnotice p.legalnotice-title {
margin-bottom: 0em;
}
p {
line-height: 1.5em;
margin-top: 0em;
}
dl {
padding-top: 0em;
}
hr {
border: solid 1px;
}
.mediaobject,
.mediaobjectco {
text-align: center;
}
img {
border: none;
}
ul {
padding: 0em 0em 0em 1.5em;
}
ul li {
padding: 0em 0em 0em 0em;
}
ul li p {
text-align: left;
}
table {
width :100%;
}
th {
padding: 0.25em;
text-align: left;
font-weight: normal;
vertical-align: top;
}
td {
padding: 0.25em;
vertical-align: top;
}
p a[id] {
margin: 0px;
padding: 0px;
display: inline;
background-image: none;
}
a {
text-decoration: underline;
color: #444;
}
pre {
overflow: auto;
}
a:hover {
text-decoration: underline;
/*font-weight: bold;*/
}
/* This style defines how the permalink character
appears by itself and when hovered over with
the mouse. */
[alt='Permalink'] { color: #eee; }
[alt='Permalink']:hover { color: black; }
div.informalfigure,
div.informalexample,
div.informaltable,
div.figure,
div.table,
div.example {
margin: 1em 0em;
padding: 1em;
page-break-inside: avoid;
}
div.informalfigure p.title b,
div.informalexample p.title b,
div.informaltable p.title b,
div.figure p.title b,
div.example p.title b,
div.table p.title b{
padding-top: 0em;
margin-top: 0em;
font-size: 100%;
font-weight: normal;
}
.mediaobject .caption,
.mediaobject .caption p {
text-align: center;
font-size: 80%;
padding-top: 0.5em;
padding-bottom: 0.5em;
}
.epigraph {
padding-left: 55%;
margin-bottom: 1em;
}
.epigraph p {
text-align: left;
}
.epigraph .quote {
font-style: italic;
}
.epigraph .attribution {
font-style: normal;
text-align: right;
}
span.application {
font-style: italic;
}
.programlisting {
font-family: monospace;
font-size: 80%;
white-space: pre;
margin: 1.33em 0em;
padding: 1.33em;
}
.tip,
.warning,
.caution,
.note {
margin-top: 1em;
margin-bottom: 1em;
}
/* force full width of table within div */
.tip table,
.warning table,
.caution table,
.note table {
border: none;
width: 100%;
}
.tip table th,
.warning table th,
.caution table th,
.note table th {
padding: 0.8em 0.0em 0.0em 0.0em;
margin : 0em 0em 0em 0em;
}
.tip p,
.warning p,
.caution p,
.note p {
margin-top: 0.5em;
margin-bottom: 0.5em;
padding-right: 1em;
text-align: left;
}
.acronym {
text-transform: uppercase;
}
b.keycap,
.keycap {
padding: 0.09em 0.3em;
margin: 0em;
}
.itemizedlist li {
clear: none;
}
.filename {
font-size: medium;
font-family: Courier, monospace;
}
div.navheader, div.heading{
position: absolute;
left: 0em;
top: 0em;
width: 100%;
background-color: #cdf;
width: 100%;
}
div.navfooter, div.footing{
position: fixed;
left: 0em;
bottom: 0em;
background-color: #eee;
width: 100%;
}
div.navheader td,
div.navfooter td {
font-size: 66%;
}
div.navheader table th {
/*font-family: Georgia, Times, serif;*/
/*font-size: x-large;*/
font-size: 80%;
}
div.navheader table {
border-left: 0em;
border-right: 0em;
border-top: 0em;
width: 100%;
}
div.navfooter table {
border-left: 0em;
border-right: 0em;
border-bottom: 0em;
width: 100%;
}
div.navheader table td a,
div.navfooter table td a {
color: #777;
text-decoration: none;
}
/* normal text in the footer */
div.navfooter table td {
color: black;
}
div.navheader table td a:visited,
div.navfooter table td a:visited {
color: #444;
}
/* links in header and footer */
div.navheader table td a:hover,
div.navfooter table td a:hover {
text-decoration: underline;
background-color: transparent;
color: #33a;
}
div.navheader hr,
div.navfooter hr {
display: none;
}
.qandaset tr.question td p {
margin: 0em 0em 1em 0em;
padding: 0em 0em 0em 0em;
}
.qandaset tr.answer td p {
margin: 0em 0em 1em 0em;
padding: 0em 0em 0em 0em;
}
.answer td {
padding-bottom: 1.5em;
}
.emphasis {
font-weight: bold;
}
/************* /
/ decorations /
/ *************/
.titlepage {
}
.part .title {
}
.subtitle {
border: none;
}
/*
h1 {
border: none;
}
h2 {
border-top: solid 0.2em;
border-bottom: solid 0.06em;
}
h3 {
border-top: 0em;
border-bottom: solid 0.06em;
}
h4 {
border: 0em;
border-bottom: solid 0.06em;
}
h5 {
border: 0em;
}
*/
.programlisting {
border: solid 1px;
}
div.figure,
div.table,
div.informalfigure,
div.informaltable,
div.informalexample,
div.example {
border: 1px solid;
}
.tip,
.warning,
.caution,
.note {
border: 1px solid;
}
.tip table th,
.warning table th,
.caution table th,
.note table th {
border-bottom: 1px solid;
}
.question td {
border-top: 1px solid black;
}
.answer {
}
b.keycap,
.keycap {
border: 1px solid;
}
div.navheader, div.heading{
border-bottom: 1px solid;
}
div.navfooter, div.footing{
border-top: 1px solid;
}
/********* /
/ colors /
/ *********/
body {
color: #333;
background: white;
}
a {
background: transparent;
}
a:hover {
background-color: #dedede;
}
h1,
h2,
h3,
h4,
h5,
h6,
h7,
h8 {
background-color: transparent;
}
hr {
border-color: #aaa;
}
.tip, .warning, .caution, .note {
border-color: #fff;
}
.tip table th,
.warning table th,
.caution table th,
.note table th {
border-bottom-color: #fff;
}
.warning {
background-color: #f0f0f2;
}
.caution {
background-color: #f0f0f2;
}
.tip {
background-color: #f0f0f2;
}
.note {
background-color: #f0f0f2;
}
.glossary dl dt,
.variablelist dl dt,
.variablelist dl dt span.term {
color: #044;
}
div.figure,
div.table,
div.example,
div.informalfigure,
div.informaltable,
div.informalexample {
border-color: #aaa;
}
pre.programlisting {
color: black;
background-color: #fff;
border-color: #aaa;
border-width: 2px;
}
.guimenu,
.guilabel,
.guimenuitem {
background-color: #eee;
}
b.keycap,
.keycap {
background-color: #eee;
border-color: #999;
}
div.navheader {
border-color: black;
}
div.navfooter {
border-color: black;
}
.writernotes {
color: red;
}
/*********** /
/ graphics /
/ ***********/
/*
body {
background-image: url("images/body_bg.jpg");
background-attachment: fixed;
}
.navheader,
.note,
.tip {
background-image: url("images/note_bg.jpg");
background-attachment: fixed;
}
.warning,
.caution {
background-image: url("images/warning_bg.jpg");
background-attachment: fixed;
}
.figure,
.informalfigure,
.example,
.informalexample,
.table,
.informaltable {
background-image: url("images/figure_bg.jpg");
background-attachment: fixed;
}
*/
h1,
h2,
h3,
h4,
h5,
h6,
h7{
}
/*
Example of how to stick an image as part of the title.
div.article .titlepage .title
{
background-image: url("figures/white-on-black.png");
background-position: center;
background-repeat: repeat-x;
}
*/
div.preface .titlepage .title,
div.colophon .title,
div.chapter .titlepage .title {
background-position: bottom;
background-repeat: repeat-x;
}
div.section div.section .titlepage .title,
div.sect2 .titlepage .title {
background: none;
}
h1.title {
background-color: transparent;
background-repeat: no-repeat;
height: 256px;
text-indent: -9000px;
overflow:hidden;
}
h2.subtitle {
background-color: transparent;
text-indent: -9000px;
overflow:hidden;
width: 0px;
display: none;
}
/*************************************** /
/ pippin.gimp.org specific alterations /
/ ***************************************/
/*
div.heading, div.navheader {
color: #777;
font-size: 80%;
padding: 0;
margin: 0;
text-align: left;
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 50px;
background: url('/gfx/heading_bg.png') transparent;
background-repeat: repeat-x;
background-attachment: fixed;
border: none;
}
div.heading a {
color: #444;
}
div.footing, div.navfooter {
border: none;
color: #ddd;
font-size: 80%;
text-align:right;
width: 100%;
padding-top: 10px;
position: absolute;
bottom: 0px;
left: 0px;
background: url('/gfx/footing_bg.png') transparent;
}
*/
/****************** /
/ nasty ie tweaks /
/ ******************/
/*
div.heading, div.navheader {
width:expression(document.body.clientWidth + "px");
}
div.footing, div.navfooter {
width:expression(document.body.clientWidth + "px");
margin-left:expression("-5em");
}
body {
padding:expression("4em 5em 0em 5em");
}
*/
/**************************************** /
/ mozilla vendor specific css extensions /
/ ****************************************/
/*
div.navfooter, div.footing{
-moz-opacity: 0.8em;
}
div.figure,
div.table,
div.informalfigure,
div.informaltable,
div.informalexample,
div.example,
.tip,
.warning,
.caution,
.note {
-moz-border-radius: 0.5em;
}
b.keycap,
.keycap {
-moz-border-radius: 0.3em;
}
*/
table tr td table tr td {
display: none;
}
hr {
display: none;
}
table {
border: 0em;
}
.photo {
float: right;
margin-left: 1.5em;
margin-bottom: 1.5em;
margin-top: 0em;
max-width: 17em;
border: 1px solid gray;
padding: 3px;
background: white;
}
.seperator {
padding-top: 2em;
clear: both;
}
#validators {
margin-top: 5em;
text-align: right;
color: #777;
}
@media print {
body {
font-size: 8pt;
}
.noprint {
display: none;
}
}
.tip,
.note {
background: #f0f0f2;
color: #333;
padding: 20px;
margin: 20px;
}
.tip h3,
.note h3 {
padding: 0em;
margin: 0em;
font-size: 2em;
font-weight: bold;
color: #333;
}
.tip a,
.note a {
color: #333;
text-decoration: underline;
}
.footnote {
font-size: small;
color: #333;
}
/* Changes the announcement text */
.tip h3,
.warning h3,
.caution h3,
.note h3 {
font-size:large;
color: #00557D;
}

View File

@@ -1,491 +0,0 @@
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
<article id='brief-yocto-project-qs-intro'>
<articleinfo>
<title>Yocto Project Quick Build</title>
<copyright>
<year>&COPYRIGHT_YEAR;</year>
<holder>Linux Foundation</holder>
</copyright>
<legalnotice>
<para>
Permission is granted to copy, distribute and/or modify this document under
the terms of the <ulink type="http" url="http://creativecommons.org/licenses/by-sa/2.0/uk/">Creative Commons Attribution-Share Alike 2.0 UK: England &amp; Wales</ulink> as published by Creative Commons.
</para>
</legalnotice>
<abstract>
<imagedata fileref="figures/yocto-project-transp.png"
width="6in" depth="1in"
align="right" scale="25" />
</abstract>
</articleinfo>
<section id='brief-welcome'>
<title>Welcome!</title>
<para>
Welcome!
This short document steps you through the process for a typical
image build using the Yocto Project.
The document also introduces how to configure a build for specific
hardware.
You will use Yocto Project to build a reference embedded OS
called Poky.
<note>
The examples in this paper assume you are using a native Linux
system running a recent Ubuntu Linux distribution.
If the machine you want to use
Yocto Project on to build an image is not a native Linux
system, you can still perform these steps by using CROss
PlatformS (CROPS) and setting up a Poky container.
See the
<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-to-use-crops'>Setting Up to Use CROss PlatformS (CROPS)</ulink>"
section in the Yocto Project Development Tasks Manual for more
information.
</note>
</para>
<para>
If you want more conceptual or background information on the
Yocto Project, see the
<ulink url='&YOCTO_DOCS_OM_URL;'>Yocto Project Overview and Concepts Manual</ulink>.
</para>
</section>
<section id='brief-compatible-distro'>
<title>Compatible Linux Distribution</title>
<para>
Make sure your
<ulink url='&YOCTO_DOCS_REF_URL;#hardware-build-system-term'>build host</ulink>
meets the following requirements:
<itemizedlist>
<listitem><para>
50 Gbytes of free disk space
</para></listitem>
<listitem><para>
Runs a supported Linux distribution (i.e. recent releases of
Fedora, openSUSE, CentOS, Debian, or Ubuntu). For a list of
Linux distributions that support the Yocto Project, see the
"<ulink url='&YOCTO_DOCS_REF_URL;#detailed-supported-distros'>Supported Linux Distributions</ulink>"
section in the Yocto Project Reference Manual.
</para></listitem>
<listitem><para>
<itemizedlist>
<listitem><para>
Git 1.8.3.1 or greater
</para></listitem>
<listitem><para>
tar 1.27 or greater
</para></listitem>
<listitem><para>
Python 3.4.0 or greater.
</para></listitem>
</itemizedlist>
If your build host does not meet any of these three listed
version requirements, you can take steps to prepare the
system so that you can still use the Yocto Project.
See the
"<ulink url='&YOCTO_DOCS_REF_URL;#required-git-tar-and-python-versions'>Required Git, tar, and Python Versions</ulink>"
section in the Yocto Project Reference Manual for information.
</para></listitem>
</itemizedlist>
</para>
</section>
<section id='brief-build-system-packages'>
<title>Build Host Packages</title>
<para>
You must install essential host packages on your
build host.
The following command installs the host packages based on an
Ubuntu distribution:
<note>
For host package requirements on all supported Linux
distributions, see the
"<ulink url='&YOCTO_DOCS_REF_URL;#required-packages-for-the-host-development-system'>Required Packages for the Host Development System</ulink>"
section in the Yocto Project Reference Manual.
</note>
<literallayout class='monospaced'>
$ sudo apt-get install &UBUNTU_HOST_PACKAGES_ESSENTIAL; libsdl1.2-dev xterm
</literallayout>
</para>
</section>
<section id='brief-use-git-to-clone-poky'>
<title>Use Git to Clone Poky</title>
<para>
Once you complete the setup instructions for your machine,
you need to get a copy of the Poky repository on your build
host.
Use the following commands to clone the Poky
repository and then checkout the &DISTRO_REL_TAG; release:
<literallayout class='monospaced'>
$ git clone git://git.yoctoproject.org/poky
Cloning into 'poky'...
remote: Counting objects: 361782, done.
remote: Compressing objects: 100% (87100/87100), done.
remote: Total 361782 (delta 268619), reused 361439 (delta 268277)
Receiving objects: 100% (361782/361782), 131.94 MiB | 6.88 MiB/s, done.
Resolving deltas: 100% (268619/268619), done.
Checking connectivity... done.
$ git checkout tags/yocto-2.5 -b my-yocto-2.5
</literallayout>
The previous Git checkout command creates a local branch
named my-&DISTRO_REL_TAG;. The files available to you in that
branch exactly match the repository's files in the
"&DISTRO_NAME_NO_CAP;" development branch at the time of the
Yocto Project &DISTRO; release.
</para>
<para>
For more options and information about accessing Yocto
Project related repositories, see the
"<ulink url='&YOCTO_DOCS_DEV_URL;#locating-yocto-project-source-files'>Locating Yocto Project Source Files</ulink>"
section in the Yocto Project Development Tasks Manual.
</para>
</section>
<section id='brief-building-your-image'>
<title>Building Your Image</title>
<para>
Use the following steps to build your image.
The build process creates an entire Linux distribution, including
the toolchain, from source.
<note>
<itemizedlist>
<listitem><para>
If you are working behind a firewall and your build
host is not set up for proxies, you could encounter
problems with the build process when fetching source
code (e.g. fetcher failures or Git failures).
</para></listitem>
<listitem><para>
If you do not know your proxy settings, consult your
local network infrastructure resources and get that
information.
A good starting point could also be to check your
web browser settings.
Finally, you can find more information on the
"<ulink url='https://wiki.yoctoproject.org/wiki/Working_Behind_a_Network_Proxy'>Working Behind a Network Proxy</ulink>"
page of the Yocto Project Wiki.
</para></listitem>
</itemizedlist>
</note>
</para>
<para>
<orderedlist>
<listitem><para>
<emphasis>Initialize the Build Environment:</emphasis>
Run the
<ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
environment setup script to define Yocto Project's
build environment on your build host.
<literallayout class='monospaced'>
$ source &OE_INIT_FILE;
</literallayout>
Among other things, the script creates the
<ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>,
which is <filename>build</filename> in this case
and is located in the
<ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>.
After the script runs, your current working directory
is set to the Build Directory.
Later, when the build completes, the Build Directory
contains all the files created during the build.
</para></listitem>
<listitem><para id='conf-file-step'>
<emphasis>Examine Your Local Configuration File:</emphasis>
When you set up the build environment, a local
configuration file named
<filename>local.conf</filename> becomes available in
a <filename>conf</filename> subdirectory of the
Build Directory.
For this example, the defaults are set to build
for a <filename>qemux86</filename> target, which is
suitable for emulation.
The package manager used is set to the RPM package
manager.
<tip>
You can significantly speed up your build and guard
against fetcher failures by using mirrors.
To use mirrors, add these lines to your
<filename>local.conf</filename> file in the Build
directory:
<literallayout class='monospaced'>
SSTATE_MIRRORS = "\
file://.* http://sstate.yoctoproject.org/dev/PATH;downloadfilename=PATH \n \
file://.* http://sstate.yoctoproject.org/&YOCTO_DOC_VERSION_MINUS_ONE;/PATH;downloadfilename=PATH \n \
file://.* http://sstate.yoctoproject.org/&YOCTO_DOC_VERSION;/PATH;downloadfilename=PATH \n \
"
</literallayout>
The previous examples showed how to add sstate
paths for Yocto Project &YOCTO_DOC_VERSION_MINUS_ONE;,
&YOCTO_DOC_VERSION;, and a development area.
For a complete index of sstate locations, see
<ulink url='http://sstate.yoctoproject.org/'></ulink>.
</tip>
</para></listitem>
<listitem><para>
<emphasis>Start the Build:</emphasis>
Continue with the following command to build an OS image
for the target, which is
<filename>core-image-sato</filename> in this example:
<literallayout class='monospaced'>
$ bitbake core-image-sato
</literallayout>
For information on using the
<filename>bitbake</filename> command, see the
"<ulink url='&YOCTO_DOCS_OM_URL;#usingpoky-components-bitbake'>BitBake</ulink>"
section in the Yocto Project Overview and Concepts Manual,
or see the
"<ulink url='&YOCTO_DOCS_BB_URL;#bitbake-user-manual-command'>BitBake Command</ulink>"
section in the BitBake User Manual.
</para></listitem>
<listitem><para>
<emphasis>Simulate Your Image Using QEMU:</emphasis>
Once this particular image is built, you can start
QEMU, which is a Quick EMUlator that ships with
the Yocto Project:
<literallayout class='monospaced'>
$ runqemu qemux86
</literallayout>
If you want to learn more about running QEMU, see the
"<ulink url="&YOCTO_DOCS_DEV_URL;#dev-manual-qemu">Using the Quick EMUlator (QEMU)</ulink>"
chapter in the Yocto Project Development Tasks Manual.
</para></listitem>
<listitem><para>
<emphasis>Exit QEMU:</emphasis>
Exit QEMU by either clicking on the shutdown icon or by
typing <filename>Ctrl-C</filename> in the QEMU
transcript window from which you evoked QEMU.
</para></listitem>
</orderedlist>
</para>
</section>
<section id='customizing-your-build-for-specific-hardware'>
<title>Customizing Your Build for Specific Hardware</title>
<para>
So far, all you have done is quickly built an image suitable
for emulation only.
This section shows you how to customize your build for specific
hardware by adding a hardware layer into the Yocto Project
development environment.
</para>
<para>
In general, layers are repositories that contain related sets of
instructions and configurations that tell the Yocto Project what
to do.
Isolating related metadata into functionally specific layers
facilitates modular development and makes it easier to reuse the
layer metadata.
<note>
By convention, layer names start with the string "meta-".
</note>
</para>
<para>
Follow these steps to add a hardware layer:
<orderedlist>
<listitem><para>
<emphasis>Find a Layer:</emphasis>
Lots of hardware layers exist.
The Yocto Project
<ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
has many hardware layers.
This example adds the
<ulink url='https://github.com/kraj/meta-altera'>meta-altera</ulink>
hardware layer.
</para></listitem>
<listitem><para>
<emphasis>Clone the Layer</emphasis>
Use Git to make a local copy of the layer on your machine.
You can put the copy in the top level of the copy of the
Poky repository created earlier:
<literallayout class='monospaced'>
$ cd ~/poky
$ git clone https://github.com/kraj/meta-altera.git
Cloning into 'meta-altera'...
remote: Counting objects: 25170, done.
remote: Compressing objects: 100% (350/350), done.
remote: Total 25170 (delta 645), reused 719 (delta 538), pack-reused 24219
Receiving objects: 100% (25170/25170), 41.02 MiB | 1.64 MiB/s, done.
Resolving deltas: 100% (13385/13385), done.
Checking connectivity... done.
</literallayout>
The hardware layer now exists with other layers inside
the Poky reference repository on your build host as
<filename>meta-altera</filename> and contains all the
metadata needed to support hardware from Altera, which
is owned by Intel.
</para></listitem>
<listitem><para>
<emphasis>Change the Configuration to Build for a Specific Machine:</emphasis>
The
<ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
variable in the <filename>local.conf</filename> file
specifies the machine for the build.
For this example, set the <filename>MACHINE</filename>
variable to "cyclone5".
These configurations are used:
<ulink url='https://github.com/kraj/meta-altera/blob/master/conf/machine/cyclone5.conf'></ulink>.
<note>
See the
"<link linkend='conf-file-step'>Examine Your Local Configuration File</link>"
step earlier for more information on configuring the
build.
</note>
</para></listitem>
<listitem><para>
<emphasis>Add Your Layer to the Layer Configuration File:</emphasis>
Before you can use a layer during a build, you must add it
to your <filename>bblayers.conf</filename> file, which
is found in the
<ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory's</ulink>
<filename>conf</filename> directory.</para>
<para>Use the <filename>bitbake-layers add-layer</filename>
command to add the layer to the configuration file:
<literallayout class='monospaced'>
$ cd ~/poky/build
$ bitbake-layers add-layer ../meta-altera
NOTE: Starting bitbake server...
Parsing recipes: 100% |##################################################################| Time: 0:00:32
Parsing of 918 .bb files complete (0 cached, 918 parsed). 1401 targets, 123 skipped, 0 masked, 0 errors.
</literallayout>
You can find more information on adding layers in the
"<ulink url='&YOCTO_DOCS_DEV_URL;#adding-a-layer-using-the-bitbake-layers-script'>Adding a Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
section.
</para></listitem>
</orderedlist>
Completing these steps has added the
<filename>meta-altera</filename> layer to your Yocto Project
development environment and configured it to build for the
"cyclone5" machine.
<note>
The previous steps are for demonstration purposes only.
If you were to attempt to build an image for the
"cyclone5" build, you should read the Altera
<filename>README</filename>.
</note>
</para>
</section>
<section id='creating-your-own-general-layer'>
<title>Creating Your Own General Layer</title>
<para>
Maybe you have an application or specific set of behaviors you
need to isolate.
You can create your own general layer using the
<filename>bitbake-layers create-layer</filename> command.
The tool automates layer creation by setting up a
subdirectory with a <filename>layer.conf</filename>
configuration file, a <filename>recipes-example</filename>
subdirectory that contains an <filename>example.bb</filename>
recipe, a licensing file, and a <filename>README</filename>.
</para>
<para>
The following commands run the tool to create a layer named
<filename>meta-mylayer</filename> in the
<filename>poky</filename> directory:
<literallayout class='monospaced'>
$ cd ~/poky
$ bitbake-layers create-layer meta-mylayer
NOTE: Starting bitbake server...
Add your new layer with 'bitbake-layers add-layer meta-mylayer'
</literallayout>
For more information on layers and how to create them, see the
"<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
section in the Yocto Project Development Tasks Manual.
</para>
</section>
<section id='brief-where-to-go-next'>
<title>Where To Go Next</title>
<para>
Now that you have experienced using the Yocto Project, you might
be asking yourself "What now?"
The Yocto Project has many sources of information including
the website, wiki pages, and user manuals:
<itemizedlist>
<listitem><para>
<emphasis>Website:</emphasis>
The
<ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>
provides background information, the latest builds,
breaking news, full development documentation, and
access to a rich Yocto Project Development Community
into which you can tap.
</para></listitem>
<listitem><para>
<emphasis>Developer Screencast:</emphasis>
The
<ulink url='http://vimeo.com/36450321'>Getting Started with the Yocto Project - New Developer Screencast Tutorial</ulink>
provides a 30-minute video created for users unfamiliar
with the Yocto Project but familiar with Linux build
hosts.
While this screencast is somewhat dated, the
introductory and fundamental concepts are useful for
the beginner.
</para></listitem>
<listitem><para>
<emphasis>Yocto Project Overview and Concepts Manual:</emphasis>
The
<ulink url='&YOCTO_DOCS_OM_URL;'>Yocto Project Overview and Concepts Manual</ulink>
is a great place to start to learn about the
Yocto Project.
This manual introduces you to the Yocto Project and its
development environment.
The manual also provides conceptual information for
various aspects of the Yocto Project.
</para></listitem>
<listitem><para>
<emphasis>Yocto Project Wiki:</emphasis>
The
<ulink url='&YOCTO_WIKI_URL;'>Yocto Project Wiki</ulink>
provides additional information on where to go next
when ramping up with the Yocto Project, release
information, project planning, and QA information.
</para></listitem>
<listitem><para>
<emphasis>Yocto Project Mailing Lists:</emphasis>
Related mailing lists provide a forum for discussion,
patch submission and announcements.
Several mailing lists exist and are grouped according
to areas of concern.
See the
"<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing lists</ulink>"
section in the Yocto Project Reference Manual for a
complete list of Yocto Project mailing lists.
</para></listitem>
<listitem><para>
<emphasis>Comprehensive List of Links and Other Documentation:</emphasis>
The
"<ulink url='&YOCTO_DOCS_REF_URL;#resources-links-and-related-documentation'>Links and Related Documentation</ulink>"
section in the Yocto Project Reference Manual provides a
comprehensive list of all related links and other
user documentation.
</para></listitem>
</itemizedlist>
</para>
</section>
</article>
<!--
vim: expandtab tw=80 ts=4
-->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -116,16 +116,6 @@
<date>October 2017</date>
<revremark>Released with the Yocto Project 2.4 Release.</revremark>
</revision>
<revision>
<revnumber>2.5</revnumber>
<date>May 2018</date>
<revremark>Released with the Yocto Project 2.5 Release.</revremark>
</revision>
<revision>
<revnumber>2.5.1</revnumber>
<date>September 2018</date>
<revremark>The initial document released with the Yocto Project 2.5.1 Release.</revremark>
</revision>
</revhistory>
<copyright>
@@ -142,40 +132,28 @@
<itemizedlist>
<listitem><para>
This version of the
<emphasis>Yocto Project Board Support Package (BSP) Developer's Guide</emphasis>
<emphasis>Yocto Project Board Support Package Developer's Guide</emphasis>
is for the &YOCTO_DOC_VERSION; release of the
Yocto Project.
To be sure you have the latest version of the manual
for this release, go to the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>
and select the manual from that site.
Manuals from the site are more up-to-date than manuals
derived from the Yocto Project released TAR files.
for this release, use the manual from the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>.
</para></listitem>
<listitem><para>
If you located this manual through a web search, the
version of the manual might not be the one you want
(e.g. the search might have returned a manual much
older than the Yocto Project version with which you
are working).
You can see all Yocto Project major releases by
visiting the
<ulink url='&YOCTO_WIKI_URL;/wiki/Releases'>Releases</ulink>
page.
If you need a version of this manual for a different
Yocto Project release, visit the
For manuals associated with other releases of the Yocto
Project, go to the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>
and select the manual set by using the
"ACTIVE RELEASES DOCUMENTATION" or "DOCUMENTS ARCHIVE"
pull-down menus.
and use the drop-down "Active Releases" button
and choose the manual associated with the desired
Yocto Project.
</para></listitem>
<listitem><para>
To report any inaccuracies or problems with this
manual, send an email to the Yocto Project
discussion group at
<filename>yocto@yoctoproject.com</filename> or log into
the freenode <filename>#yocto</filename> channel.
</para></listitem>
To report any inaccuracies or problems with this
manual, send an email to the Yocto Project
discussion group at
<filename>yocto@yoctoproject.com</filename> or log into
the freenode <filename>#yocto</filename> channel.
</para></listitem>
</itemizedlist>
</note>
</legalnotice>

View File

@@ -730,9 +730,6 @@ div.navfooter {
border-color: black;
}
.writernotes {
color: red;
}
/*********** /
/ graphics /

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 62 KiB

File diff suppressed because it is too large Load Diff

View File

@@ -16,29 +16,33 @@
The manual groups related procedures into higher-level sections.
Procedures can consist of high-level steps or low-level steps
depending on the topic.
You can find conceptual information related to a procedure by
following appropriate links to the Yocto Project Reference
Manual.
</para>
<para>
The following list describes what you can get from this manual:
<itemizedlist>
<listitem><para>
Procedures that help you get going with the Yocto Project.
For example, procedures that show you how to set up
a build host and work with the Yocto Project
source repositories.
<emphasis>Setup Procedures:</emphasis>
Procedures that show you how to set
up a Yocto Project Development environment and how
to accomplish the change workflow through logging
defects and submitting changes.
</para></listitem>
<listitem><para>
Procedures that show you how to submit changes to the
Yocto Project.
Changes can be improvements, new features, or bug
fixes.
<emphasis>Emulation Procedures:</emphasis>
Procedures that show you how to use the
Yocto Project integrated QuickEMUlator (QEMU), which lets
you simulate running on hardware an image you have built
using the OpenEmbedded build system.
</para></listitem>
<listitem><para>
<emphasis>Common Procedures:</emphasis>
Procedures related to "everyday" tasks you perform while
developing images and applications using the Yocto
Project.
For example, procedures to create a layer, customize an
image, write a new recipe, and so forth.
</para></listitem>
</itemizedlist>
</para>
@@ -47,7 +51,7 @@
This manual will not give you the following:
<itemizedlist>
<listitem><para>
Redundant Step-by-step Instructions:
<emphasis>Redundant Step-by-step Instructions:</emphasis>
For example, the
<ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>
manual contains detailed instructions on how to install an
@@ -55,15 +59,14 @@
hardware.
</para></listitem>
<listitem><para>
Reference or Conceptual Material:
This type of material resides in an appropriate reference
manual.
<emphasis>Reference or Conceptual Material:</emphasis>
This type of material resides in an appropriate reference manual.
For example, system variables are documented in the
<ulink url='&YOCTO_DOCS_REF_URL;'>Yocto Project Reference Manual</ulink>.
</para></listitem>
<listitem><para>
Detailed Public Information Not Specific to the
Yocto Project:
<emphasis>Detailed Public Information Not Specific to the
Yocto Project:</emphasis>
For example, exhaustive information on how to use the
Source Control Manager Git is better covered with Internet
searches and official Git Documentation than through the
@@ -82,10 +85,9 @@
comprehension.
For introductory information on the Yocto Project, see the
<ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>.
If you want to build an image with no knowledge of Yocto Project
as a way of quickly testing it out, see the
<ulink url='&YOCTO_DOCS_BRIEF_URL;'>Yocto Project Quick Build</ulink>
document.
You can find an introductory to using the Yocto Project by working
through the
<ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>.
</para>
<para>

View File

@@ -0,0 +1,989 @@
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >
<chapter id='dev-manual-newbie'>
<title>The Yocto Project Open Source Development Environment</title>
<section id="usingpoky-changes-collaborate">
<title>Setting Up a Team Yocto Project Development Environment</title>
<para>
It might not be immediately clear how you can use the Yocto
Project in a team development environment, or scale it for a large
team of developers.
One of the strengths of the Yocto Project is that it is extremely
flexible.
Thus, you can adapt it to many different use cases and scenarios.
However, these characteristics can cause a struggle if you are trying
to create a working setup that scales across a large team.
</para>
<para>
To help you understand how to set up this type of environment,
this section presents a procedure that gives you the information
to learn how to get the results you want.
The procedure is high-level and presents some of the project's most
successful experiences, practices, solutions, and available
technologies that work well.
Keep in mind, the procedure here is a starting point.
You can build off it and customize it to fit any
particular working environment and set of practices.
<orderedlist>
<listitem><para>
<emphasis>Determine Who is Going to be Developing:</emphasis>
You need to understand who is going to be doing anything
related to the Yocto Project and what their roles would be.
Making this determination is essential to completing the
steps two and three, which are to get your equipment together
and set up your development environment's hardware topology.
</para>
<para>The following roles exist:
<itemizedlist>
<listitem><para>
<emphasis>Application Development:</emphasis>
These types of developers do application level work
on top of an existing software stack.
</para></listitem>
<listitem><para>
<emphasis>Core System Development:</emphasis>
These types of developers work on the contents of the
operating system image itself.
</para></listitem>
<listitem><para>
<emphasis>Build Engineer:</emphasis>
This type of developer manages Autobuilders and
releases.
Not all environments need a Build Engineer.
</para></listitem>
<listitem><para>
<emphasis>Test Engineer:</emphasis>
This type of developer creates and manages automated
tests needed to ensure all application and core
system development meets desired quality standards.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Gather the Hardware:</emphasis>
Based on the size and make-up of the team, get the hardware
together.
Any development, build, or test engineer should be using
a system that is running a supported Linux distribution.
Systems, in general, should be high performance (e.g. dual,
six-core Xeons with 24 Gbytes of RAM and plenty of disk space).
You can help ensure efficiency by having any machines used
for testing or that run Autobuilders be as high performance
as possible.
</para></listitem>
<listitem><para>
<emphasis>Understand the Hardware Topology of the Environment:</emphasis>
Now that you know how many developers and support engineers
are required, you can understand the topology of the
hardware environment.
The following figure shows a moderately sized Yocto Project
development environment.
<para role="writernotes">
Need figure.</para>
</para></listitem>
<listitem><para>
<emphasis>Use Git as Your Source Control Manager (SCM):</emphasis>
Keeping your
<ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink>
and any software you are developing under the
control of an SCM system that is compatible
with the OpenEmbedded build system is advisable.
Of the SCMs BitBake supports, the
Yocto Project team strongly recommends using
<ulink url='&YOCTO_DOCS_REF_URL;#git'>Git</ulink>.
Git is a distributed system that is easy to backup,
allows you to work remotely, and then connects back to the
infrastructure.
<note>
For information about BitBake, see the
<ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
</note></para>
<para>It is relatively easy to set up Git services and create
infrastructure like
<ulink url='&YOCTO_GIT_URL;'>http://git.yoctoproject.org</ulink>,
which is based on server software called
<filename>gitolite</filename> with <filename>cgit</filename>
being used to generate the web interface that lets you view the
repositories.
The <filename>gitolite</filename> software identifies users
using SSH keys and allows branch-based
access controls to repositories that you can control as little
or as much as necessary.
<note>
The setup of these services is beyond the scope of this
manual.
However, sites such as these exist that describe how to
perform setup:
<itemizedlist>
<listitem><para>
<ulink url='http://git-scm.com/book/ch4-8.html'>Git documentation</ulink>:
Describes how to install <filename>gitolite</filename>
on the server.
</para></listitem>
<listitem><para>
<ulink url='http://sitaramc.github.com/gitolite/master-toc.html'>The <filename>gitolite</filename> master index</ulink>:
All topics for <filename>gitolite</filename>.
</para></listitem>
<listitem><para>
<ulink url='https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools'>Interfaces, frontends, and tools</ulink>:
Documentation on how to create interfaces and frontends
for Git.
</para></listitem>
</itemizedlist>
</note>
</para></listitem>
<listitem><para>
<emphasis>Set up the Application Development Machines:</emphasis>
As mentioned earlier, application developers are creating
applications on top of existing software stacks.
Following are some best practices for setting up machines
that do application development:
<itemizedlist>
<listitem><para>
Use a pre-built toolchain that
contains the software stack itself.
Then, develop the application code on top of the
stack.
This method works well for small numbers of relatively
isolated applications.
</para></listitem>
<listitem><para>
When possible, use the Yocto Project
plug-in for the
<trademark class='trade'>Eclipse</trademark> IDE
and SDK development practices.
For more information, see the
"<ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>"
manual.
</para></listitem>
<listitem><para>
Keep your cross-development toolchains updated.
You can do this through provisioning either as new
toolchain downloads or as updates through a package
update mechanism using <filename>opkg</filename>
to provide updates to an existing toolchain.
The exact mechanics of how and when to do this are a
question for local policy.
</para></listitem>
<listitem><para>
Use multiple toolchains installed locally
into different locations to allow development across
versions.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Set up the Core Development Machines:</emphasis>
As mentioned earlier, these types of developers work on the
contents of the operating system itself.
Following are some best practices for setting up machines
used for developing images:
<itemizedlist>
<listitem><para>
Have the Yocto Project build system itself available on
the developer workstations so developers can run their own
builds and directly rebuild the software stack.
</para></listitem>
<listitem><para>
Keep the core system unchanged as much as
possible and do your work in layers on top of the
core system.
Doing so gives you a greater level of portability when
upgrading to new versions of the core system or Board
Support Packages (BSPs).
</para></listitem>
<listitem><para>
Share layers amongst the developers of a
particular project and contain the policy configuration
that defines the project.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Set up an Autobuilder:</emphasis>
Autobuilders are often the core of the development
environment.
It is here that changes from individual developers are brought
together and centrally tested and subsequent decisions about
releases can be made.
Autobuilders also allow for "continuous integration" style
testing of software components and regression identification
and tracking.</para>
<para>See "<ulink url='http://autobuilder.yoctoproject.org'>Yocto Project Autobuilder</ulink>"
for more information and links to buildbot.
The Yocto Project team has found this implementation
works well in this role.
A public example of this is the Yocto Project
Autobuilders, which we use to test the overall health of the
project.</para>
<para>The features of this system are:
<itemizedlist>
<listitem><para>
Highlights when commits break the build.
</para></listitem>
<listitem><para>
Populates an sstate cache from which
developers can pull rather than requiring local
builds.
</para></listitem>
<listitem><para>
Allows commit hook triggers,
which trigger builds when commits are made.
</para></listitem>
<listitem><para>
Allows triggering of automated image booting
and testing under the QuickEMUlator (QEMU).
</para></listitem>
<listitem><para>
Supports incremental build testing and
from-scratch builds.
</para></listitem>
<listitem><para>
Shares output that allows developer
testing and historical regression investigation.
</para></listitem>
<listitem><para>
Creates output that can be used for releases.
</para></listitem>
<listitem><para>
Allows scheduling of builds so that resources
can be used efficiently.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Set up Test Machines:</emphasis>
Use a small number of shared, high performance systems
for testing purposes.
Developers can use these systems for wider, more
extensive testing while they continue to develop
locally using their primary development system.
</para></listitem>
<listitem><para>
<emphasis>Document Policies and Change Flow:</emphasis>
The Yocto Project itself uses a hierarchical structure and a
pull model.
Scripts exist to create and send pull requests
(i.e. <filename>create-pull-request</filename> and
<filename>send-pull-request</filename>).
This model is in line with other open source projects where
maintainers are responsible for specific areas of the project
and a single maintainer handles the final "top-of-tree" merges.
<note>
You can also use a more collective push model.
The <filename>gitolite</filename> software supports both the
push and pull models quite easily.
</note></para>
<para>As with any development environment, it is important
to document the policy used as well as any main project
guidelines so they are understood by everyone.
It is also a good idea to have well structured
commit messages, which are usually a part of a project's
guidelines.
Good commit messages are essential when looking back in time and
trying to understand why changes were made.</para>
<para>If you discover that changes are needed to the core
layer of the project, it is worth sharing those with the
community as soon as possible.
Chances are if you have discovered the need for changes,
someone else in the community needs them also.
</para></listitem>
<listitem><para>
<emphasis>Development Environment Summary:</emphasis>
Aside from the previous steps, some best practices exist
within the Yocto Project development environment.
Consider the following:
<itemizedlist>
<listitem><para>
Use <ulink url='&YOCTO_DOCS_REF_URL;#git'>Git</ulink>
as the source control system.
</para></listitem>
<listitem><para>
Maintain your Metadata in layers that make sense
for your situation.
See the "<link linkend='understanding-and-creating-layers'>Understanding
and Creating Layers</link>" section for more information on
layers.
</para></listitem>
<listitem><para>
Separate the project's Metadata and code by using
separate Git repositories.
See the
"<ulink url='&YOCTO_DOCS_REF_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>"
section for information on these repositories.
See the
"<link linkend='working-with-yocto-project-source-files'>Working With Yocto Project Source Files</link>"
section for information on how to set up local Git
repositories for related upstream Yocto Project
Git repositories.
</para></listitem>
<listitem><para>
Set up the directory for the shared state cache
(<ulink url='&YOCTO_DOCS_REF_URL;#var-SSTATE_DIR'><filename>SSTATE_DIR</filename></ulink>)
where it makes sense.
For example, set up the sstate cache on a system used
by developers in the same organization and share the
same source directories on their machines.
</para></listitem>
<listitem><para>
Set up an Autobuilder and have it populate the
sstate cache and source directories.
</para></listitem>
<listitem><para>
The Yocto Project community encourages you
to send patches to the project to fix bugs or add features.
If you do submit patches, follow the project commit
guidelines for writing good commit messages.
See the "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>"
section.
</para></listitem>
<listitem><para>
Send changes to the core sooner than later
as others are likely to run into the same issues.
For some guidance on mailing lists to use, see the list in the
"<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>"
section.
For a description of the available mailing lists, see the
"<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>"
section in the Yocto Project Reference Manual.
</para></listitem>
</itemizedlist>
</para></listitem>
</orderedlist>
</para>
</section>
<section id='submitting-a-defect-against-the-yocto-project'>
<title>Submitting a Defect Against the Yocto Project</title>
<para>
Use the Yocto Project implementation of
<ulink url='http://www.bugzilla.org/about/'>Bugzilla</ulink>
to submit a defect (bug) against the Yocto Project.
For additional information on this implementation of Bugzilla see the
"<ulink url='&YOCTO_DOCS_REF_URL;#resources-bugtracker'>Yocto Project Bugzilla</ulink>"
section in the Yocto Project Reference Manual.
For more detail on any of the following steps, see the Yocto Project
<ulink url='&YOCTO_WIKI_URL;/wiki/Bugzilla_Configuration_and_Bug_Tracking'>Bugzilla wiki page</ulink>.
</para>
<para>
Use the following general steps to submit a bug"
<orderedlist>
<listitem><para>
Open the Yocto Project implementation of
<ulink url='&YOCTO_BUGZILLA_URL;'>Bugzilla</ulink>.
</para></listitem>
<listitem><para>
Click "File a Bug" to enter a new bug.
</para></listitem>
<listitem><para>
Choose the appropriate "Classification", "Product", and
"Component" for which the bug was found.
Bugs for the Yocto Project fall into one of several
classifications, which in turn break down into several
products and components.
For example, for a bug against the
<filename>meta-intel</filename> layer, you would choose
"Build System, Metadata &amp; Runtime", "BSPs", and
"bsps-meta-intel", respectively.
</para></listitem>
<listitem><para>
Choose the "Version" of the Yocto Project for which you found
the bug (e.g. &DISTRO;).
</para></listitem>
<listitem><para>
Determine and select the "Severity" of the bug.
The severity indicates how the bug impacted your work.
</para></listitem>
<listitem><para>
Choose the "Hardware" that the bug impacts.
</para></listitem>
<listitem><para>
Choose the "Architecture" that the bug impacts.
</para></listitem>
<listitem><para>
Choose a "Documentation change" item for the bug.
Fixing a bug might or might not affect the Yocto Project
documentation.
If you are unsure of the impact to the documentation, select
"Don't Know".
</para></listitem>
<listitem><para>
Provide a brief "Summary" of the bug.
Try to limit your summary to just a line or two and be sure
to capture the essence of the bug.
</para></listitem>
<listitem><para>
Provide a detailed "Description" of the bug.
You should provide as much detail as you can about the context,
behavior, output, and so forth that surrounds the bug.
You can even attach supporting files for output from logs by
using the "Add an attachment" button.
</para></listitem>
<listitem><para>
Click the "Submit Bug" button submit the bug.
A new Bugzilla number is assigned to the bug and the defect
is logged in the bug tracking system.
</para></listitem>
</orderedlist>
Once you file a bug, the bug is processed by the Yocto Project Bug
Triage Team and further details concerning the bug are assigned
(e.g. priority and owner).
You are the "Submitter" of the bug and any further categorization,
progress, or comments on the bug result in Bugzilla sending you an
automated email concerning the particular change or progress to the
bug.
</para>
</section>
<section id='how-to-submit-a-change'>
<title>Submitting a Change to the Yocto Project</title>
<para>
Contributions to the Yocto Project and OpenEmbedded are very welcome.
Because the system is extremely configurable and flexible, we recognize
that developers will want to extend, configure or optimize it for
their specific uses.
</para>
<para>
The Yocto Project uses a mailing list and a patch-based workflow
that is similar to the Linux kernel but contains important
differences.
In general, a mailing list exists through which you can submit
patches.
You should send patches to the appropriate mailing list so that they
can be reviewed and merged by the appropriate maintainer.
The specific mailing list you need to use depends on the
location of the code you are changing.
Each component (e.g. layer) should have a
<filename>README</filename> file that indicates where to send
the changes and which process to follow.
</para>
<para>
You can send the patch to the mailing list using whichever approach
you feel comfortable with to generate the patch.
Once sent, the patch is usually reviewed by the community at large.
If somebody has concerns with the patch, they will usually voice
their concern over the mailing list.
If a patch does not receive any negative reviews, the maintainer of
the affected layer typically takes the patch, tests it, and then
based on successful testing, merges the patch.
</para>
<para id='figuring-out-the-mailing-list-to-use'>
The "poky" repository, which is the Yocto Project's reference build
environment, is a hybrid repository that contains several
individual pieces (e.g. BitBake, Metadata, documentation,
and so forth) built using the combo-layer tool.
The upstream location used for submitting changes varies by
component:
<itemizedlist>
<listitem><para>
<emphasis>Core Metadata:</emphasis>
Send your patch to the
<ulink url='http://lists.openembedded.org/mailman/listinfo/openembedded-core'>openembedded-core</ulink>
mailing list. For example, a change to anything under
the <filename>meta</filename> or
<filename>scripts</filename> directories should be sent
to this mailing list.
</para></listitem>
<listitem><para>
<emphasis>BitBake:</emphasis>
For changes to BitBake (i.e. anything under the
<filename>bitbake</filename> directory), send your patch
to the
<ulink url='http://lists.openembedded.org/mailman/listinfo/bitbake-devel'>bitbake-devel</ulink>
mailing list.
</para></listitem>
<listitem><para>
<emphasis>"meta-*" trees:</emphasis>
These trees contain Metadata.
Use the
<ulink url='https://lists.yoctoproject.org/listinfo/poky'>poky</ulink>
mailing list.
</para></listitem>
</itemizedlist>
</para>
<para>
For changes to other layers hosted in the Yocto Project source
repositories (i.e. <filename>yoctoproject.org</filename>), tools,
and the Yocto Project documentation, use the
<ulink url='https://lists.yoctoproject.org/listinfo/yocto'>Yocto Project</ulink>
general mailing list.
<note>
Sometimes a layer's documentation specifies to use a
particular mailing list.
If so, use that list.
</note>
For additional recipes that do not fit into the core Metadata, you
should determine which layer the recipe should go into and submit
the change in the manner recommended by the documentation (e.g.
the <filename>README</filename> file) supplied with the layer.
If in doubt, please ask on the Yocto general mailing list or on
the openembedded-devel mailing list.
</para>
<para>
You can also push a change upstream and request a maintainer to
pull the change into the component's upstream repository.
You do this by pushing to a contribution repository that is upstream.
See the
"<ulink url='&YOCTO_DOCS_REF_URL;#workflows'>Workflows</ulink>"
section in the Yocto Project Reference Manual for additional
concepts on working in the Yocto Project development environment.
</para>
<para>
Two commonly used testing repositories exist for
OpenEmbedded-Core:
<itemizedlist>
<listitem><para>
<emphasis>"ross/mut" branch:</emphasis>
The "mut" (master-under-test) tree
exists in the <filename>poky-contrib</filename> repository
in the
<ulink url='&YOCTO_GIT_URL;'>Yocto Project source repositories</ulink>.
</para></listitem>
<listitem><para>
<emphasis>"master-next" branch:</emphasis>
This branch is part of the main
"poky" repository in the Yocto Project source repositories.
</para></listitem>
</itemizedlist>
Maintainers use these branches to test submissions prior to merging
patches.
Thus, you can get an idea of the status of a patch based on
whether the patch has been merged into one of these branches.
<note>
This system is imperfect and changes can sometimes get lost in the
flow.
Asking about the status of a patch or change is reasonable if the
change has been idle for a while with no feedback.
The Yocto Project does have plans to use
<ulink url='https://en.wikipedia.org/wiki/Patchwork_(software)'>Patchwork</ulink>
to track the status of patches and also to automatically preview
patches.
</note>
</para>
<para>
The following sections provide procedures for submitting a change.
</para>
<section id='pushing-a-change-upstream'>
<title>Using Scripts to Push a Change Upstream and Request a Pull</title>
<para>
Follow this procedure to push a change to an upstream "contrib"
Git repository:
<note>
You can find general Git information on how to push a change
upstream in the
<ulink url='http://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows'>Git Community Book</ulink>.
</note>
<orderedlist>
<listitem><para>
<emphasis>Make Your Changes Locally:</emphasis>
Make your changes in your local Git repository.
You should make small, controlled, isolated changes.
Keeping changes small and isolated aids review,
makes merging/rebasing easier and keeps the change
history clean should anyone need to refer to it in
future.
</para></listitem>
<listitem><para>
<emphasis>Stage Your Changes:</emphasis>
Stage your changes by using the <filename>git add</filename>
command on each file you changed.
</para></listitem>
<listitem><para id='making-sure-you-have-correct-commit-information'>
<emphasis>Commit Your Changes:</emphasis>
Commit the change by using the
<filename>git commit</filename> command.
Make sure your commit information follows standards by
following these accepted conventions:
<itemizedlist>
<listitem><para>
Be sure to include a "Signed-off-by:" line in the
same style as required by the Linux kernel.
Adding this line signifies that you, the submitter,
have agreed to the Developer's Certificate of
Origin 1.1 as follows:
<literallayout class='monospaced'>
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
</literallayout>
</para></listitem>
<listitem><para>
Provide a single-line summary of the change.
and,
if more explanation is needed, provide more
detail in the body of the commit.
This summary is typically viewable in the
"shortlist" of changes.
Thus, providing something short and descriptive
that gives the reader a summary of the change is
useful when viewing a list of many commits.
You should prefix this short description with the
recipe name (if changing a recipe), or else with
the short form path to the file being changed.
</para></listitem>
<listitem><para>
For the body of the commit message, provide
detailed information that describes what you
changed, why you made the change, and the approach
you used.
It might also be helpful if you mention how you
tested the change.
Provide as much detail as you can in the body of
the commit message.
<note>
You do not need to provide a more detailed
explanation of a change if the change is
minor to the point of the single line
summary providing all the information.
</note>
</para></listitem>
<listitem><para>
If the change addresses a specific bug or issue
that is associated with a bug-tracking ID,
include a reference to that ID in your detailed
description.
For example, the Yocto Project uses a specific
convention for bug references - any commit that
addresses a specific bug should use the following
form for the detailed description.
Be sure to use the actual bug-tracking ID from
Bugzilla for
<replaceable>bug-id</replaceable>:
<literallayout class='monospaced'>
Fixes [YOCTO #<replaceable>bug-id</replaceable>]
<replaceable>detailed description of change</replaceable>
</literallayout>
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Push Your Commits to a "Contrib" Upstream:</emphasis>
If you have arranged for permissions to push to an
upstream contrib repository, push the change to that
repository:
<literallayout class='monospaced'>
$ git push <replaceable>upstream_remote_repo</replaceable> <replaceable>local_branch_name</replaceable>
</literallayout>
For example, suppose you have permissions to push into the
upstream <filename>meta-intel-contrib</filename>
repository and you are working in a local branch named
<replaceable>your_name</replaceable><filename>/README</filename>.
The following command pushes your local commits to the
<filename>meta-intel-contrib</filename> upstream
repository and puts the commit in a branch named
<replaceable>your_name</replaceable><filename>/README</filename>:
<literallayout class='monospaced'>
$ git push meta-intel-contrib <replaceable>your_name</replaceable>/README
</literallayout>
</para></listitem>
<listitem><para id='push-determine-who-to-notify'>
<emphasis>Determine Who to Notify:</emphasis>
Determine the maintainer or the mailing list
that you need to notify for the change.</para>
<para>Before submitting any change, you need to be sure
who the maintainer is or what mailing list that you need
to notify.
Use either these methods to find out:
<itemizedlist>
<listitem><para>
<emphasis>Maintenance File:</emphasis>
Examine the <filename>maintainers.inc</filename>
file, which is located in the
<ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
at
<filename>meta/conf/distro/include</filename>,
to see who is responsible for code.
</para></listitem>
<listitem><para>
<emphasis>Search by File:</emphasis>
Using <ulink url='&YOCTO_DOCS_REF_URL;#git'>Git</ulink>,
you can enter the following command to bring up a
short list of all commits against a specific file:
<literallayout class='monospaced'>
git shortlog -- <replaceable>filename</replaceable>
</literallayout>
Just provide the name of the file for which you
are interested.
The information returned is not ordered by history
but does include a list of everyone who has
committed grouped by name.
From the list, you can see who is responsible for
the bulk of the changes against the file.
</para></listitem>
<listitem><para>
<emphasis>Examine the List of Mailing Lists:</emphasis>
For a list of the Yocto Project and related mailing
lists, see the
"<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing lists</ulink>"
section in the Yocto Project Reference Manual.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Make a Pull Request:</emphasis>
Notify the maintainer or the mailing list that you have
pushed a change by making a pull request.</para>
<para>The Yocto Project provides two scripts that
conveniently let you generate and send pull requests to the
Yocto Project.
These scripts are <filename>create-pull-request</filename>
and <filename>send-pull-request</filename>.
You can find these scripts in the
<filename>scripts</filename> directory within the
<ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
(e.g. <filename>~/poky/scripts</filename>).
</para>
<para>Using these scripts correctly formats the requests
without introducing any whitespace or HTML formatting.
The maintainer that receives your patches either directly
or through the mailing list needs to be able to save and
apply them directly from your emails.
Using these scripts is the preferred method for sending
patches.</para>
<para>First, create the pull request.
For example, the following command runs the script,
specifies the upstream repository in the contrib directory
into which you pushed the change, and provides a subject
line in the created patch files:
<literallayout class='monospaced'>
$ ~/poky/scripts/create-pull-request -u meta-intel-contrib -s "Updated Manual Section Reference in README"
</literallayout>
Running this script forms
<filename>*.patch</filename> files in a folder named
<filename>pull-</filename><replaceable>PID</replaceable>
in the current directory.
One of the patch files is a cover letter.</para>
<para>Before running the
<filename>send-pull-request</filename> script, you must
edit the cover letter patch to insert information about
your change.
After editing the cover letter, send the pull request.
For example, the following command runs the script and
specifies the patch directory and email address.
In this example, the email address is a mailing list:
<literallayout class='monospaced'>
$ ~/poky/scripts/send-pull-request -p ~/meta-intel/pull-10565 -t meta-intel@yoctoproject.org
</literallayout>
You need to follow the prompts as the script is
interactive.
<note>
For help on using these scripts, simply provide the
<filename>-h</filename> argument as follows:
<literallayout class='monospaced'>
$ poky/scripts/create-pull-request -h
$ poky/scripts/send-pull-request -h
</literallayout>
</note>
</para></listitem>
</orderedlist>
</para>
</section>
<section id='submitting-a-patch'>
<title>Using Email to Submit a Patch</title>
<para>
You can submit patches without using the
<filename>create-pull-request</filename> and
<filename>send-pull-request</filename> scripts described in the
previous section.
However, keep in mind, the preferred method is to use the scripts.
</para>
<para>
Depending on the components changed, you need to submit the email
to a specific mailing list.
For some guidance on which mailing list to use, see the
<link linkend='figuring-out-the-mailing-list-to-use'>beginning</link>
of this section.
For a description of all the available mailing lists, see the
"<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>"
section in the Yocto Project Reference Manual.
</para>
<para>
Here is the general procedure on how to submit a patch through
email without using the scripts:
<orderedlist>
<listitem><para>
<emphasis>Make Your Changes Locally:</emphasis>
Make your changes in your local Git repository.
You should make small, controlled, isolated changes.
Keeping changes small and isolated aids review,
makes merging/rebasing easier and keeps the change
history clean should anyone need to refer to it in
future.
</para></listitem>
<listitem><para>
<emphasis>Stage Your Changes:</emphasis>
Stage your changes by using the <filename>git add</filename>
command on each file you changed.
</para></listitem>
<listitem><para>
<emphasis>Commit Your Changes:</emphasis>
Commit the change by using the
<filename>git commit --signoff</filename> command.
Using the <filename>--signoff</filename> option identifies
you as the person making the change and also satisfies
the Developer's Certificate of Origin (DCO) shown earlier.
</para>
<para>When you form a commit, you must follow certain
standards established by the Yocto Project development
team.
See
<link linkend='making-sure-you-have-correct-commit-information'>Step 3</link>
in the previous section for information on how to
provide commit information that meets Yocto Project
commit message standards.
</para></listitem>
<listitem><para>
<emphasis>Format the Commit:</emphasis>
Format the commit into an email message.
To format commits, use the
<filename>git format-patch</filename> command.
When you provide the command, you must include a revision
list or a number of patches as part of the command.
For example, either of these two commands takes your most
recent single commit and formats it as an email message in
the current directory:
<literallayout class='monospaced'>
$ git format-patch -1
</literallayout>
or
<literallayout class='monospaced'>
$ git format-patch HEAD~
</literallayout></para>
<para>After the command is run, the current directory
contains a numbered <filename>.patch</filename> file for
the commit.</para>
<para>If you provide several commits as part of the
command, the <filename>git format-patch</filename> command
produces a series of numbered files in the current
directory one for each commit.
If you have more than one patch, you should also use the
<filename>--cover</filename> option with the command,
which generates a cover letter as the first "patch" in
the series.
You can then edit the cover letter to provide a
description for the series of patches.
For information on the
<filename>git format-patch</filename> command,
see <filename>GIT_FORMAT_PATCH(1)</filename> displayed
using the <filename>man git-format-patch</filename>
command.
<note>
If you are or will be a frequent contributor to the
Yocto Project or to OpenEmbedded, you might consider
requesting a contrib area and the necessary associated
rights.
</note>
</para></listitem>
<listitem><para>
<emphasis>Import the Files Into Your Mail Client:</emphasis>
Import the files into your mail client by using the
<filename>git send-email</filename> command.
<note>
In order to use <filename>git send-email</filename>,
you must have the proper Git packages installed on
your host.
For Ubuntu, Debian, and Fedora the package is
<filename>git-email</filename>.
</note></para>
<para>The <filename>git send-email</filename> command
sends email by using a local or remote Mail Transport Agent
(MTA) such as <filename>msmtp</filename>,
<filename>sendmail</filename>, or through a direct
<filename>smtp</filename> configuration in your Git
<filename>~/.gitconfig</filename> file.
If you are submitting patches through email only, it is
very important that you submit them without any whitespace
or HTML formatting that either you or your mailer
introduces.
The maintainer that receives your patches needs to be able
to save and apply them directly from your emails.
A good way to verify that what you are sending will be
applicable by the maintainer is to do a dry run and send
them to yourself and then save and apply them as the
maintainer would.</para>
<para>The <filename>git send-email</filename> command is
the preferred method for sending your patches using
email since there is no risk of compromising whitespace
in the body of the message, which can occur when you use
your own mail client.
The command also has several options that let you
specify recipients and perform further editing of the
email message.
For information on how to use the
<filename>git send-email</filename> command,
see <filename>GIT-SEND-EMAIL(1)</filename> displayed using
the <filename>man git-send-email</filename> command.
</para></listitem>
</orderedlist>
</para>
</section>
</section>
</chapter>
<!--
vim: expandtab tw=80 ts=4
-->

View File

@@ -7,51 +7,15 @@
<title>Using the Quick EMUlator (QEMU)</title>
<para>
The Yocto Project uses an implementation of the Quick EMUlator (QEMU)
Open Source project as part of the Yocto Project development "tool
set".
This chapter provides both procedures that show you how to use the
Quick EMUlator (QEMU) and other QEMU information helpful for
development purposes.
This chapter provides procedures that show you how to use the
Quick EMUlator (QEMU), which is an Open Source project the Yocto
Project uses as part of its development "tool set".
For reference information on the Yocto Project implementation of QEMU,
see the
"<ulink url='&YOCTO_DOCS_REF_URL;#ref-quick-emulator-qemu'>Quick EMUlator (QEMU)</ulink>"
section in the Yocto Project Reference Manual.
</para>
<section id='qemu-dev-overview'>
<title>Overview</title>
<para>
Within the context of the Yocto Project, QEMU is an
emulator and virtualization machine that allows you to run a
complete image you have built using the Yocto Project as just
another task on your build system.
QEMU is useful for running and testing images and applications on
supported Yocto Project architectures without having actual
hardware.
Among other things, the Yocto Project uses QEMU to run automated
Quality Assurance (QA) tests on final images shipped with each
release.
<note>
This implementation is not the same as QEMU in general.
</note>
This section provides a brief reference for the Yocto Project
implementation of QEMU.
</para>
<para>
For official information and documentation on QEMU in general, see
the following references:
<itemizedlist>
<listitem><para>
<emphasis><ulink url='http://wiki.qemu.org/Main_Page'>QEMU Website</ulink>:</emphasis>
The official website for the QEMU Open Source project.
</para></listitem>
<listitem><para>
<emphasis><ulink url='http://wiki.qemu.org/Manual'>Documentation</ulink>:</emphasis>
The QEMU user manual.
</para></listitem>
</itemizedlist>
</para>
</section>
<section id='qemu-running-qemu'>
<title>Running QEMU</title>
@@ -63,9 +27,6 @@
<orderedlist>
<listitem><para>
<emphasis>Install QEMU:</emphasis>
QEMU is made available with the Yocto Project a number of
ways.
One method is to install a Software Development Kit (SDK).
See
"<ulink url='&YOCTO_DOCS_SDK_URL;#the-qemu-emulator'>The QEMU Emulator</ulink>"
section in the Yocto Project Application Development and
@@ -342,345 +303,6 @@
</note>
</para>
</section>
<section id='qemu-kvm-cpu-compatibility'>
<title>QEMU CPU Compatibility Under KVM</title>
<para>
By default, the QEMU build compiles for and targets 64-bit and x86
<trademark class='registered'>Intel</trademark> <trademark class='trademark'>Core</trademark>2
Duo processors and 32-bit x86
<trademark class='registered'>Intel</trademark> <trademark class='registered'>Pentium</trademark>
II processors.
QEMU builds for and targets these CPU types because they display
a broad range of CPU feature compatibility with many commonly
used CPUs.
</para>
<para>
Despite this broad range of compatibility, the CPUs could support
a feature that your host CPU does not support.
Although this situation is not a problem when QEMU uses software
emulation of the feature, it can be a problem when QEMU is
running with KVM enabled.
Specifically, software compiled with a certain CPU feature crashes
when run on a CPU under KVM that does not support that feature.
To work around this problem, you can override QEMU's runtime CPU
setting by changing the <filename>QB_CPU_KVM</filename>
variable in <filename>qemuboot.conf</filename> in the
<ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory's</ulink>
<filename>deploy/image</filename> directory.
This setting specifies a <filename>-cpu</filename> option
passed into QEMU in the <filename>runqemu</filename> script.
Running <filename>qemu -cpu help</filename> returns a list of
available supported CPU types.
</para>
</section>
<section id='qemu-dev-performance'>
<title>QEMU Performance</title>
<para>
Using QEMU to emulate your hardware can result in speed issues
depending on the target and host architecture mix.
For example, using the <filename>qemux86</filename> image in the
emulator on an Intel-based 32-bit (x86) host machine is fast
because the target and host architectures match.
On the other hand, using the <filename>qemuarm</filename> image
on the same Intel-based host can be slower.
But, you still achieve faithful emulation of ARM-specific issues.
</para>
<para>
To speed things up, the QEMU images support using
<filename>distcc</filename> to call a cross-compiler outside the
emulated system.
If you used <filename>runqemu</filename> to start QEMU, and the
<filename>distccd</filename> application is present on the host
system, any BitBake cross-compiling toolchain available from the
build system is automatically used from within QEMU simply by
calling <filename>distcc</filename>.
You can accomplish this by defining the cross-compiler variable
(e.g. <filename>export CC="distcc"</filename>).
Alternatively, if you are using a suitable SDK image or the
appropriate stand-alone toolchain is present, the toolchain is
also automatically used.
<note>
Several mechanisms exist that let you connect to the system
running on the QEMU emulator:
<itemizedlist>
<listitem><para>
QEMU provides a framebuffer interface that makes
standard consoles available.
</para></listitem>
<listitem><para>
Generally, headless embedded devices have a serial port.
If so, you can configure the operating system of the
running image to use that port to run a console.
The connection uses standard IP networking.
</para></listitem>
<listitem><para>
SSH servers exist in some QEMU images.
The <filename>core-image-sato</filename> QEMU image
has a Dropbear secure shell (SSH) server that runs
with the root password disabled.
The <filename>core-image-full-cmdline</filename> and
<filename>core-image-lsb</filename> QEMU images
have OpenSSH instead of Dropbear.
Including these SSH servers allow you to use standard
<filename>ssh</filename> and <filename>scp</filename>
commands.
The <filename>core-image-minimal</filename> QEMU image,
however, contains no SSH server.
</para></listitem>
<listitem><para>
You can use a provided, user-space NFS server to boot
the QEMU session using a local copy of the root
filesystem on the host.
In order to make this connection, you must extract a
root filesystem tarball by using the
<filename>runqemu-extract-sdk</filename> command.
After running the command, you must then point the
<filename>runqemu</filename>
script to the extracted directory instead of a root
filesystem image file.
See the
"<link linkend='qemu-running-under-a-network-file-system-nfs-server'>Running Under a Network File System (NFS) Server</link>"
section for more information.
</para></listitem>
</itemizedlist>
</note>
</para>
</section>
<section id='qemu-dev-command-line-syntax'>
<title>QEMU Command-Line Syntax</title>
<para>
The basic <filename>runqemu</filename> command syntax is as
follows:
<literallayout class='monospaced'>
$ runqemu [<replaceable>option</replaceable> ] [...]
</literallayout>
Based on what you provide on the command line,
<filename>runqemu</filename> does a good job of figuring out what
you are trying to do.
For example, by default, QEMU looks for the most recently built
image according to the timestamp when it needs to look for an
image.
Minimally, through the use of options, you must provide either
a machine name, a virtual machine image
(<filename>*wic.vmdk</filename>), or a kernel image
(<filename>*.bin</filename>).
</para>
<para>
Following is the command-line help output for the
<filename>runqemu</filename> command:
<literallayout class='monospaced'>
$ runqemu --help
Usage: you can run this script with any valid combination
of the following environment variables (in any order):
KERNEL - the kernel image file to use
ROOTFS - the rootfs image file or nfsroot directory to use
MACHINE - the machine name (optional, autodetected from KERNEL filename if unspecified)
Simplified QEMU command-line options can be passed with:
nographic - disable video console
serial - enable a serial console on /dev/ttyS0
slirp - enable user networking, no root privileges is required
kvm - enable KVM when running x86/x86_64 (VT-capable CPU required)
kvm-vhost - enable KVM with vhost when running x86/x86_64 (VT-capable CPU required)
publicvnc - enable a VNC server open to all hosts
audio - enable audio
[*/]ovmf* - OVMF firmware file or base name for booting with UEFI
tcpserial=&lt;port&gt; - specify tcp serial port number
biosdir=&lt;dir&gt; - specify custom bios dir
biosfilename=&lt;filename&gt; - specify bios filename
qemuparams=&lt;xyz&gt; - specify custom parameters to QEMU
bootparams=&lt;xyz&gt; - specify custom kernel parameters during boot
help, -h, --help: print this text
Examples:
runqemu
runqemu qemuarm
runqemu tmp/deploy/images/qemuarm
runqemu tmp/deploy/images/qemux86/&lt;qemuboot.conf&gt;
runqemu qemux86-64 core-image-sato ext4
runqemu qemux86-64 wic-image-minimal wic
runqemu path/to/bzImage-qemux86.bin path/to/nfsrootdir/ serial
runqemu qemux86 iso/hddimg/wic.vmdk/wic.qcow2/wic.vdi/ramfs/cpio.gz...
runqemu qemux86 qemuparams="-m 256"
runqemu qemux86 bootparams="psplash=false"
runqemu path/to/&lt;image&gt;-&lt;machine&gt;.wic
runqemu path/to/&lt;image&gt;-&lt;machine&gt;.wic.vmdk
</literallayout>
</para>
</section>
<section id='qemu-dev-runqemu-command-line-options'>
<title><filename>runqemu</filename> Command-Line Options</title>
<para>
Following is a description of <filename>runqemu</filename>
options you can provide on the command line:
<note><title>Tip</title>
If you do provide some "illegal" option combination or perhaps
you do not provide enough in the way of options,
<filename>runqemu</filename> provides appropriate error
messaging to help you correct the problem.
</note>
<itemizedlist>
<listitem><para>
<replaceable>QEMUARCH</replaceable>:
The QEMU machine architecture, which must be "qemuarm",
"qemuarm64", "qemumips", "qemumips64", "qemuppc",
"qemux86", or "qemux86-64".
</para></listitem>
<listitem><para>
<filename><replaceable>VM</replaceable></filename>:
The virtual machine image, which must be a
<filename>.wic.vmdk</filename> file.
Use this option when you want to boot a
<filename>.wic.vmdk</filename> image.
The image filename you provide must contain one of the
following strings: "qemux86-64", "qemux86", "qemuarm",
"qemumips64", "qemumips", "qemuppc", or "qemush4".
</para></listitem>
<listitem><para>
<replaceable>ROOTFS</replaceable>:
A root filesystem that has one of the following
filetype extensions: "ext2", "ext3", "ext4", "jffs2",
"nfs", or "btrfs".
If the filename you provide for this option uses “nfs”, it
must provide an explicit root filesystem path.
</para></listitem>
<listitem><para>
<replaceable>KERNEL</replaceable>:
A kernel image, which is a <filename>.bin</filename> file.
When you provide a <filename>.bin</filename> file,
<filename>runqemu</filename> detects it and assumes the
file is a kernel image.
</para></listitem>
<listitem><para>
<replaceable>MACHINE</replaceable>:
The architecture of the QEMU machine, which must be one
of the following: "qemux86", "qemux86-64", "qemuarm",
"qemuarm64", "qemumips", “qemumips64", or "qemuppc".
The <replaceable>MACHINE</replaceable> and
<replaceable>QEMUARCH</replaceable> options are basically
identical.
If you do not provide a <replaceable>MACHINE</replaceable>
option, <filename>runqemu</filename> tries to determine
it based on other options.
</para></listitem>
<listitem><para>
<filename>ramfs</filename>:
Indicates you are booting an initial RAM disk (initramfs)
image, which means the <filename>FSTYPE</filename> is
<filename>cpio.gz</filename>.
</para></listitem>
<listitem><para>
<filename>iso</filename>:
Indicates you are booting an ISO image, which means the
<filename>FSTYPE</filename> is
<filename>.iso</filename>.
</para></listitem>
<listitem><para>
<filename>nographic</filename>:
Disables the video console, which sets the console to
"ttys0".
</para></listitem>
<listitem><para>
<filename>serial</filename>:
Enables a serial console on
<filename>/dev/ttyS0</filename>.
</para></listitem>
<listitem><para>
<filename>biosdir</filename>:
Establishes a custom directory for BIOS, VGA BIOS and
keymaps.
</para></listitem>
<listitem><para>
<filename>biosfilename</filename>:
Establishes a custom BIOS name.
</para></listitem>
<listitem><para>
<filename>qemuparams=\"<replaceable>xyz</replaceable>\"</filename>:
Specifies custom QEMU parameters.
Use this option to pass options other than the simple
"kvm" and "serial" options.
</para></listitem>
<listitem><para><filename>bootparams=\"<replaceable>xyz</replaceable>\"</filename>:
Specifies custom boot parameters for the kernel.
</para></listitem>
<listitem><para>
<filename>audio</filename>:
Enables audio in QEMU.
The <replaceable>MACHINE</replaceable> option must be
either "qemux86" or "qemux86-64" in order for audio to be
enabled.
Additionally, the <filename>snd_intel8x0</filename>
or <filename>snd_ens1370</filename> driver must be
installed in linux guest.
</para></listitem>
<listitem><para>
<filename>slirp</filename>:
Enables "slirp" networking, which is a different way
of networking that does not need root access
but also is not as easy to use or comprehensive
as the default.
</para></listitem>
<listitem><para id='kvm-cond'>
<filename>kvm</filename>:
Enables KVM when running "qemux86" or "qemux86-64"
QEMU architectures.
For KVM to work, all the following conditions must be met:
<itemizedlist>
<listitem><para>
Your <replaceable>MACHINE</replaceable> must be either
qemux86" or "qemux86-64".
</para></listitem>
<listitem><para>
Your build host has to have the KVM modules
installed, which are
<filename>/dev/kvm</filename>.
</para></listitem>
<listitem><para>
The build host <filename>/dev/kvm</filename>
directory has to be both writable and readable.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<filename>kvm-vhost</filename>:
Enables KVM with VHOST support when running "qemux86"
or "qemux86-64" QEMU architectures.
For KVM with VHOST to work, the following conditions must
be met:
<itemizedlist>
<listitem><para>
<link linkend='kvm-cond'>kvm</link> option
conditions must be met.
</para></listitem>
<listitem><para>
Your build host has to have virtio net device, which
are <filename>/dev/vhost-net</filename>.
</para></listitem>
<listitem><para>
The build host <filename>/dev/vhost-net</filename>
directory has to be either readable or writable
and “slirp-enabled”.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<filename>publicvnc</filename>:
Enables a VNC server open to all hosts.
</para></listitem>
</itemizedlist>
</para>
</section>
</chapter>
<!--
vim: expandtab tw=80 ts=4

View File

@@ -4,386 +4,18 @@
<chapter id='dev-manual-start'>
<title>Setting Up to Use the Yocto Project</title>
<title>Getting Started with the Yocto Project</title>
<para>
This chapter provides procedures related to getting set up to use the
Yocto Project.
You can learn about creating a team environment that develops using the
Yocto Project, how to set up a build host, how to locate Yocto Project
source repositories, and how to create local Git repositories.
For a more front-to-end process that takes you from minimally preparing
a build host through building an image, see the
<ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>.
</para>
<section id="usingpoky-changes-collaborate">
<title>Creating a Team Development Environment</title>
<para>
It might not be immediately clear how you can use the Yocto
Project in a team development environment, or scale it for a large
team of developers.
One of the strengths of the Yocto Project is that it is extremely
flexible.
Thus, you can adapt it to many different use cases and scenarios.
However, these characteristics can cause a struggle if you are trying
to create a working setup that scales across a large team.
</para>
<para>
To help you understand how to set up this type of environment,
this section presents a procedure that gives you the information
to learn how to get the results you want.
The procedure is high-level and presents some of the project's most
successful experiences, practices, solutions, and available
technologies that work well.
Keep in mind, the procedure here is a starting point.
You can build off it and customize it to fit any
particular working environment and set of practices.
<orderedlist>
<listitem><para>
<emphasis>Determine Who is Going to be Developing:</emphasis>
You need to understand who is going to be doing anything
related to the Yocto Project and what their roles would be.
Making this determination is essential to completing the
steps two and three, which are to get your equipment together
and set up your development environment's hardware topology.
</para>
<para>The following roles exist:
<itemizedlist>
<listitem><para>
<emphasis>Application Development:</emphasis>
These types of developers do application level work
on top of an existing software stack.
</para></listitem>
<listitem><para>
<emphasis>Core System Development:</emphasis>
These types of developers work on the contents of the
operating system image itself.
</para></listitem>
<listitem><para>
<emphasis>Build Engineer:</emphasis>
This type of developer manages Autobuilders and
releases.
Not all environments need a Build Engineer.
</para></listitem>
<listitem><para>
<emphasis>Test Engineer:</emphasis>
This type of developer creates and manages automated
tests needed to ensure all application and core
system development meets desired quality standards.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Gather the Hardware:</emphasis>
Based on the size and make-up of the team, get the hardware
together.
Any development, build, or test engineer should be using
a system that is running a supported Linux distribution.
Systems, in general, should be high performance (e.g. dual,
six-core Xeons with 24 Gbytes of RAM and plenty of disk space).
You can help ensure efficiency by having any machines used
for testing or that run Autobuilders be as high performance
as possible.
</para></listitem>
<listitem><para>
<emphasis>Understand the Hardware Topology of the Environment:</emphasis>
Once you understand the hardware involved and the make-up
of the team, you can understand the hardware topology of the
development environment.
You can get a visual idea of the machines and their roles
across the development environment.
<!--
The following figure shows a moderately sized Yocto Project
development environment.
<para role="writernotes">
Need figure.</para>
-->
</para></listitem>
<listitem><para>
<emphasis>Use Git as Your Source Control Manager (SCM):</emphasis>
Keeping your
<ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink>
and any software you are developing under the
control of an SCM system that is compatible
with the OpenEmbedded build system is advisable.
Of the SCMs BitBake supports, the
Yocto Project team strongly recommends using
<ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>.
Git is a distributed system that is easy to backup,
allows you to work remotely, and then connects back to the
infrastructure.
<note>
For information about BitBake, see the
<ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
</note></para>
<para>It is relatively easy to set up Git services and create
infrastructure like
<ulink url='&YOCTO_GIT_URL;'>http://git.yoctoproject.org</ulink>,
which is based on server software called
<filename>gitolite</filename> with <filename>cgit</filename>
being used to generate the web interface that lets you view the
repositories.
The <filename>gitolite</filename> software identifies users
using SSH keys and allows branch-based
access controls to repositories that you can control as little
or as much as necessary.
<note>
The setup of these services is beyond the scope of this
manual.
However, sites such as these exist that describe how to
perform setup:
<itemizedlist>
<listitem><para>
<ulink url='http://git-scm.com/book/ch4-8.html'>Git documentation</ulink>:
Describes how to install <filename>gitolite</filename>
on the server.
</para></listitem>
<listitem><para>
<ulink url='http://gitolite.com'>Gitolite</ulink>:
Information for <filename>gitolite</filename>.
</para></listitem>
<listitem><para>
<ulink url='https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools'>Interfaces, frontends, and tools</ulink>:
Documentation on how to create interfaces and frontends
for Git.
</para></listitem>
</itemizedlist>
</note>
</para></listitem>
<listitem><para>
<emphasis>Set up the Application Development Machines:</emphasis>
As mentioned earlier, application developers are creating
applications on top of existing software stacks.
Following are some best practices for setting up machines
that do application development:
<itemizedlist>
<listitem><para>
Use a pre-built toolchain that
contains the software stack itself.
Then, develop the application code on top of the
stack.
This method works well for small numbers of relatively
isolated applications.
</para></listitem>
<listitem><para>
When possible, use the Yocto Project
plug-in for the
<trademark class='trade'>Eclipse</trademark> IDE
and SDK development practices.
For more information, see the
"<ulink url='&YOCTO_DOCS_SDK_URL;'>Yocto Project Application Development and the Extensible Software Development Kit (eSDK)</ulink>"
manual.
</para></listitem>
<listitem><para>
Keep your cross-development toolchains updated.
You can do this through provisioning either as new
toolchain downloads or as updates through a package
update mechanism using <filename>opkg</filename>
to provide updates to an existing toolchain.
The exact mechanics of how and when to do this are a
question for local policy.
</para></listitem>
<listitem><para>
Use multiple toolchains installed locally
into different locations to allow development across
versions.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Set up the Core Development Machines:</emphasis>
As mentioned earlier, these types of developers work on the
contents of the operating system itself.
Following are some best practices for setting up machines
used for developing images:
<itemizedlist>
<listitem><para>
Have the Yocto Project build system itself available on
the developer workstations so developers can run their own
builds and directly rebuild the software stack.
</para></listitem>
<listitem><para>
Keep the core system unchanged as much as
possible and do your work in layers on top of the
core system.
Doing so gives you a greater level of portability when
upgrading to new versions of the core system or Board
Support Packages (BSPs).
</para></listitem>
<listitem><para>
Share layers amongst the developers of a
particular project and contain the policy configuration
that defines the project.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Set up an Autobuilder:</emphasis>
Autobuilders are often the core of the development
environment.
It is here that changes from individual developers are brought
together and centrally tested and subsequent decisions about
releases can be made.
Autobuilders also allow for "continuous integration" style
testing of software components and regression identification
and tracking.</para>
<para>See "<ulink url='http://autobuilder.yoctoproject.org'>Yocto Project Autobuilder</ulink>"
for more information and links to buildbot.
The Yocto Project team has found this implementation
works well in this role.
A public example of this is the Yocto Project
Autobuilders, which we use to test the overall health of the
project.</para>
<para>The features of this system are:
<itemizedlist>
<listitem><para>
Highlights when commits break the build.
</para></listitem>
<listitem><para>
Populates an sstate cache from which
developers can pull rather than requiring local
builds.
</para></listitem>
<listitem><para>
Allows commit hook triggers,
which trigger builds when commits are made.
</para></listitem>
<listitem><para>
Allows triggering of automated image booting
and testing under the QuickEMUlator (QEMU).
</para></listitem>
<listitem><para>
Supports incremental build testing and
from-scratch builds.
</para></listitem>
<listitem><para>
Shares output that allows developer
testing and historical regression investigation.
</para></listitem>
<listitem><para>
Creates output that can be used for releases.
</para></listitem>
<listitem><para>
Allows scheduling of builds so that resources
can be used efficiently.
</para></listitem>
</itemizedlist>
</para></listitem>
<listitem><para>
<emphasis>Set up Test Machines:</emphasis>
Use a small number of shared, high performance systems
for testing purposes.
Developers can use these systems for wider, more
extensive testing while they continue to develop
locally using their primary development system.
</para></listitem>
<listitem><para>
<emphasis>Document Policies and Change Flow:</emphasis>
The Yocto Project itself uses a hierarchical structure and a
pull model.
Scripts exist to create and send pull requests
(i.e. <filename>create-pull-request</filename> and
<filename>send-pull-request</filename>).
This model is in line with other open source projects where
maintainers are responsible for specific areas of the project
and a single maintainer handles the final "top-of-tree" merges.
<note>
You can also use a more collective push model.
The <filename>gitolite</filename> software supports both the
push and pull models quite easily.
</note></para>
<para>As with any development environment, it is important
to document the policy used as well as any main project
guidelines so they are understood by everyone.
It is also a good idea to have well structured
commit messages, which are usually a part of a project's
guidelines.
Good commit messages are essential when looking back in time and
trying to understand why changes were made.</para>
<para>If you discover that changes are needed to the core
layer of the project, it is worth sharing those with the
community as soon as possible.
Chances are if you have discovered the need for changes,
someone else in the community needs them also.
</para></listitem>
<listitem><para>
<emphasis>Development Environment Summary:</emphasis>
Aside from the previous steps, some best practices exist
within the Yocto Project development environment.
Consider the following:
<itemizedlist>
<listitem><para>
Use
<ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>
as the source control system.
</para></listitem>
<listitem><para>
Maintain your Metadata in layers that make sense
for your situation.
See the "<link linkend='understanding-and-creating-layers'>Understanding
and Creating Layers</link>" section for more information on
layers.
</para></listitem>
<listitem><para>
Separate the project's Metadata and code by using
separate Git repositories.
See the
"<ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>"
section for information on these repositories.
See the
"<link linkend='locating-yocto-project-source-files'>Locating Yocto Project Source Files</link>"
section for information on how to set up local Git
repositories for related upstream Yocto Project
Git repositories.
</para></listitem>
<listitem><para>
Set up the directory for the shared state cache
(<ulink url='&YOCTO_DOCS_REF_URL;#var-SSTATE_DIR'><filename>SSTATE_DIR</filename></ulink>)
where it makes sense.
For example, set up the sstate cache on a system used
by developers in the same organization and share the
same source directories on their machines.
</para></listitem>
<listitem><para>
Set up an Autobuilder and have it populate the
sstate cache and source directories.
</para></listitem>
<listitem><para>
The Yocto Project community encourages you
to send patches to the project to fix bugs or add features.
If you do submit patches, follow the project commit
guidelines for writing good commit messages.
See the "<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>"
section.
</para></listitem>
<listitem><para>
Send changes to the core sooner than later
as others are likely to run into the same issues.
For some guidance on mailing lists to use, see the list in the
"<link linkend='how-to-submit-a-change'>Submitting a Change to the Yocto Project</link>"
section.
For a description of the available mailing lists, see the
"<ulink url='&YOCTO_DOCS_REF_URL;#resources-mailinglist'>Mailing Lists</ulink>"
section in the Yocto Project Reference Manual.
</para></listitem>
</itemizedlist>
</para></listitem>
</orderedlist>
</para>
</section>
<section id='setting-up-the-development-host-to-use-the-yocto-project'>
<title>Preparing the Build Host</title>
<title>Setting Up the Development Host to Use the Yocto Project</title>
<para>
This section provides procedures to set up your development host to
@@ -545,7 +177,7 @@
site.
</para></listitem>
<listitem><para>
<emphasis>Go to the Install Site for Your Platform:</emphasis>
<emphasis>Go the Install Site for Your Platform:</emphasis>
Click the link for the Docker edition associated with
your development host machine's native software.
For example, if your machine is running Microsoft
@@ -581,8 +213,8 @@
the type of the software you need to install.
</para></listitem>
<listitem><para>
<emphasis>Optionally Orient Yourself With Docker:</emphasis>
If you are unfamiliar with Docker and the container
<emphasis>Optionally Orient Yourself With Dockers:</emphasis>
If you are unfamiliar with Dockers and the container
concept, you can learn more here -
<ulink url='https://docs.docker.com/get-started/'></ulink>.
You should be able to launch Docker or the Docker Toolbox
@@ -618,25 +250,25 @@
</section>
</section>
<section id='locating-yocto-project-source-files'>
<title>Locating Yocto Project Source Files</title>
<section id='working-with-yocto-project-source-files'>
<title>Working With Yocto Project Source Files</title>
<para>
This section contains procedures related to locating Yocto Project
files.
This section contains procedures related to locating and securing
Yocto Project files.
You establish and use these local files to work on projects.
<note><title>Notes</title>
<itemizedlist>
<listitem><para>
For concepts and introductory information about Git as it
is used in the Yocto Project, see the
"<ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>"
section in the Yocto Project Overview and Concepts Manual.
"<ulink url='&YOCTO_DOCS_REF_URL;#git'>Git</ulink>"
section in the Yocto Project Reference Manual.
</para></listitem>
<listitem><para>
For concepts on Yocto Project source repositories, see the
"<ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>"
section in the Yocto Project Overview and Concepts Manual."
"<ulink url='&YOCTO_DOCS_REF_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>"
section in the Yocto Project Reference Manual."
</para></listitem>
</itemizedlist>
</note>
@@ -646,20 +278,9 @@
<title>Accessing Source Repositories</title>
<para>
Working from a copy of the upstream Yocto Project
<ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
is the preferred method for obtaining and using a Yocto Project
release.
You can view the Yocto Project Source Repositories at
<ulink url='&YOCTO_GIT_URL;'></ulink>.
In particular, you can find the
<filename>poky</filename> repository at
<ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/poky/'></ulink>.
</para>
<para>
Use the following procedure to locate the latest upstream copy of
the <filename>poky</filename> Git repository:
Yocto Project maintains upstream Git
<ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
that you can examine and access using a browser-based UI:
<orderedlist>
<listitem><para>
<emphasis>Access Repositories:</emphasis>
@@ -669,21 +290,24 @@
repositories.
</para></listitem>
<listitem><para>
<emphasis>Select the Repository:</emphasis>
Click on the repository in which you are interested (i.e.
<emphasis>Select a Repository:</emphasis>
Click on any repository in which you are interested (e.g.
<filename>poky</filename>).
</para></listitem>
<listitem><para>
<emphasis>Find the URL Used to Clone the Repository:</emphasis>
At the bottom of the page, note the URL used to
<ulink url='&YOCTO_DOCS_OM_URL;#git-commands-clone'>clone</ulink>
<ulink url='&YOCTO_DOCS_REF_URL;#git-commands-clone'>clone</ulink>
that repository (e.g.
<filename>&YOCTO_GIT_URL;/poky</filename>).
<note>
For information on cloning a repository, see the
"<link linkend='cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</link>"
section.
</note>
</para></listitem>
<listitem><para>
<emphasis>Examine Change History of the Repository:</emphasis>
At the top of the page, click on any branch in which you
might be interested (e.g.
<filename>&DISTRO_NAME_NO_CAP;</filename>).
You can then view the commit log or tree view for that
development branch.
</para></listitem>
</orderedlist>
</para>
@@ -695,12 +319,12 @@
<para>
Yocto Project maintains an Index of Releases area that contains
related files that contribute to the Yocto Project.
Rather than Git repositories, these files are tarballs that
represent snapshots in time of a given component.
Rather than Git repositories, these files represent snapshot
tarballs.
<note><title>Tip</title>
The recommended method for accessing Yocto Project
components is to use Git to clone the upstream repository and
work from within that locally cloned repository.
components is to use Git to clone a repository and work from
within that local repository.
The procedure in this section exists should you desire a
tarball snapshot of any given component.
</note>
@@ -718,8 +342,8 @@
full array of released Poky tarballs.
The <filename>poky</filename> directory in the
Index of Releases was historically used for very
early releases and exists now only for retroactive
completeness.
early releases and exists for retroactive
completeness only.
</note>
</para></listitem>
<listitem><para>
@@ -737,7 +361,7 @@
</para></listitem>
<listitem><para>
<emphasis>Download the Tarball:</emphasis>
Click the tarball to download and save a snapshot of the
Click a tarball to download and save a snapshot of a
given component.
</para></listitem>
</orderedlist>
@@ -750,7 +374,7 @@
<para>
The
<ulink url='&YOCTO_HOME_URL;'>Yocto Project Website</ulink>
uses a "DOWNLOADS" page from which you can locate and download
uses a "Downloads" area from which you can locate and download
tarballs of any Yocto Project release.
Rather than Git repositories, these files represent snapshot
tarballs.
@@ -770,99 +394,51 @@
</para></listitem>
<listitem><para>
<emphasis>Get to the Downloads Area:</emphasis>
Select the "DOWNLOADS" item from the pull-down
"SOFTWARE" tab menu.
Click the "Downloads" tab.
</para></listitem>
<listitem><para>
<emphasis>Select a Yocto Project Release:</emphasis>
Use the menu next to "RELEASE" to display and choose
a Yocto Project release (e.g. sumo, rocko, pyro, and
so forth.
For a "map" of Yocto Project releases to version numbers,
see the
<ulink url='https://wiki.yoctoproject.org/wiki/Releases'>Releases</ulink>
wiki page.
<emphasis>Select the Type of Files:</emphasis>
Click the type of files you want (i.e "Build System",
"Tools", or "Board Support Packages (BSPs)".
</para></listitem>
<listitem><para>
<emphasis>Download Tools or Board Support Packages (BSPs):</emphasis>
From the "DOWNLOADS" page, you can download tools or
BSPs as well.
Just scroll down the page and look for what you need.
<emphasis>Locate and Download the Tarball:</emphasis>
From the list of releases, locate the appropriate
download link and download the files.
</para></listitem>
</orderedlist>
</para>
</section>
<section id='accessing-nightly-builds'>
<title>Accessing Nightly Builds</title>
<para>
Yocto Project maintains an area for nightly builds that contains
tarball releases at <ulink url='&YOCTO_AB_NIGHTLY_URL;'/>.
These builds include Yocto Project releases, SDK installation
scripts, and experimental builds.
</para>
<para>
Should you ever want to access a nightly build of a particular
Yocto Project component, use the following procedure:
<orderedlist>
<listitem><para>
<emphasis>Access the Nightly Builds:</emphasis>
Open a browser and go to
<ulink url='&YOCTO_AB_NIGHTLY_URL;'/> to access the
Nightly Builds.
</para></listitem>
<listitem><para>
<emphasis>Select a Build:</emphasis>
Click on any build by date in which you are interested.
</para></listitem>
<listitem><para>
<emphasis>Find the Tarball:</emphasis>
Drill down to find the associated tarball.
</para></listitem>
<listitem><para>
<emphasis>Download the Tarball:</emphasis>
Click the tarball to download and save a snapshot of the
given component.
</para></listitem>
</orderedlist>
</para>
</section>
</section>
<section id='cloning-and-checking-out-branchs'>
<title>Cloning and Checking Out Branches</title>
<para>
To use the Yocto Project, you need a release of the Yocto Project
locally installed on your development system.
The locally installed set of files is referred to as the
<ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
in the Yocto Project documentation.
</para>
<para>
You create your Source Directory by using
<ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink> to clone a local
copy of the upstream <filename>poky</filename> repository.
<note><title>Tip</title>
The preferred method of getting the Yocto Project Source
Directory set up is to clone the repository.
</note>
Working from a copy of the upstream repository allows you
to contribute back into the Yocto Project or simply work with
the latest software on a development branch.
Because Git maintains and creates an upstream repository with
a complete history of changes and you are working with a local
clone of that repository, you have access to all the Yocto
Project development branches and tag names used in the upstream
repository.
</para>
<section id='cloning-the-poky-repository'>
<title>Cloning the <filename>poky</filename> Repository</title>
<para>
To use the Yocto Project, you need a release of the Yocto Project
locally installed on your development system.
The locally installed set of files is referred to as the
<ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
in the Yocto Project documentation.
</para>
<para>
You create your Source Directory by using
<ulink url='&YOCTO_DOCS_REF_URL;#git'>Git</ulink> to clone a local
copy of the upstream <filename>poky</filename> repository.
<note><title>Tip</title>
The preferred method of getting the Yocto Project Source
Directory set up is to clone the repository.
</note>
Working from a copy of the upstream repository allows you
to contribute back into the Yocto Project or simply work with
the latest software on a development branch.
Because Git maintains and creates an upstream repository with
a complete history of changes and you are working with a local
clone of that repository, you have access to all the Yocto
Project development branches and tag names used in the upstream
repository.
</para>
<para>
Follow these steps to create a local version of the
upstream
@@ -897,8 +473,8 @@
branch based on a tag name, see the
"<link linkend='checking-out-by-branch-in-poky'>Checking Out By Branch in Poky</link>"
and
<link linkend='checkout-out-by-tag-in-poky'>Checking Out By Tag in Poky</link>"
sections, respectively.</para>
<link linkend='checkout-out-by-tag-in-poky'>Checking Out By Tag in Poky</link>",
respectively.</para>
<para>Once the repository is created, you can change to
that directory and check its status.
@@ -1059,7 +635,7 @@
<listitem><para>
<emphasis>Checkout the Branch:</emphasis>
<literallayout class='monospaced'>
$ git checkout tags/&DISTRO_REL_TAG; -b my_yocto_&DISTRO;
$ git checkout tags/&DISTRO; -b my_yocto_&DISTRO;
Switched to a new branch 'my_yocto_&DISTRO;'
$ git branch
master
@@ -1080,6 +656,95 @@
</section>
</section>
<section id='performing-a-simple-build'>
<title>Performing a Simple Build</title>
<para>
Several methods exist that allow you to build an image within the
Yocto Project.
This procedure shows how to build an image using BitBake from a
Linux host.
<note><title>Notes</title>
<itemizedlist>
<listitem><para>
For information on how to build an image using
<ulink url='&YOCTO_DOCS_REF_URL;#toaster-term'>Toaster</ulink>,
see the
<ulink url='&YOCTO_DOCS_TOAST_URL;'>Yocto Project Toaster Manual</ulink>.
</para></listitem>
<listitem><para>
For information on how to use
<filename>devtool</filename> to build images, see the
"<ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'>Using <filename>devtool</filename> in Your SDK Workflow</ulink>"
section in the Yocto Project Application Development and
the Extensible Software Development Kit (eSDK) manual.
</para></listitem>
</itemizedlist>
</note>
</para>
<para>
The build process creates an entire Linux distribution from source
and places it in your
<ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>
under <filename>tmp/deploy/images</filename>.
For detailed information on the build process using BitBake, see the
"<ulink url='&YOCTO_DOCS_REF_URL;#images-dev-environment'>Images</ulink>"
section in the Yocto Project Reference Manual.
You can also reference the
"<ulink url='&YOCTO_DOCS_QS_URL;#qs-building-images'>Building Images</ulink>"
section in the Yocto Project Quick Start.
</para>
<para>
The following figure and list overviews the build process:
<imagedata fileref="figures/bitbake-build-flow.png" width="7in" depth="4in" align="center" scalefit="1" />
<orderedlist>
<listitem><para>
<emphasis>Set up Your Host Development System to Support
Development Using the Yocto Project</emphasis>:
See the
"<ulink url='&YOCTO_DOCS_QS_URL;#yp-resources'>Setting Up to Use the Yocto Project</ulink>"
section in the Yocto Project Quick Start for options on how
to get a build host ready to use the Yocto Project.
</para></listitem>
<listitem><para>
<emphasis>Initialize the Build Environment:</emphasis>
Initialize the build environment by sourcing the build
environment script (i.e.
<ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>).
</para></listitem>
<listitem><para>
<emphasis>Make Sure Your <filename>local.conf</filename>
File is Correct:</emphasis>
Ensure the <filename>conf/local.conf</filename> configuration
file, which is found in the
<ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>,
is set up how you want it.
This file defines many aspects of the build environment
including the target machine architecture through the
<filename><ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'>MACHINE</ulink></filename> variable,
the packaging format used during the build
(<ulink url='&YOCTO_DOCS_REF_URL;#var-PACKAGE_CLASSES'><filename>PACKAGE_CLASSES</filename></ulink>),
and a centralized tarball download directory through the
<filename><ulink url='&YOCTO_DOCS_REF_URL;#var-DL_DIR'>DL_DIR</ulink></filename> variable.
</para></listitem>
<listitem><para>
<emphasis>Build the Image:</emphasis>
Build the image using the <filename>bitbake</filename> command.
For example, the following command builds the
<filename>core-image-minimal</filename> image:
<literallayout class='monospaced'>
$ bitbake core-image-minimal
</literallayout>
For information on BitBake, see the
<ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
</para></listitem>
</orderedlist>
</para>
</section>
-->
</chapter>
<!--
vim: expandtab tw=80 ts=4

View File

@@ -101,16 +101,6 @@
<date>October 2017</date>
<revremark>Released with the Yocto Project 2.4 Release.</revremark>
</revision>
<revision>
<revnumber>2.5</revnumber>
<date>May 2018</date>
<revremark>Released with the Yocto Project 2.5 Release.</revremark>
</revision>
<revision>
<revnumber>2.5.1</revnumber>
<date>September 2018</date>
<revremark>The initial document released with the Yocto Project 2.5.1 Release.</revremark>
</revision>
</revhistory>
<copyright>
@@ -133,36 +123,24 @@
is for the &YOCTO_DOC_VERSION; release of the
Yocto Project.
To be sure you have the latest version of the manual
for this release, go to the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>
and select the manual from that site.
Manuals from the site are more up-to-date than manuals
derived from the Yocto Project released TAR files.
for this release, use the manual from the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>.
</para></listitem>
<listitem><para>
If you located this manual through a web search, the
version of the manual might not be the one you want
(e.g. the search might have returned a manual much
older than the Yocto Project version with which you
are working).
You can see all Yocto Project major releases by
visiting the
<ulink url='&YOCTO_WIKI_URL;/wiki/Releases'>Releases</ulink>
page.
If you need a version of this manual for a different
Yocto Project release, visit the
For manuals associated with other releases of the Yocto
Project, go to the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>
and select the manual set by using the
"ACTIVE RELEASES DOCUMENTATION" or "DOCUMENTS ARCHIVE"
pull-down menus.
and use the drop-down "Active Releases" button
and choose the manual associated with the desired
Yocto Project.
</para></listitem>
<listitem><para>
To report any inaccuracies or problems with this
manual, send an email to the Yocto Project
discussion group at
<filename>yocto@yoctoproject.com</filename> or log into
the freenode <filename>#yocto</filename> channel.
</para></listitem>
To report any inaccuracies or problems with this
manual, send an email to the Yocto Project
discussion group at
<filename>yocto@yoctoproject.com</filename> or log into
the freenode <filename>#yocto</filename> channel.
</para></listitem>
</itemizedlist>
</note>
</legalnotice>
@@ -173,6 +151,8 @@
<xi:include href="dev-manual-start.xml"/>
<xi:include href="dev-manual-newbie.xml"/>
<xi:include href="dev-manual-common-tasks.xml"/>
<xi:include href="dev-manual-qemu.xml"/>

View File

@@ -21,7 +21,7 @@
<para>
Kernel Metadata exists in many places.
One area in the Yocto Project
<ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
<ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
is the <filename>yocto-kernel-cache</filename> Git repository.
You can find this repository grouped under the "Yocto Linux Kernel"
heading in the
@@ -64,7 +64,8 @@
<ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>
variable.
This variable is typically set to the same value as the
<filename>MACHINE</filename> variable, which is used by
<ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
variable, which is used by
<ulink url='&YOCTO_DOCS_REF_URL;#bitbake-term'>BitBake</ulink>.
However, in some cases, the variable might instead refer to the
underlying platform of the <filename>MACHINE</filename>.
@@ -76,7 +77,8 @@
Multiple Corei7-based BSPs could share the same "intel-corei7-64"
value for <filename>KMACHINE</filename>.
It is important to realize that <filename>KMACHINE</filename> is
just for kernel mapping, while <filename>MACHINE</filename>
just for kernel mapping, while
<ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink>
is the machine type within a BSP Layer.
Even with this distinction, however, these two variables can hold
the same value.
@@ -114,7 +116,8 @@
used in assembling the configuration.
If you do not specify a <filename>LINUX_KERNEL_TYPE</filename>,
it defaults to "standard".
Together with <filename>KMACHINE</filename>,
Together with
<ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>,
<filename>LINUX_KERNEL_TYPE</filename> defines the search
arguments used by the kernel tools to find the
appropriate description within the kernel Metadata with which to
@@ -628,10 +631,8 @@
<note>
For BSPs supported by the Yocto Project, the BSP description
files are located in the <filename>bsp</filename> directory
of the
<ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/yocto-kernel-cache/tree/bsp'><filename>yocto-kernel-cache</filename></ulink>
repository organized under the "Yocto Linux Kernel" heading
in the
of the <filename>yocto-kernel-cache</filename> repository
organized under the "Yocto Linux Kernel" heading in the
<ulink url='http://git.yoctoproject.org/cgit/cgit.cgi'>Yocto Project Source Repositories</ulink>.
</note>
</para>
@@ -640,30 +641,27 @@
This section overviews the BSP description structure, the
aggregation concepts, and presents a detailed example using
a BSP supported by the Yocto Project (i.e. BeagleBone Board).
For complete information on BSP layer file hierarchy, see the
<ulink url='&YOCTO_DOCS_BSP_URL;'>Yocto Project Board Support Package (BSP) Developer's Guide</ulink>.
</para>
<section id='bsp-description-file-overview'>
<title>Overview</title>
<para>
For simplicity, consider the following root BSP layer
For simplicity, consider the following top-level BSP
description files for the BeagleBone board.
These files employ both a structure and naming convention
for consistency.
Top-level BSP descriptions files employ both a structure
and naming convention for consistency.
The naming convention for the file is as follows:
<literallayout class='monospaced'>
<replaceable>bsp_root_name</replaceable>-<replaceable>kernel_type</replaceable>.scc
<replaceable>bsp_name</replaceable>-<replaceable>kernel_type</replaceable>.scc
</literallayout>
Here are some example root layer BSP filenames for the
Here are some example top-level BSP filenames for the
BeagleBone Board BSP, which is supported by the Yocto Project:
<literallayout class='monospaced'>
beaglebone-standard.scc
beaglebone-preempt-rt.scc
</literallayout>
Each file uses the root name (i.e "beaglebone") BSP name
followed by the kernel type.
Each file uses the BSP name followed by the kernel type.
</para>
<para>
@@ -852,7 +850,7 @@
<para>
Now consider the "minnow" description for the "tiny" kernel
type (i.e. <filename>minnow-tiny.scc</filename>):
type (i.e. <filename>minnow-tiny.scc</filename>:
<literallayout class='monospaced'>
define KMACHINE minnow
define KTYPE tiny
@@ -1014,7 +1012,8 @@
<para>
If you modify the Metadata, you must not forget to update the
<filename>SRCREV</filename> statements in the kernel's recipe.
<ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>
statements in the kernel's recipe.
In particular, you need to update the
<filename>SRCREV_meta</filename> variable to match the commit in
the <filename>KMETA</filename> branch you wish to use.
@@ -1222,13 +1221,9 @@
</para></listitem>
<listitem><para>
<filename>define</filename>:
Defines variables, such as
<ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>,
<ulink url='&YOCTO_DOCS_REF_URL;#var-KTYPE'><filename>KTYPE</filename></ulink>,
<ulink url='&YOCTO_DOCS_REF_URL;#var-KARCH'><filename>KARCH</filename></ulink>,
and
<ulink url='&YOCTO_DOCS_REF_URL;#var-KFEATURE_DESCRIPTION'><filename>KFEATURE_DESCRIPTION</filename></ulink>.
</para></listitem>
Defines variables, such as <filename>KMACHINE</filename>,
<filename>KTYPE</filename>, <filename>KARCH</filename>,
and <filename>KFEATURE_DESCRIPTION</filename>.</para></listitem>
<listitem><para>
<filename>include SCC_FILE</filename>:
Includes an SCC file in the current file.

View File

@@ -25,7 +25,7 @@
Before you can do any kernel development, you need to be
sure your build host is set up to use the Yocto Project.
For information on how to get set up, see the
"<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-the-development-host-to-use-the-yocto-project'>Preparing the Build Host</ulink>"
"<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-the-development-host-to-use-the-yocto-project'>Setting Up to Use the Yocto Project</ulink>"
section in the Yocto Project Development Tasks Manual.
Part of preparing the system is creating a local Git
repository of the
@@ -79,7 +79,7 @@
</literallayout>
<note>
The previous commands assume the
<ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
<ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
(i.e. <filename>poky</filename>) have been cloned
using Git and the local repository is named
"poky".
@@ -136,7 +136,7 @@
Developer's Guide, respectively.
For information on how to use the
<filename>bitbake-layers create-layer</filename>
command to quickly set up a layer, see the
command, see the
"<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
section in the Yocto Project Development Tasks
Manual.
@@ -303,7 +303,7 @@
</literallayout>
<note>
The previous commands assume the
<ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
<ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
(i.e. <filename>poky</filename>) have been cloned
using Git and the local repository is named
"poky".
@@ -360,7 +360,7 @@
Developer's Guide, respectively.
For information on how to use the
<filename>bitbake-layers create-layer</filename>
command to quickly set up a layer, see the
command, see the
"<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
section in the Yocto Project Development Tasks
Manual.
@@ -387,7 +387,7 @@
You can find Git repositories of supported Yocto Project
kernels organized under "Yocto Linux Kernel" in the
Yocto Project Source Repositories at
<ulink url='&YOCTO_GIT_URL;'></ulink>.
<ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink>.
</para>
<para>
@@ -489,8 +489,7 @@
See the
"<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
section in the Yocto Project Development Tasks Manual for
information on how to use this script to quick set up a
new layer.
information on how to use this script.
</note>
</para>
@@ -1225,6 +1224,18 @@
the
"<link linkend='getting-ready-for-traditional-kernel-development'>Getting Ready for Traditional Kernel Development</link>"
Section.
</para>
<para>
Although this example uses Git and shell commands to generate the
patch, you could use the <filename>yocto-kernel</filename> script
found in the <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
under <filename>scripts</filename> to add and manage kernel
patches and configuration.
See the "<ulink url='&YOCTO_DOCS_BSP_URL;#managing-kernel-patches-and-config-items-with-yocto-kernel'>Managing kernel Patches and Config Items with yocto-kernel</ulink>"
section in the Yocto Project Board Support Packages (BSP)
Developer's Guide for more information on the
<filename>yocto-kernel</filename> script.
<orderedlist>
<listitem><para>
<emphasis>Edit the Source Files</emphasis>
@@ -1402,9 +1413,9 @@
SRC_URI_append = " file://0001-calibrate.c-Added-some-printk-statements.patch"
</literallayout>
The
<ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
<ulink url='&YOCTO_DOCS_REF_URL;var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
and
<ulink url='&YOCTO_DOCS_REF_URL;#var-SRC_URI'><filename>SRC_URI</filename></ulink>
<ulink url='&YOCTO_DOCS_REF_URL;var-SRC_URI'><filename>SRC_URI</filename></ulink>
statements enable the OpenEmbedded build system to find
the patch file.</para>
@@ -1603,11 +1614,8 @@
<title>Creating a&nbsp;&nbsp;<filename>defconfig</filename> File</title>
<para>
A <filename>defconfig</filename> file in the context of
the Yocto Project is often a <filename>.config</filename>
file that is copied from a build or a
<filename>defconfig</filename> taken from the kernel tree
and moved into recipe space.
A <filename>defconfig</filename> file is simply a
<filename>.config</filename> renamed to "defconfig".
You can use a <filename>defconfig</filename> file
to retain a known set of kernel configurations from which the
OpenEmbedded build system can draw to create the final
@@ -1659,7 +1667,7 @@
after applying the existing defconfig file configurations.
</note>
For more information on configuring the kernel, see the
"<link linkend='changing-the-configuration'>Changing the Configuration</link>"
"<link link='changing-the-configuration'>Changing the Configuration</link>"
section.
</para>
</section>
@@ -2421,7 +2429,7 @@
modules.
If your module <filename>Makefile</filename> uses a different
variable, you might want to override the
<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile</filename></ulink>
<ulink url='&YOCTO_DOCS_REF_URL;#ref-tasks-compile'><filename>do_compile()</filename></ulink>
step, or create a patch to
the <filename>Makefile</filename> to work with the more typical
<filename>KERNEL_SRC</filename> or
@@ -2497,7 +2505,7 @@
the Git commands.
You can see the branch names through the web interface
to the Yocto Project source repositories at
<ulink url='&YOCTO_GIT_URL;'></ulink>.
<ulink url='http://git.yoctoproject.org/cgit.cgi'></ulink>.
</note>
To see a full range of the changes, use the
<filename>git whatchanged</filename> command and specify a

View File

@@ -49,7 +49,7 @@
<para>
You can find a web interface to the Yocto Linux kernels in the
<ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
<ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
at
<ulink url='&YOCTO_GIT_URL;'></ulink>.
If you look at the interface, you will see to the left a
@@ -239,9 +239,8 @@
<ulink url='http://git-scm.com/documentation'></ulink>.
You can also get an introduction to Git as it
applies to the Yocto Project in the
"<ulink url='&YOCTO_DOCS_OM_URL;#git'>Git</ulink>"
section in the Yocto Project Overview and Concepts
Manual.
"<ulink url='&YOCTO_DOCS_REF_URL;#git'>Git</ulink>"
section in the Yocto Project Reference Manual.
The latter reference provides an overview of
Git and presents a minimal set of Git commands
that allows you to be functional using Git.
@@ -382,7 +381,7 @@
generic kernel just for conceptual purposes.
Also keep in mind that this structure represents the Yocto
Project
<ulink url='&YOCTO_DOCS_OM_URL;#source-repositories'>Source Repositories</ulink>
<ulink url='&YOCTO_DOCS_REF_URL;#source-repositories'>Source Repositories</ulink>
that are either pulled from during the build or established
on the host development system prior to the build by either
cloning a particular kernel's Git repository or by

View File

@@ -108,11 +108,7 @@
review and understand the following documentation:
<itemizedlist>
<listitem><para>
<ulink url='&YOCTO_DOCS_BRIEF_URL;'>Yocto Project Quick Build</ulink>
document.
</para></listitem>
<listitem><para>
<ulink url='&YOCTO_DOCS_OM_URL;'>Yocto Project Overview and Concepts Manual</ulink>.
<ulink url='&YOCTO_DOCS_QS_URL;'>Yocto Project Quick Start</ulink>
</para></listitem>
<listitem><para>
<ulink url='&YOCTO_DOCS_SDK_URL;#using-devtool-in-your-sdk-workflow'><filename>devtool</filename> workflow</ulink>
@@ -131,6 +127,18 @@
</para></listitem>
</itemizedlist>
</para>
<para>
Finally, while this document focuses on the manual creation of
recipes, patches, and configuration files, the Yocto Project
Board Support Package (BSP) tools are available to automate
this process with existing content and work well to create the
initial framework and boilerplate code.
For details on these tools, see the
"<ulink url='&YOCTO_DOCS_BSP_URL;#using-the-yocto-projects-bsp-tools'>Using the Yocto Project's BSP Tools</ulink>"
section in the Yocto Project Board Support Package (BSP) Developer's
Guide.
</para>
</section>
<section id='kernel-modification-workflow'>
@@ -157,15 +165,12 @@
<para>
<orderedlist>
<listitem><para>
<emphasis>Set up Your Host Development System to Support
Development Using the Yocto Project</emphasis>:
<emphasis>Set Up Your Host Development System to Support
Development Using the Yocto Project:</emphasis>
See the
"<ulink url='&YOCTO_DOCS_DEV_URL;#dev-manual-start'>Setting Up the Development Host to Use the Yocto Project</ulink>"
section in the Yocto Project Development Tasks Manual for
options on how to get a build host ready to use the Yocto
Project.
"<ulink url='&YOCTO_DOCS_QS_URL;#yp-resources'>Setting Up to Use the Yocto Project</ulink>"
section in the Yocto Project Quick Start for options on how
to get a build host ready to use the Yocto Project.
</para></listitem>
<listitem><para>
<emphasis>Set Up Your Host Development System for Kernel Development:</emphasis>
@@ -238,7 +243,11 @@
<para>Additionally, if you are working in a BSP layer
and need to modify the BSP's kernel's configuration,
you can use <filename>menuconfig</filename>.
you can use the
<ulink url='&YOCTO_DOCS_BSP_URL;#managing-kernel-patches-and-config-items-with-yocto-kernel'><filename>yocto-kernel</filename></ulink>
script as well as <filename>menuconfig</filename>.
The <filename>yocto-kernel</filename> script lets
you interactively set up kernel configurations.
</para></listitem>
<listitem><para>
<emphasis>Rebuild the Kernel Image With Your Changes:</emphasis>

View File

@@ -14,7 +14,7 @@
create Yocto Linux kernel repositories.
These kernel repositories are found under the heading "Yocto Linux
Kernel" at
<ulink url='&YOCTO_GIT_URL;'>&YOCTO_GIT_URL;</ulink>
<ulink url='&YOCTO_GIT_URL;/cgit.cgi'>&YOCTO_GIT_URL;/cgit.cgi</ulink>
and are shipped as part of a Yocto Project release.
The team creates these repositories by compiling and executing the
set of feature descriptions for every BSP and feature in the
@@ -118,13 +118,13 @@
The following steps describe what happens when the Yocto Project
Team constructs the Yocto Project kernel source Git repository
(or tree) found at
<ulink url='&YOCTO_GIT_URL;'></ulink> given the
<ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink> given the
introduction of a new top-level kernel feature or BSP.
The following actions effectively provide the Metadata
and create the tree that includes the new feature, patch, or BSP:
These are the actions that effectively provide the Metadata
and create the tree that includes the new feature, patch or BSP:
<orderedlist>
<listitem><para>
<emphasis>Pass Feature to the OpenEmbedded Build System:</emphasis>
<emphasis>Pass Feature to Build Subsystem:</emphasis>
A top-level kernel feature is passed to the kernel build
subsystem.
Normally, this feature is a BSP for a particular kernel
@@ -138,10 +138,8 @@
<listitem><para>
The in-tree kernel-cache directories, which are
located in the
<ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/yocto-kernel-cache/tree/bsp'><filename>yocto-kernel-cache</filename></ulink>
repository organized under the "Yocto Linux Kernel"
heading in the
<ulink url='http://git.yoctoproject.org/cgit/cgit.cgi'>Yocto Project Source Repositories</ulink>.
<filename>yocto-kernel-cache</filename>
repository
</para></listitem>
<listitem><para>
Areas pointed to by <filename>SRC_URI</filename>
@@ -150,11 +148,9 @@
</itemizedlist>
For a typical build, the target of the search is a
feature description in an <filename>.scc</filename> file
whose name follows this format (e.g.
<filename>beaglebone-standard.scc</filename> and
<filename>beaglebone-preempt-rt.scc</filename>):
whose name follows this format:
<literallayout class='monospaced'>
<replaceable>bsp_root_name</replaceable>-<replaceable>kernel_type</replaceable>.scc
<replaceable>bsp_name</replaceable>-<replaceable>kernel_type</replaceable>.scc
</literallayout>
</para></listitem>
<listitem><para>
@@ -217,7 +213,7 @@
end of an existing branch.
The full repository generation that is found in the
official Yocto Project kernel repositories at
<ulink url='&YOCTO_GIT_URL;'>http://git.yoctoproject.org</ulink>
<ulink url='&YOCTO_GIT_URL;/cgit.cgi'>http://git.yoctoproject.org/cgit.cgi</ulink>
is the combination of all supported boards and
configurations.
</para></listitem>
@@ -231,7 +227,7 @@
</para></listitem>
<listitem><para>
The full kernel tree that you see on
<ulink url='&YOCTO_GIT_URL;'></ulink> is
<ulink url='&YOCTO_GIT_URL;/cgit.cgi'></ulink> is
generated through repeating the above steps for all
valid BSPs.
The end result is a branched, clean history tree that

View File

@@ -86,16 +86,6 @@
<date>October 2017</date>
<revremark>Released with the Yocto Project 2.4 Release.</revremark>
</revision>
<revision>
<revnumber>2.5</revnumber>
<date>May 2018</date>
<revremark>Released with the Yocto Project 2.5 Release.</revremark>
</revision>
<revision>
<revnumber>2.5.1</revnumber>
<date>September 2018</date>
<revremark>The initial document released with the Yocto Project 2.5.1 Release.</revremark>
</revision>
</revhistory>
<copyright>
@@ -116,36 +106,24 @@
is for the &YOCTO_DOC_VERSION; release of the
Yocto Project.
To be sure you have the latest version of the manual
for this release, go to the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>
and select the manual from that site.
Manuals from the site are more up-to-date than manuals
derived from the Yocto Project released TAR files.
for this release, use the manual from the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>.
</para></listitem>
<listitem><para>
If you located this manual through a web search, the
version of the manual might not be the one you want
(e.g. the search might have returned a manual much
older than the Yocto Project version with which you
are working).
You can see all Yocto Project major releases by
visiting the
<ulink url='&YOCTO_WIKI_URL;/wiki/Releases'>Releases</ulink>
page.
If you need a version of this manual for a different
Yocto Project release, visit the
For manuals associated with other releases of the Yocto
Project, go to the
<ulink url='&YOCTO_HOME_URL;/documentation'>Yocto Project documentation page</ulink>
and select the manual set by using the
"ACTIVE RELEASES DOCUMENTATION" or "DOCUMENTS ARCHIVE"
pull-down menus.
and use the drop-down "Active Releases" button
and choose the manual associated with the desired
Yocto Project.
</para></listitem>
<listitem><para>
To report any inaccuracies or problems with this
manual, send an email to the Yocto Project
discussion group at
<filename>yocto@yoctoproject.com</filename> or log into
the freenode <filename>#yocto</filename> channel.
</para></listitem>
To report any inaccuracies or problems with this
manual, send an email to the Yocto Project
discussion group at
<filename>yocto@yoctoproject.com</filename> or log into
the freenode <filename>#yocto</filename> channel.
</para></listitem>
</itemizedlist>
</note>
</legalnotice>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

After

Width:  |  Height:  |  Size: 136 KiB

BIN
documentation/mega-manual/figures/sdk-generation.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Some files were not shown because too many files have changed in this diff Show More