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

Bruce Ashfield bruce.ashfield at gmail.com
Wed Sep 11 11:36:57 UTC 2019


On Wed, Sep 11, 2019 at 5:10 AM Hongzhi, Song
<hongzhi.song at windriver.com> wrote:
>
>
> 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" ?

Yes they should be. We need to open a bug and get ScottR to look into it.

We've (Richard, myself, and others) have been using make scripts
prepare as a requirement for on kernel building for quite some time
now. The docs should reflect this.

Bruce

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



-- 
- Thou shalt not follow the NULL pointer, for chaos and madness await
thee at its end
- "Use the force Harry" - Gandalf, Star Trek II


More information about the Openembedded-core mailing list