[OE-core] [PATCH] kernel-devsrc: copy mmiowb.h and modpost from ${B} of kernel

Hongzhi, Song hongzhi.song at windriver.com
Wed Sep 11 09:10:16 UTC 2019


On 9/6/19 11:10 AM, Hongzhi, Song wrote:
>
> On 9/4/19 8:34 PM, Bruce Ashfield wrote:
>> On Wed, Sep 4, 2019 at 6:07 AM Hongzhi, Song 
>> <hongzhi.song at windriver.com> wrote:
>>>
>>> On 9/4/19 11:55 AM, Bruce Ashfield wrote:
>>>> On Tue, Sep 3, 2019 at 9:43 PM Hongzhi.Song 
>>>> <hongzhi.song at windriver.com> wrote:
>>>>> There are two errors when compile an out of tree kernel module
>>>>> using sdk:
>>>>>
>>>> This is not universally true. Can you expand on what kernel version
>>>> and architectures you are building ? I'm able to build kernel modules
>>>> across all the arches I'm currently testing, so I'd like to capture
>>>> your exact config in the long log. Neither is the autobuilder showing
>>>> any errors.
>>> Hi Bruce,
>>>
>>>
>>> kernel version: 5.0.19
>>>
>>> git clone poky
>>>
>>> echo  TOOLCHAIN_HOST_TASK_append = " nativesdk-openssl-dev
>>> nativesdk-bison nativesdk-flex"
>>>            TOOLCHAIN_TARGET_TASK_append = " python-dev kernel-dev
>>> kernel-devsrc")
>>>
>>>            >> conf/local.conf
>>>
>>> Other config is default.
>>>
>>>
>>> bitbake core-image-minimal &&  bitbake core-image-minimal -c 
>>> populate_sdk
>>>
>>> ./tmp/deploy/sdk/xxx.sh
>>>
>>> cd ${Your SDK path}/sysroots/xxx/usr/src/kernel
>>>
>>> make scripts
>>>
>>> Then you can build yourself module. And you will meet missing some head
>>> files and scripts/mod/modpost.
>>>
>>>
>>> I test qemux86-64 and qemuarm.
>>>
>>> Both of above arch miss different head files, which all of them
>>> generated in ${B}/arch/${ARCH}/include/generated/asm
>>>
>>> (qemux86-64 needs asm/early_ioremap.h and asm/mmiowb.h
>>>
>>> qemuarm needs asm/bitsperlong.h)
>>>
>>>
>>>>> 1. "In file included from ./include/linux/seqlock.h:36:0,
>>>>>                    from ./include/linux/time.h:6,
>>>>>                    from ./include/linux/stat.h:19,
>>>>>                    from ./include/linux/module.h:10,
>>>>>                    from kernel-module/char.c:1:
>>>>> ./include/linux/spinlock.h:60:10: fatal error: asm/mmiowb.h: No such
>>>>> file or directory"
>>>>>
>>>>> mmiowb.h is generated to ${B}/arch/${ARCH}/include/generated/asm/.
>>>>>
>>>>> And there is only generated/ under ${B}/arch/${ARCH}/include/,
>>>>> so I copy whole ${B}/arch/${ARCH}/include/ to $kerneldir/build/
>>>>> in case of other files under generated/ is needed in the future.
>>>>>
>>>>> 2. "/bin/sh: scripts/mod/modpost: No such file or directory"
>>>>>
>>>>> Copy above files or directory to $kerneldir/build/ fix the errors.
>>>>>
>>>>> Signed-off-by: Hongzhi.Song <hongzhi.song at windriver.com>
>>>>> ---
>>>>>    meta/recipes-kernel/linux/kernel-devsrc.bb | 6 ++++++
>>>>>    1 file changed, 6 insertions(+)
>>>>>
>>>>> diff --git a/meta/recipes-kernel/linux/kernel-devsrc.bb 
>>>>> b/meta/recipes-kernel/linux/kernel-devsrc.bb
>>>>> index 3900489..feff9f1 100644
>>>>> --- a/meta/recipes-kernel/linux/kernel-devsrc.bb
>>>>> +++ b/meta/recipes-kernel/linux/kernel-devsrc.bb
>>>>> @@ -80,6 +80,12 @@ do_install() {
>>>>>
>>>>>           cp .config $kerneldir/build
>>>>>
>>>>> +       if [ -d arch/${ARCH}/include ]; then
>>>>> +           cp -a --parents arch/${ARCH}/include $kerneldir/build/
>>>>> +       fi
>>>> Just copy the files you need, not the entire directory.
>>>
>>> Just as explained above, exactly speaking I think include/generated is
>>> necessary.
>> It shouldn't be. The point of what we include in devsrc is that it can
>> regenerate all these files either on target, or the SDK.
>>
>>> ps: only generated/ under include/.
>>>
>>>
>>>
>>>>> +
>>>>> +       cp --parents scripts/mod/modpost $kerneldir/build/
>>>> We shouldn't be copying binaries or scripts. They are regenerated 
>>>> on target.
>>>>
>>>> Bruce
>>>
>>> But scripts/mod/modpost is needed when compile a module by sdk.
>> yes, that is expected. But 'make scripts prepare' should be recreating
>> them. Is that not working for you ?
>
>
> Even without this patch, 'make scripts prepare' works.
>
> So 2.7doc maybe need to be update, because 2.6doc uses 'make scripts'.
>
> https://www.yoctoproject.org/docs/2.6/mega-manual/mega-manual.html#building-out-of-tree-modules-on-the-target 
>
>
>
> --Hongzhi


Hi Bruce,

I found 2.7 and 2.6 doc all use "make scripts". And now "make scripts" 
doesn't work.

Should the doc be change to "make scripts prepare" ?


--Hongzhi


>
>
>>
>> We can't copy the binaries, since you'll get QA errors depending on
>> your host/target arch combination.
>>
>> Bruce
>>
>>> Otherwise it will show error info:
>>>
>>> "
>>>
>>> /bin/sh: scripts/mod/modpost: No such file or directory
>>> scripts/Makefile.modpost:92: recipe for target '__modpost' failed
>>>
>>> "
>>>
>>>
>>> --Hongzhi
>>>
>>>>> +
>>>>>           # This scripts copy blow up QA, so for now, we require a 
>>>>> more
>>>>>           # complex 'make scripts' to restore these, versus 
>>>>> copying them
>>>>>           # here. Left as a reference to indicate that we know the 
>>>>> scripts must
>>>>> -- 
>>>>> 2.8.1
>>>>>
>>
>>


More information about the Openembedded-core mailing list