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

Bruce Ashfield bruce.ashfield at windriver.com
Mon Feb 6 13:58:52 PST 2012


On 12-02-06 04:43 PM, autif khan wrote:
>>>>>>>> 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


>
> 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