[Buildroot] [PATCH v2] linux: Build and install kernel selftests
Cyril Bur
cyrilbur at gmail.com
Tue Mar 15 22:09:32 UTC 2016
On Tue, 15 Mar 2016 10:24:13 +0100
"Yann E. MORIN" <yann.morin.1998 at free.fr> wrote:
> Cyril, All,
>
> On 2016-01-04 11:59 +1100, Cyril Bur spake thusly:
> > This patch simply adds the ability to compile and install the kernel
> > selftests into the target at /usr/lib/kselftests. The rationale behind
> > /usr/lib is that the selftests have subdirectories where they are installed
> > which makes them unsuitable to be placed in /usr/sbin as this would result
> > in /usr/sbin/kselftests/x/y/z. While the selftests aren't libraries either,
> > they don't achieve much as a standalone binary so they can be considered to
> > be a 'library of tests' making /usr/lib sensible.
> >
> > The selftests require that the kernel headers be installed into the kernel
> > build tree as some of the selftests have a hardcoded CFLAGS to include
> > kernel headers (CFLAGS += -I../../../../usr/include/). This is most easily
> > achieved by using the make ... headers_install inside the kernel build dir.
> >
> > This is likely to be a rarely used debugging/performance feature for
> > development and unlikely to be used in a production configuration.
>
> So I finally take some time to review this new iteration; sorry for the
> delay... :-/
Hi Yann,
No worries, thanks for taking the time.
>
> > Signed-off-by: Cyril Bur <cyrilbur at gmail.com>
> > ---
> [--SNIP--]
> > diff --git a/linux/linux-tool-selftests.mk b/linux/linux-tool-selftests.mk
> > new file mode 100644
> > index 0000000..b610599
> > --- /dev/null
> > +++ b/linux/linux-tool-selftests.mk
> > @@ -0,0 +1,42 @@
> > +################################################################################
> > +#
> > +# selftests
> > +#
> > +################################################################################
> > +
> > +LINUX_TOOLS += selftests
> > +
> > +ifeq ($(KERNEL_ARCH),x86_64)
>
> For i386, Buildroot sets KERNEL_ARCH=i386, so we may also want to handle
> that case, no?
>
I think you're right but not super sure... I'll leave it up to an x86 boffin to
confirm that it's the correct thing to do :)
> > +SELFTESTS_ARCH=x86
>
> I know the other linux-tools don't, but I think we should call that
> linux-selftests (so LINUX_SEFLTESTS_ARCH and so on) to avoid name
> clashing with other packages.
Yeah that's a good idea.
>
> > +else
> > +SELFTESTS_ARCH=$(KERNEL_ARCH)
> > +endif
> > +
> > +SELFTESTS_DEPENDENCIES = bash
>
> It can also use libcap-ng, so you probably want to depend on it, too:
>
> /home/ymorin/dev/buildroot/O/host/usr/bin/i686-pc-linux-gnu-gcc -O2 -g
> -std=gnu99 -Wall validate_cap.c -lcap-ng -lrt -ldl -o validate_cap
> validate_cap.c:1:20: fatal error: cap-ng.h: No such file or directory
>
> Ditto popt:
>
> /home/ymorin/dev/buildroot/O/host/opt/ext-toolchain/bin/../lib/gcc/
> i686-pc-linux-gnu/4.7.2/../../../../i686-pc-linux-gnu/bin/ld: cannot
> find -lpopt
> collect2: error: ld returned 1 exit status
>
I could add those dependencies I suppose, it would be nicer for everyone.
> However, as you said in the commit log, those are not fatal errors
> (although reported as such) and the build goes on successfully for the
> rest of the tests:
>
> Reviewed-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> Tested-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
Are you happy for me to do a v3 based on your comments and leave both the
Reviewed-by and Tested-by tags?
Also, for what its worth, I've built and used it a lot for powerpc.
Thanks again,
Cyril
> [build-tested only, for i386]
>
> Regards,
> Yann E. MORIN.
>
> > +SELFTESTS_MAKE_FLAGS = \
> > + $(LINUX_MAKE_FLAGS) \
> > + ARCH=$(SELFTESTS_ARCH)
> > +
> > +# O must be redefined here to overwrite the one used by Buildroot for
> > +# out of tree build. We build the selftests in $(@D)/tools/selftests and
> > +# not just $(@D) so that it isn't built in the root directory of the kernel
> > +# sources.
> > +#
> > +# The headers_install step here is important as some kernel selftests use a
> > +# hardcoded CFLAGS to find kernel headers e.g:
> > +# CFLAGS += -I../../../../usr/include/
> > +# The headers_install target will install the kernel headers locally inside
> > +# the Linux build dir
> > +define SELFTESTS_BUILD_CMDS
> > + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D) $(SELFTESTS_MAKE_FLAGS) \
> > + headers_install
> > + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D)/tools/testing/selftests \
> > + $(SELFTESTS_MAKE_FLAGS) O=$(@D)/tools/testing/selftests
> > +endef
> > +
> > +define SELFTESTS_INSTALL_TARGET_CMDS
> > + $(TARGET_MAKE_ENV) $(MAKE1) -C $(@D)/tools/testing/selftests \
> > + $(SELFTESTS_MAKE_FLAGS) O=$(@D)/tools/testing/selftests \
> > + INSTALL_PATH=$(TARGET_DIR)/usr/lib/kselftests install
> > +endef
> > --
> > 2.6.4
> >
>
More information about the buildroot
mailing list