[OE-core] [PATCH 1/6] kernel-yocto: allow kernel-meta repositories to be patched

Bruce Ashfield bruce.ashfield at gmail.com
Mon Mar 11 03:14:19 UTC 2019


On Sun, Mar 10, 2019 at 10:35 PM Bruce Ashfield
<bruce.ashfield at gmail.com> wrote:
>
> On Sat, Mar 9, 2019 at 5:10 PM Paul Barker <paul at betafive.co.uk> wrote:
> >
> > On 06/03/2019 16:37, bruce.ashfield at gmail.com wrote:
> > > From: Bruce Ashfield <bruce.ashfield at gmail.com>
> > >
> > > For testing purposes, it is often easier to patch a fragment
> > > in a kernel-meta repository versus needing to make a copy or
> > > modify the source repository.
> > >
> > > We can allow this sort of patching when a patchdir of kernel-meta
> > > is passed (to indicate the nested kernel-meta repository).
> > >
> > > Also note that we must patch the meta data before they are
> > > processed/gathered, since migrated copies to the kernel source
> > > directory will be used later.
> > >
> > > Signed-off-by: Bruce Ashfield <bruce.ashfield at gmail.com>
> > > ---
> > >   meta/classes/kernel-yocto.bbclass | 29 +++++++++++++++++++++++++----
> > >   1 file changed, 25 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/meta/classes/kernel-yocto.bbclass b/meta/classes/kernel-yocto.bbclass
> > > index 496c8a7f68..d2b194dd55 100644
> > > --- a/meta/classes/kernel-yocto.bbclass
> > > +++ b/meta/classes/kernel-yocto.bbclass
> > > @@ -5,12 +5,21 @@ PATCH_GIT_USER_NAME ?= "OpenEmbedded"
> > >
> > >   # returns local (absolute) path names for all valid patches in the
> > >   # src_uri
> > > -def find_patches(d):
> > > +def find_patches(d,subdir):
> > >       patches = src_patches(d)
> > >       patch_list=[]
> > >       for p in patches:
> > > -        _, _, local, _, _, _ = bb.fetch.decodeurl(p)
> > > -        patch_list.append(local)
> > > +        _, _, local, _, _, parm = bb.fetch.decodeurl(p)
> > > +        # if patchdir has been passed, we won't be able to apply it so skip
> > > +        # the patch for now, and special processing happens later
> > > +        patchdir = ''
> > > +        if "patchdir" in parm:
> > > +            patchdir = parm["patchdir"]
> > > +        if patchdir:
> >
> > Did you mean 'if subdir:' here?
>
> Nope. I did mean if patchdir: here, that doesn't mean it is working perfectly,
> but I did definitely mean patchdir.
>
> >
> > I'm seeing duplicate attempts to apply a patch listed on SRC_URI in the
> > linux-raspberrypi_4.14.bb recipe from meta-raspberrypi. The first
> > attempt is in do_kernel_metadata and this succeeds, the second is in
> > do_patch and this fails as the patch has already been applied.
>
> Hmm. The only thing that should be patchable in the meta data
> gathering is the meta data. Not the kernel source tree. It is just
> there as a rough debug / devel trigger. kernel-meta is a separate
> repo, so patches are only applied there.
>
> Something that triggers in do_patch can't be patching that same
> repo, since the kernel tree is separate ..
>
> Is the raspberrypi recipe using the upstream kernel-cache repo
> or is it doing something else ?
>
> Is it also using patches with patchdir specified in the src_uri ?
> If it isn't, I can't see how any of this is triggering.
>
> I'm out of the office this week, but this is something I can sort
> out .. can you send me the exact set of layers (and any
> local.conf I'd need) to trigger this ? I'll have some time tomorrow
> night to poke at it a bit.

I just did a build with meta-raspberrypi and did recreate the issue,
I'll have a look at see what I can do. I'll need to test some other
use cases against any changes I make, so it'll be a bit touchy :P

Bruce

>
> Bruce
>
> >
> > In this case, patchdir = '' as there is no patchdir set for this in the
> > recipe. The patch is still picked up when find_patches() is called with
> > subdir='kernel-meta' since the test here is false and the comparison
> > below is not performed.
> >
> > > +            if subdir == patchdir:
> > > +                patch_list.append(local)
> > > +        else:
> > > +            patch_list.append(local)
> > >
> > >       return patch_list
> > >
> > > @@ -119,8 +128,20 @@ do_kernel_metadata() {
> > >               fi
> > >       fi
> > >
> > > +     # was anyone trying to patch the kernel meta data ?, we need to do
> > > +     # this here, since the scc commands migrate the .cfg fragments to the
> > > +     # kernel source tree, where they'll be used later.
> > > +     check_git_config
> > > +     patches="${@" ".join(find_patches(d,'kernel-meta'))}"
> > > +     for p in $patches; do
> > > +         (
> > > +             cd ${WORKDIR}/kernel-meta
> > > +             git am -s $p
> > > +         )
> > > +     done
> > > +
> > >       sccs_from_src_uri="${@" ".join(find_sccs(d))}"
> > > -     patches="${@" ".join(find_patches(d))}"
> > > +     patches="${@" ".join(find_patches(d,''))}"
> > >       feat_dirs="${@" ".join(find_kernel_feature_dirs(d))}"
> > >
> > >       # a quick check to make sure we don't have duplicate defconfigs
> > >
> >
> > --
> > Paul Barker
> > Beta Five Ltd
>
>
>
> --
> - Thou shalt not follow the NULL pointer, for chaos and madness await
> thee at its end
> - "Use the force Harry" - Gandalf, Star Trek II



-- 
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II


More information about the Openembedded-core mailing list