[yocto] how to organize my patches for multiple kernels and multiple target boards?

Bruce Ashfield bruce.ashfield at windriver.com
Wed Mar 2 13:46:13 PST 2016


On 2016-03-02 10:41 AM, Robert P. J. Day wrote:
> Quoting Bruce Ashfield <bruce.ashfield at windriver.com>:
>
>> On 16-03-01 05:44 AM, Robert P. J. Day wrote:
>
>>>   also, once a .scc file is located, will the location of the listed
>>> .cfg and .patch/.diff files inside it start a whole new search process
>>> based on FILESEXTRAPATHS and FILESOVERRIDES?
>
>> The search path is created relative to the .scc file that is referencing
>> a patch, and across any directory that has a .scc file in the SRC_URI.
>> The .scc feature descriptions are self contained, hence "reaching
>> outside"
>> to a parent, or other directory structure isn't a good thing. Just list
>> things on the SRC_URI if that is required.
>
>    one more question, if i might, as i'm still unclear on what flexibility
> i have with finding .cfg or .patch files from a .scc file.
>
>    imagine i have a number of kernel .bbappend files and corresponding
> patch directories:
>
>    * linux-4.0.bbappend and linux-4.0/
>    * linux-4.1.bbappend and linux-4.1/
>    * linux-4.2.bbappend and linux-4.2/
>
> and so on, as well as wanting to refer to five machines, "m1" through
> "m5". consider the following possibility related specifically to
> kernel version 4.1:
>
>    linux-4.1/
>      rday.scc
>      1.patch
>      2.patch
>      3.patch
>      4.patch
>      m3/
>        4.patch
>
> so imagine my linux-4.1.bbappend file does SRC_URI += "rday.scc" --
> when i do a build for kernel 4.1, the search process should locate
> the rday.scc file in linux-4.1/ (as long as i have no other
> higher-priority FILESOVERRIDES that get in the way, of course).
>
>    now if rday.scc contains references to all four patches and i'm
> building for, say, machine "m1", it makes sense that all four
> of those patches directly under linux-4.1/ will be the ones
> included, correct?

Correct. Assuming rday.scc and the patch files are all within that
directory, it would be:

patch 1.patch
patch 2.patch
... etc.

And that would find the ones local to the .scc file.

>
>    but if, instead, i was building for machine "m3", as you can
> see, it would be nice if the FILESOVERRIDES feature would kick in
> and select the machine-specific patch "m3/4.patch. so all of the
> regular patches would be used, *unless* i was building for m3,
> at which point the patch m3/4.patch would override the "generic"
> 4.patch. (the same logic would apply to .cfg files, too, of course.)
>
>    is that what would happen? better yet, is that anything i
> should even be contemplating? it's not as if i need that feature
> right this instant, but it would be nice to know it's available
> just in case.

That doesn't happen. Since the searching for patches is not tied
to the fetcher searching and ordering directly.

You can switch on matchines within a .scc file, but that's not
really all that common.

>
>    even weirder, could i get away with something like this?
>
>    linux-4.1/
>      rday.scc
>      1.patch
>      2.patch
>      3.patch
>      4.patch
>      m3/
>        rday.scc
>        4.patch
>
> once again, my .bbappend file would "SRC_URI += rday.scc", and if
> i'm building for kernel 4.1, it should find the one directly under
> linux-4.1/, *unless* my target machine is "m3", at which point
> the file m3/rday.scc would take precedence, which would pick up
> the specific patch file m3/4.patch, but would use the higher-level
> generic patch files for all others.


Assuming the fetch found m3/rday.scc in the search paths first, it
would be the one selected.

But then the patch references would be relative to m3/, so you wouldn't
even find "patch 1.patch", etc.


The way this is typically configured if you aren't using a kernel-cache
structure is:

  linux-<foo>/
      machine-type1.scc
      machine-type2.scc
      machine-type3.scc
      common/
        1.patch
        2.patch
        3.patch
        4.patch
       type3/
        4.patch

And then you select the one that matches in your SRC_URI, or if the
.scc files have: "define KMACHINE type1", and you put them ALL on
the SRC_URI, the system will actually pick only the one that
matches the set $MACHINE.

 From there, that matching .scc file does all it's own includes of
patches and configuration blocks, etc.

Bruce

>
>    the first case i think has value and i'd like to know how to do
> it; the second case is admittedly weirder and i'm not sure i
> want to defend even *trying* to do it, but i figured i'd ask.
>
> rday
>
>




More information about the yocto mailing list