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

autif khan autif.mlist at gmail.com
Mon Feb 6 13:43:12 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?

Will keep investigating and experimenting.

> Cheers,
>
> Bruce
>
>
>>
>>> Cheers,
>>>
>>> Bruce
>>>
>>>> cat hid-core.c.diff
>>>> --- linux.orig/drivers/hid/hid-core.c   2012-01-31 16:44:44.152001877
>>>> -0500
>>>> +++ linux/drivers/hid/hid-core.c        2012-01-31 16:46:34.608001870
>>>> -0500
>>>> @@ -1839,6 +1839,8 @@
>>>>        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP,
>>>> USB_DEVICE_ID_1_PHIDGETSERVO_20) },
>>>>        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP,
>>>> USB_DEVICE_ID_8_8_4_IF_KIT) },
>>>>        { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK,
>>>> USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
>>>> +       { HID_USB_DEVICE(USB_VENDOR_ID_PIXCIR, USB_DEVICE_ID_PIXCIR) },
>>>>        { }
>>>>  };
>>>>
>>>> autif at fpbm:~/data/yocto/poky-edison-6.0/meta-koko/recipes/linux/linux/drivers/hid$
>>>>
>>>> autif at fpbm:~/data/yocto/poky-edison-6.0/meta-koko/recipes/linux/linux/drivers/hid$
>>>> cat hid-ids.h.diff--- linux.orig/drivers/hid/hid-ids.h  2012-01-31
>>>> 16:44:55.432001877 -0500
>>>> +++ linux/drivers/hid/hid-ids.h 2012-01-31 16:47:36.624001858 -0500
>>>> @@ -671,4 +671,7 @@
>>>>  #define USB_VENDOR_ID_ZYDACRON 0x13EC
>>>>  #define USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL  0x0006
>>>>
>>>> +#define USB_VENDOR_ID_PIXCIR   0x040b
>>>> +#define USB_DEVICE_ID_PIXCIR   0x2000
>>>> +
>>>>  #endif
>>>>
>>>> autif at fpbm:~/data/yocto/poky-edison-6.0/meta-koko/recipes/linux/linux/drivers/hid$
>>>> _______________________________________________
>>>> yocto mailing list
>>>> yocto at yoctoproject.org
>>>> https://lists.yoctoproject.org/listinfo/yocto
>>>
>>>
>>>
>>>
>>> --
>>> "Thou shalt not follow the NULL pointer, for chaos and madness await
>>> thee at its end"
>>>
>>>
>>> _______________________________________________
>>> yocto mailing list
>>> yocto at yoctoproject.org
>>> https://lists.yoctoproject.org/listinfo/yocto
>
>



More information about the yocto mailing list