[yocto] How do I patch the kernel before it is built?

autif khan autif.mlist at gmail.com
Mon Feb 6 14:10:14 PST 2012


\>>>>>>>>> I could not find a way to patch the kernel source before its is
>>>>>>>>> built.
>>>>>>>>>
>>>>>>>>> I promise to update the Yocto wiki's How do I section when I have a
>>>>>>>>> working solution for the following :-)
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> This should be covered in the existing documentation and also the
>>>>>>>> more general bitbake/oe-core docs.
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Here is what I am trying to do:
>>>>>>>>>
>>>>>>>>> 1) Patch the kernel (add VID/PID to hid_ignore_list in
>>>>>>>>> drivers/hid/hid-core.c and also to add the VID/PID to .h file)
>>>>>>>>> 2) Build the kernel - no change here - standard kernel build
>>>>>>>>> 3) Build a kernel module
>>>>>>>>>
>>>>>>>>> I have a meta layer where I am keeping my changes. I am guessing
>>>>>>>>> that
>>>>>>>>> I need to:
>>>>>>>>>
>>>>>>>>> a) write a bbappend file to accomplish #1
>>>>>>>>> b) write a recipe to accomplish #3
>>>>>>>>>
>>>>>>>>> I have written recipes before, but just for libraries and autotools
>>>>>>>>> based applications. Not for a kernel module. If there is a recipe
>>>>>>>>> out
>>>>>>>>> there for some other module, I would be happy to steal from it.
>>>>>>>>>
>>>>>>>>> Please advise how I can go about patching the kernel and if there
>>>>>>>>> is
>>>>>>>>> a
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> It's just like any other package. If your changes are simple, then
>>>>>>>> generating patches and putting them on the SRC_URI via a bbappend in
>>>>>>>> your layer is all you need. If you have complex changes, there are
>>>>>>>> options
>>>>>>>> to manage them via git or via feature descriptions.
>>>>>>
>>>>>>
>>>>>>
>>>>>> I tried this - attached at the end of this email are my bbappend file
>>>>>> and my patches, when the recipe is bitbaked, it does not actually
>>>>>> apply the patch.
>>>>>>
>>>>>> On a similar note - there seems to be a file in
>>>>>> meta/recipes-kernel/linux/linux-yocto called
>>>>>> tools-perf-no-scripting.patch
>>>>>>
>>>>>> However, it does not seem to be used anywhere - is this just crud or I
>>>>>> am missing something? I was hoping to cheat off of the recipe that
>>>>>> uses it.
>>>>>>
>>>>>>>>> recipe for a kernel module - please point me to it.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Darren validated and updated the kernel module example, so he'd
>>>>>>>> probably
>>>>>>>> got this closer at hand than I do.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> See the hello-mod example under meta/recipes-kernel/hello-mod
>>>>>>
>>>>>>
>>>>>>
>>>>>> Thank you for this recipe - it seems like this is exactly what I was
>>>>>> looking for. I will cheat off of this as soon as I can patch my
>>>>>> kernel.
>>>>>>
>>>>>>
>>>>>> R E C I P E
>>>>>>
>>>>>> autif at fpbm:~/data/yocto/poky-edison-6.0/meta-koko/recipes/linux$ cat
>>>>>> linux-yocto_3.0.bbappend
>>>>>> FILESEXTRAPATHS_prepend := "${THISDIR}:"
>>>>>> SRC_URI += " file://linux/drivers/hid/hid-core.c.diff \
>>>>>>             file://linux/drivers/hid/hid-ids.h.diff "
>>>>>> PR = "r3"
>>>>>> autif at fpbm:~/data/yocto/poky-edison-6.0/meta-koko/recipes/linux$
>>>>>>
>>>>>> P A T C H
>>>>>>
>>>>>>
>>>>>>
>>>>>> autif at fpbm:~/data/yocto/poky-edison-6.0/meta-koko/recipes/linux/linux/drivers/hid$
>>>>>
>>>>>
>>>>>
>>>>> Taking a look at this (while I was cutting and pasting), this should
>>>>> be in in the
>>>>> a 'linux-yocto' subdirectory if you want bitbake to pickup the patch
>>>>> and
>>>>> make it
>>>>> available to the linux-yocto recipe.
>>>>>
>>>>> i.e.
>>>>>
>>>>> ~/data/yocto/poky-edison-6.0/meta-koko/recipes/linux/linux-yocto/drivers/hid
>>>>>
>>>>> And don't use 'linux-yocto' in your file:// reference on the SRC_URI,
>>>>> that part is
>>>>> automatic.
>>>>
>>>>
>>>>
>>>> I tried this just now - here is what happens:
>>>>
>>>> Case - patch is in linux/linux-yocto/drivers/hid, SRC_URI ref is
>>>> file://drivers/hid/file.diff
>>>> Result: Fetcher failure for URL: 'file://drivers/hid/hid-core.c.diff
>>>
>>>
>>>
>>> If you get a fetcher failire, you have it in the wrong place.
>>>
>>> Note: this has nothing to do with the kernel and is a general
>>> bitbake/oe-core question.
>>>
>>>
>>>>
>>>> Case - patch is in linux/linux-yocto/drivers/hid, SRC_URI ref is
>>>> file://linux-yocto/drivers/hid/file.diff
>>>
>>>
>>>
>>> Interesting. I've never had to specify linux-yocto in my SRC_URIs,
>>> so something strange it going on here.
>>>
>>> Does anyone else have ideas here ?
>>>
>>>
>>>
>>>> Result - my diff files are copied in a directory called linux-yocto in
>>>>
>>>>
>>>> tmp/work/crownbay-poky-linux/linux-yocto-3.0.4+git1+d05450e4aef02c1b7137398ab3a9f8f96da74f52_1+2247da9131ea7e46ed4766a69bb1353dba22f873-r3
>>>>
>>>> These patches are not applied in
>>>>
>>>>
>>>> tmp/work/crownbay-poky-linux/linux-yocto-3.0.4+git1+d05450e4aef02c1b7137398ab3a9f8f96da74f52_1+2247da9131ea7e46ed4766a69bb1353dba22f873-r3/linux
>>>>
>>>> Here is what the work directory looks like
>>>>
>>>>
>>>>
>>>> autif at fpbm:~/ssd/minimal/tmp/work/crownbay-poky-linux/linux-yocto-3.0.4+git1+d05450e4aef02c1b7137398ab3a9f8f96da74f52_1+2247da9131ea7e46ed4766a69bb1353dba22f873-r3$
>>>> ls
>>>> git  license-destdir  linux  linux-crownbay-standard-build  linux-yocto
>>>>  temp
>>>>
>>>>
>>>> autif at fpbm:~/ssd/minimal/tmp/work/crownbay-poky-linux/linux-yocto-3.0.4+git1+d05450e4aef02c1b7137398ab3a9f8f96da74f52_1+2247da9131ea7e46ed4766a69bb1353dba22f873-r3$
>>>>
>>>>
>>>> I have attached the original set of files as a tar gzip.
>>>
>>>
>>>
>>> I'll take them for a spin.
>>>
>>>
>>>>
>>>>> (and yes, I see 'edison' was the branch now)
>>>>
>>>>
>>>>
>>>> Yes, I am using Yocto 1.0 - very soon I will migrate to M2 - pending
>>>> tasks at hand :-)
>>>
>>>
>>>
>>> I'll have to dig up a 1.0 tree, since I don't have anything of that
>>> vintage available to me.
>>>
>>> But I know that patched worked then, and am absolutely sure that it
>>> works in 1.1 and master.
>>
>>
>> OK, I switched to M2 release and now, I have a different error:
>>
>> Case - diff files are in recipes/linux/linux-yocto, SRC_URI is
>> file://drivers/hid/hid-core.c.diff
>> Result - ERROR: Function 'Fetcher failure for URL:
>> 'file://drivers/hid/hid-core.c.diff'. Unable to fetch URL
>> file://drivers/hid/hid-core.c.diff from any source.' failed
>>
>>
>> Did, I misunderstood you when you said that I should rename the files
>> dir to linux-yocto - the name of the recipe and remove it from the
>> SRC_URI?
>
>
> Every build that I do with my meta-kernel-dev has some out of tree
> patches. It's a form of continual regression testing that I do out
> of habit.
>
> My bbappend looks like this:
>
> SRC_URI =
> "git://${KSRC_linux_yocto};protocol=file;nocheckout=1;branch=${KBRANCH},meta;name=machine,meta
> \
>           file://make.patch \
>           file://subdir/make2.patch \
>           file://subdir/make3.patch"
>
>
>> pwd
> /home/bruce/yocto/poky-extras/meta-kernel-dev/recipes-kernel/linux
>> tree linux-yocto
> linux-yocto
> ├── make.patch
> └── subdir
>    ├── make2.patch
>    └── make3.patch
>
> These are always applied to my build.
>
> Cheers,
>
> Bruce
>

I will try that next. However, it seems like something is wrong with
my setup may be.

I was reading the log.do_patch file and it seems like bitbake is
mixing my build and recipes directory.

The recipe and logs are attached in this email. Once again, I have
switched to M2 now. This is no longer with Yocto 1.0.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cant_patch_kernel.tar.gz
Type: application/x-gzip
Size: 6763 bytes
Desc: not available
URL: <http://lists.yoctoproject.org/pipermail/yocto/attachments/20120206/74d43197/attachment.bin>


More information about the yocto mailing list