On Wed, Sep 11, 2019 at 5:10 AM Hongzhi, Song <[email protected]> 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 > >> <[email protected]> wrote: > >>> > >>> On 9/4/19 11:55 AM, Bruce Ashfield wrote: > >>>> On Tue, Sep 3, 2019 at 9:43 PM Hongzhi.Song > >>>> <[email protected]> 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 <[email protected]> > >>>>> --- > >>>>> 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 -- _______________________________________________ Openembedded-core mailing list [email protected] http://lists.openembedded.org/mailman/listinfo/openembedded-core
