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

Paul Barker paul at betafive.co.uk
Sat Mar 9 22:09:59 UTC 2019


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?

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.

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


More information about the Openembedded-core mailing list