[PATCH] Add recipe for linux kselftest

41 views
Skip to first unread message

Vijai Kumar K

unread,
May 18, 2020, 8:05:47 AM5/18/20
to isar-...@googlegroups.com, Vijai Kumar K
Kselftest is a set of unit and regression tests under the
tools/testing/selftests/ directory of the Linux kernel. These are used
for testing individual code paths in the kernel.

Kselftest is not debianized and is not available as part of the official
Debian repository.

This patch provides a recipe to build kselftest from the linux source of
your choice.

Sometimes developers/testers tend to use the latest version of selftests
from Linux upstream stable releases for testing and hence the need for a
separate recipe instead of being part of the linux recipe of ISAR.

Some kselftest test cases build are known to break in certain linux
versions, this has to be addressed upstream. Right now kselftest build
succeeds even if atleast one of the testcase case build succeeds.

You can change that by setting KSELFTEST_FORCE_TARGETS=1.

TARGETS, TARGETS_SKIP, FORCE_TARETS can be set using the appropriate
KSELFTEST_* recipe variable.

Signed-off-by: Vijai Kumar K <Vijaikumar_...@mentor.com>
---
.../kselftest/kselftest_5.6.13.bb | 27 ++++++++++++
.../kselftest/files/debian/changelog.tmpl | 5 +++
.../kselftest/files/debian/compat | 1 +
.../kselftest/files/debian/control.tmpl | 10 +++++
.../kselftest/files/debian/rules | 27 ++++++++++++
meta/recipes-kernel/kselftest/kselftest.inc | 44 +++++++++++++++++++
6 files changed, 114 insertions(+)
create mode 100644 meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
create mode 100644 meta/recipes-kernel/kselftest/files/debian/changelog.tmpl
create mode 100644 meta/recipes-kernel/kselftest/files/debian/compat
create mode 100644 meta/recipes-kernel/kselftest/files/debian/control.tmpl
create mode 100755 meta/recipes-kernel/kselftest/files/debian/rules
create mode 100644 meta/recipes-kernel/kselftest/kselftest.inc

diff --git a/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb b/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
new file mode 100644
index 0000000..3303742
--- /dev/null
+++ b/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
@@ -0,0 +1,27 @@
+# Kselftest package
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor Graphics, a Siemens business, 2020
+#
+# SPDX-License-Identifier: MIT
+
+require recipes-kernel/kselftest/kselftest.inc
+
+KSELFTEST_DEPENDS += " \
+ libelf-dev:native, \
+ libcap-ng-dev:native, \
+ libpopt-dev:native, \
+ libcap-dev:native, \
+ libmount-dev:native, \
+ libnuma-dev:native, \
+ libfuse-dev:native, \
+ libmnl-dev:native, \
+ pkg-config, \
+ clang, \
+ llvm, \
+ "
+
+SRC_URI += "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${PV}.tar.xz"
+SRC_URI[sha256sum] = "f125d79c8f6974213638787adcad6b575bbd35a05851802fd83f622ec18ff987"
+
+S = "${WORKDIR}/linux-${PV}"
diff --git a/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl b/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl
new file mode 100644
index 0000000..6e59e06
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl
@@ -0,0 +1,5 @@
+${PN} (${PV}) unstable; urgency=low
+
+ * Generated package.
+
+ -- ISAR project <isar-...@googlegroups.com> Tue, 6 Feb 2018 00:00:00 +0000
diff --git a/meta/recipes-kernel/kselftest/files/debian/compat b/meta/recipes-kernel/kselftest/files/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/files/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/meta/recipes-kernel/kselftest/files/debian/control.tmpl b/meta/recipes-kernel/kselftest/files/debian/control.tmpl
new file mode 100644
index 0000000..de5d315
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/files/debian/control.tmpl
@@ -0,0 +1,10 @@
+Source: ${PN}
+Section: kernel
+Priority: optional
+Build-Depends: ${KSELFTEST_DEPENDS}
+Standards-Version: 3.9.6
+Maintainer: ISAR project <isar-...@googlegroups.com>
+
+Package: ${PN}
+Architecture: any
+Description: ${DESCRIPTION}
diff --git a/meta/recipes-kernel/kselftest/files/debian/rules b/meta/recipes-kernel/kselftest/files/debian/rules
new file mode 100755
index 0000000..6f49138
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/files/debian/rules
@@ -0,0 +1,27 @@
+#!/usr/bin/make -f
+
+# Debian rules for Kselftest build
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor, A Siemens Business
+#
+# SPDX-License-Identifier: MIT
+
+deb_top_dir:=$(CURDIR)/debian
+kselftest_install_dir :=$(deb_top_dir)/kselftest/usr/libexec/kselftest
+
+PARALLEL_BUILD=-j $(shell echo $$(($$(nproc) * 2)))
+
+override_dh_auto_build:
+ $(MAKE) defconfig
+ $(MAKE) $(PARALLEL_BUILD) -C tools/testing/selftests/ ${KSELFTEST_ARGS}
+
+override_dh_auto_install:
+ mkdir -p ${kselftest_install_dir}
+ cd tools/testing/selftests/ && KSFT_INSTALL_PATH=${kselftest_install_dir} $(MAKE) $(PARALLEL_BUILD) install ${KSELFTEST_ARGS}
+
+override_dh_auto_clean:
+ rm -rf ${deb_top_dir}/kselftest/
+
+%:
+ CFLAGS= LDFLAGS= dh $@ --parallel
diff --git a/meta/recipes-kernel/kselftest/kselftest.inc b/meta/recipes-kernel/kselftest/kselftest.inc
new file mode 100644
index 0000000..12ebec9
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/kselftest.inc
@@ -0,0 +1,44 @@
+# Kselftest package for Linux
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor Graphics, a Siemens Business, 2020
+#
+# SPDX-License-Identifier: MIT
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+
+DESCRIPTION ?= "Kernel selftests from Linux kernel ${PV}"
+
+ISAR_CROSS_COMPILE = "0"
+
+SRC_URI += "file://debian"
+KSELFTEST_DEPENDS ?= " \
+ rsync, \
+ flex, \
+ bison, \
+ "
+KSELFTEST_TARGETS ?= ""
+KSELFTEST_SKIP_TARGETS ?= ""
+KSELFTEST_FORCE_TARGETS ?= "0"
+
+inherit dpkg
+
+TEMPLATE_FILES += "debian/control.tmpl \
+ debian/changelog.tmpl"
+TEMPLATE_VARS += "KSELFTEST_DEPENDS"
+
+do_prepare_build() {
+ cp -rf ${WORKDIR}/debian ${S}/debian
+}
+
+dpkg_runbuild_prepend() {
+ if [ -n "${KSELFTEST_TARGETS}" ];then
+ export KSELFTEST_ARGS="TARGETS=\"${KSELFTEST_TARGETS}\""
+ fi
+ if [ ${KSELFTEST_FORCE_TARGETS} -eq 1 ];then
+ export KSELFTEST_ARGS="${KSELFTEST_ARGS} FORCE_TARGETS=1"
+ fi
+ if [ -n "${KSELFTEST_SKIP_TARGETS}" ];then
+ export KSELFTEST_ARGS="${KSELFTEST_ARGS} SKIP_TARGETS=\"${KSELFTEST_SKIP_TARGETS}\""
+ fi
+}
--
2.17.1

Jan Kiszka

unread,
May 18, 2020, 11:13:00 AM5/18/20
to isar-...@googlegroups.com
Are all of these deps specific to the version, or would it make sense to
extract some common ones (or even all?) to kselftest.inc?

> +
> +SRC_URI += "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${PV}.tar.xz"
> +SRC_URI[sha256sum] = "f125d79c8f6974213638787adcad6b575bbd35a05851802fd83f622ec18ff987"
> +
> +S = "${WORKDIR}/linux-${PV}"

The SRC_URI and S are likely also version-independent.

> diff --git a/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl b/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl
> new file mode 100644
> index 0000000..6e59e06
> --- /dev/null
> +++ b/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl
> @@ -0,0 +1,5 @@
> +${PN} (${PV}) unstable; urgency=low
> +
> + * Generated package.
> +
> + -- ISAR project <isar-...@googlegroups.com> Tue, 6 Feb 2018 00:00:00 +0000

deb_add_changelog?

> diff --git a/meta/recipes-kernel/kselftest/files/debian/compat b/meta/recipes-kernel/kselftest/files/debian/compat
> new file mode 100644
> index 0000000..ec63514
> --- /dev/null
> +++ b/meta/recipes-kernel/kselftest/files/debian/compat
> @@ -0,0 +1 @@
> +9
> diff --git a/meta/recipes-kernel/kselftest/files/debian/control.tmpl b/meta/recipes-kernel/kselftest/files/debian/control.tmpl
> new file mode 100644
> index 0000000..de5d315
> --- /dev/null
> +++ b/meta/recipes-kernel/kselftest/files/debian/control.tmpl
> @@ -0,0 +1,10 @@
> +Source: ${PN}
> +Section: kernel
> +Priority: optional
> +Build-Depends: ${KSELFTEST_DEPENDS}
> +Standards-Version: 3.9.6
> +Maintainer: ISAR project <isar-...@googlegroups.com>
> +
> +Package: ${PN}
> +Architecture: any
> +Description: ${DESCRIPTION}

This looks to like deb_create_control could generate it as well. If you
like, you could still patch the setion afterward from misc to kernel.
Why that? Please leave a comment so that it can be revisited in future
releases, or make version dependent (-> move to .bb recipe).
Jan

--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

vijai kumar

unread,
May 18, 2020, 11:57:34 AM5/18/20
to Jan Kiszka, isar-users
On the limited versions of Linux I have tested, this seems common when
you build ALL
test cases. This list is a collection of dependencies needed by ALL
the testcases(TARGETS)
that kselftest builds.

We could also specify the limited list of test cases you want to
compile using "TARGETS=" & "SKIP_TARGETS="
variables.

If you just compiling for say "size" test case you may not need any
of these. That is the
reason I had these depends in the bb. The common ones like bison, flex
and rsync are there kselftest.inc

>
> > +
> > +SRC_URI += "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${PV}.tar.xz"
> > +SRC_URI[sha256sum] = "f125d79c8f6974213638787adcad6b575bbd35a05851802fd83f622ec18ff987"
> > +
> > +S = "${WORKDIR}/linux-${PV}"
>
> The SRC_URI and S are likely also version-independent.

Sorry, but I am not getting this. Can you please elaborate?

>
> > diff --git a/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl b/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl
> > new file mode 100644
> > index 0000000..6e59e06
> > --- /dev/null
> > +++ b/meta/recipes-kernel/kselftest/files/debian/changelog.tmpl
> > @@ -0,0 +1,5 @@
> > +${PN} (${PV}) unstable; urgency=low
> > +
> > + * Generated package.
> > +
> > + -- ISAR project <isar-...@googlegroups.com> Tue, 6 Feb 2018 00:00:00 +0000
>
> deb_add_changelog?

I will have a look into that API. Will address in v2.
Will have a look and possibly address in v2.
I remember having issues with some test cases failing in cross
compilation. Added this to make sure the deb has
consistent working testcases in ISAR cross compilation setup. I have
to look back at my notes on what failed.
Will have a look and take care of this in v2.

Thanks,
Vijai Kumar K
> --
> You received this message because you are subscribed to the Google Groups "isar-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/isar-users/42ea0194-db8d-09eb-2157-2b1af59bcad9%40siemens.com.

Jan Kiszka

unread,
May 18, 2020, 12:06:47 PM5/18/20
to vijai kumar, isar-users
If you can identify some dependency clusters for specific test case set,
adding them automatically when selecting a set would be nice. Otherwise,
I would simply go for "add them all". Background is that only little
information should be left in the example & test layer meta-isar.

>>
>>> +
>>> +SRC_URI += "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${PV}.tar.xz"
>>> +SRC_URI[sha256sum] = "f125d79c8f6974213638787adcad6b575bbd35a05851802fd83f622ec18ff987"
>>> +
>>> +S = "${WORKDIR}/linux-${PV}"
>>
>> The SRC_URI and S are likely also version-independent.
>
> Sorry, but I am not getting this. Can you please elaborate?
>

Move them to kselftest.inc. Reduces the boilerplate one has to add to an
own recipe.
Perfect.

Thanks,
Jan

Vijai Kumar K

unread,
May 19, 2020, 7:02:08 AM5/19/20
to isar-...@googlegroups.com, Vijai Kumar K
Kselftest is a set of unit and regression tests under the
tools/testing/selftests/ directory of the Linux kernel. These are used
for testing individual code paths in the kernel.

Kselftest is not debianized and is not available as part of the official
Debian repository.

This patch provides a recipe to build kselftest from the linux source of
your choice.

Sometimes developers/testers tend to use the latest version of selftests
from Linux upstream stable releases for testing and hence the need for a
separate recipe instead of being part of the linux recipe of ISAR.

Some kselftest test cases build are known to break in certain linux
versions, this has to be addressed upstream. Right now kselftest build
succeeds even if atleast one of the testcase case build succeeds.

You can change that by setting KSELFTEST_FORCE_TARGETS=1.

TARGETS, TARGETS_SKIP, FORCE_TARGETS can be set using the appropriate
KSELFTEST_* recipe variable.

Signed-off-by: Vijai Kumar K <Vijaikumar_...@mentor.com>
---
Changes since v1:
- Addressed review comments in v1
- Used debianize APIs for control, compat and changelog.
- Moved Depends & S definitions to include file.
- Added cross compilation bits in rules.
- Change clang, llvm to clang:native & llvm:native

.../kselftest/kselftest_5.6.13.bb | 11 ++++
.../kselftest/files/debian/rules | 41 +++++++++++++
meta/recipes-kernel/kselftest/kselftest.inc | 61 +++++++++++++++++++
3 files changed, 113 insertions(+)
create mode 100644 meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
create mode 100755 meta/recipes-kernel/kselftest/files/debian/rules
create mode 100644 meta/recipes-kernel/kselftest/kselftest.inc

diff --git a/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb b/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
new file mode 100644
index 0000000..0c9818a
--- /dev/null
+++ b/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
@@ -0,0 +1,11 @@
+# Kselftest package
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor Graphics, a Siemens business, 2020
+#
+# SPDX-License-Identifier: MIT
+
+require recipes-kernel/kselftest/kselftest.inc
+
+SRC_URI += "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${PV}.tar.xz"
+SRC_URI[sha256sum] = "f125d79c8f6974213638787adcad6b575bbd35a05851802fd83f622ec18ff987"
diff --git a/meta/recipes-kernel/kselftest/files/debian/rules b/meta/recipes-kernel/kselftest/files/debian/rules
new file mode 100755
index 0000000..776d341
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/files/debian/rules
@@ -0,0 +1,41 @@
+#!/usr/bin/make -f
+
+# Debian rules for Kselftest build
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor, A Siemens Business
+#
+# SPDX-License-Identifier: MIT
+
+deb_top_dir:=$(CURDIR)/debian
+kselftest_install_dir :=$(deb_top_dir)/kselftest/usr/libexec/kselftest
+export CROSS_COMPILE=$(DEB_HOST_GNU_TYPE)-
+
+ifeq ($(DEB_HOST_GNU_CPU), arm)
+export ARCH=arm
+endif
+ifeq ($(DEB_HOST_GNU_CPU), aarch64)
+export ARCH=arm64
+endif
+ifeq ($(DEB_HOST_GNU_CPU), riscv64)
+export ARCH=riscv
+endif
+ifneq (,$(findstring 86,$(DEB_HOST_GNU_CPU)))
+export ARCH=x86
+endif
+
+PARALLEL_BUILD=-j $(shell echo $$(($$(nproc) * 2)))
+
+override_dh_auto_build:
+ $(MAKE) defconfig
+ $(MAKE) $(PARALLEL_BUILD) -C tools/testing/selftests/ ${KSELFTEST_ARGS}
+
+override_dh_auto_install:
+ mkdir -p ${kselftest_install_dir}
+ cd tools/testing/selftests/ && KSFT_INSTALL_PATH=${kselftest_install_dir} $(MAKE) $(PARALLEL_BUILD) install ${KSELFTEST_ARGS}
+
+override_dh_auto_clean:
+ rm -rf ${deb_top_dir}/kselftest/
+
+%:
+ CFLAGS= LDFLAGS= dh $@ --parallel
diff --git a/meta/recipes-kernel/kselftest/kselftest.inc b/meta/recipes-kernel/kselftest/kselftest.inc
new file mode 100644
index 0000000..46ca282
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/kselftest.inc
@@ -0,0 +1,61 @@
+# Kselftest package for Linux
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor Graphics, a Siemens Business, 2020
+#
+# SPDX-License-Identifier: MIT
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+
+# Some test-cases like memfd compilation failed in cross-compilation.
+# Force native compilation for now to have consistent output across
+# ISAR native/cross compilation setups.
+ISAR_CROSS_COMPILE = "0"
+
+DESCRIPTION ?= "Kernel selftests from Linux kernel ${PV}"
+
+DEBIAN_BUILD_DEPENDS ?= " \
+ rsync, \
+ flex, \
+ bison, \
+ fuse, \
+ libelf-dev:native, \
+ libcap-ng-dev:native, \
+ libpopt-dev:native, \
+ libcap-dev:native, \
+ libmount-dev:native, \
+ libnuma-dev:native, \
+ libfuse-dev:native, \
+ libmnl-dev:native, \
+ pkg-config, \
+ clang:native, \
+ llvm:native, \
+"
+
+SRC_URI += "file://debian"
+S = "${WORKDIR}/linux-${PV}"
+
+KSELFTEST_TARGETS ?= ""
+KSELFTEST_SKIP_TARGETS ?= ""
+KSELFTEST_FORCE_TARGETS ?= "0"
+
+inherit dpkg
+
+do_prepare_build() {
+ cp -rf ${WORKDIR}/debian ${S}/debian
+ deb_create_compat
+ deb_create_control
+ deb_add_changelog
+}
+
+dpkg_runbuild_prepend() {
+ if [ -n "${KSELFTEST_TARGETS}" ];then
+ export KSELFTEST_ARGS="TARGETS=\"${KSELFTEST_TARGETS}\""
+ fi
+ if [ ${KSELFTEST_FORCE_TARGETS} -eq 1 ];then
+ export KSELFTEST_ARGS="${KSELFTEST_ARGS} FORCE_TARGETS=1"
+ fi
+ if [ -n "${KSELFTEST_SKIP_TARGETS}" ];then
+ export KSELFTEST_ARGS="${KSELFTEST_ARGS} SKIP_TARGETS=\"${KSELFTEST_SKIP_TARGETS}\""
+ fi
+}
--
2.17.1

Jan Kiszka

unread,
May 19, 2020, 7:44:41 AM5/19/20
to Vijai Kumar K, isar-...@googlegroups.com
Minor: those three (and only these) are also run when just calling
deb_debianize. Rules will be skipped as you supplied that already.

> +}
> +
> +dpkg_runbuild_prepend() {
> + if [ -n "${KSELFTEST_TARGETS}" ];then
> + export KSELFTEST_ARGS="TARGETS=\"${KSELFTEST_TARGETS}\""
> + fi
> + if [ ${KSELFTEST_FORCE_TARGETS} -eq 1 ];then
> + export KSELFTEST_ARGS="${KSELFTEST_ARGS} FORCE_TARGETS=1"
> + fi
> + if [ -n "${KSELFTEST_SKIP_TARGETS}" ];then
> + export KSELFTEST_ARGS="${KSELFTEST_ARGS} SKIP_TARGETS=\"${KSELFTEST_SKIP_TARGETS}\""
> + fi
> +}
>

LGTM,

Baurzhan Ismagulov

unread,
May 28, 2020, 3:55:11 PM5/28/20
to isar-...@googlegroups.com
Hello Vijai Kumar,

On Tue, May 19, 2020 at 04:31:47PM +0530, Vijai Kumar K wrote:
> Kselftest is a set of unit and regression tests under the
> tools/testing/selftests/ directory of the Linux kernel. These are used
> for testing individual code paths in the kernel.

Thanks, this is a useful addition.

I'd suggest to address Jan's point and replace the individual commands with
deb_debianize to provide a good in-tree example of using that functionality.

To prevent bit rot, I think every component in the mainline should have a test
case. We could add the package to e.g. isar-image-debug and build e.g.
mc:qemuamd64-buster:isar-image-debug instead of
mc:qemuamd64-buster:isar-image-base.

What do you think?

With kind regards,
Baurzhan.

vijai kumar

unread,
May 28, 2020, 4:36:41 PM5/28/20
to isar-users
On Fri, May 29, 2020 at 1:25 AM Baurzhan Ismagulov <i...@radix50.net> wrote:
Hello Vijai Kumar,

On Tue, May 19, 2020 at 04:31:47PM +0530, Vijai Kumar K wrote:
> Kselftest is a set of unit and regression tests under the
> tools/testing/selftests/ directory of the Linux kernel. These are used
> for testing individual code paths in the kernel.

Thanks, this is a useful addition.

I'd suggest to address Jan's point and replace the individual commands with
deb_debianize to provide a good in-tree example of using that functionality.

Sure. We could use deb_debianize. Will address in v3.

To prevent bit rot, I think every component in the mainline should have a test
case. We could add the package to e.g. isar-image-debug and build e.g.
mc:qemuamd64-buster:isar-image-debug instead of
mc:qemuamd64-buster:isar-image-base. 

What do you think?

Looks good to me. Will address it in v3.

Thanks,
Vijai Kumar K
 

With kind regards,
Baurzhan.


--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+...@googlegroups.com.

Vijai Kumar K

unread,
May 29, 2020, 6:15:37 AM5/29/20
to isar-...@googlegroups.com, i...@radix50.net, Vijai Kumar K
Kselftest is a set of unit and regression tests under the
tools/testing/selftests/ directory of the Linux kernel. These are used
for testing individual code paths in the kernel.

Kselftest is not debianized and is not available as part of the official
Debian repository.

This patch provides a recipe to build kselftest from the linux source of
your choice.

Sometimes developers/testers tend to use the latest version of selftests
from Linux upstream stable releases for testing and hence the need for a
separate recipe instead of being part of the linux recipe of ISAR.

Some kselftest test cases build are known to break in certain linux
versions, this has to be addressed upstream. Right now kselftest build
succeeds even if atleast one of the testcase case build succeeds.

You can change that by setting KSELFTEST_FORCE_TARGETS=1.

TARGETS, TARGETS_SKIP, FORCE_TARGETS can be set using the appropriate
KSELFTEST_* recipe variable.

Signed-off-by: Vijai Kumar K <Vijaikumar_...@mentor.com>
---
Changes since v2:
- Use deb_debianize instead of individual calls for changelog, compat & control.
- Add package to isar-image-debug

Changes since v1:
- Addressed review comments in v1
- Used debianize APIs for control, compat and changelog.
- Moved Depends & S definitions to include file.
- Added cross compilation bits in rules.
- Change clang, llvm to clang:native & llvm:native
.../recipes-core/images/isar-image-debug.bb | 2 +
.../kselftest/kselftest_5.6.13.bb | 11 ++++
meta/recipes-kernel/kselftest/files/rules | 41 +++++++++++++
meta/recipes-kernel/kselftest/kselftest.inc | 59 +++++++++++++++++++
4 files changed, 113 insertions(+)
create mode 100644 meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
create mode 100755 meta/recipes-kernel/kselftest/files/rules
create mode 100644 meta/recipes-kernel/kselftest/kselftest.inc

diff --git a/meta-isar/recipes-core/images/isar-image-debug.bb b/meta-isar/recipes-core/images/isar-image-debug.bb
index 791d623..d0fe331 100644
--- a/meta-isar/recipes-core/images/isar-image-debug.bb
+++ b/meta-isar/recipes-core/images/isar-image-debug.bb
@@ -7,3 +7,5 @@ require recipes-core/images/isar-image-base.bb

IMAGE_PREINSTALL += "gdb \
strace"
+
+IMAGE_INSTALL += "kselftest"
diff --git a/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb b/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
new file mode 100644
index 0000000..0c9818a
--- /dev/null
+++ b/meta-isar/recipes-kernel/kselftest/kselftest_5.6.13.bb
@@ -0,0 +1,11 @@
+# Kselftest package
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor Graphics, a Siemens business, 2020
+#
+# SPDX-License-Identifier: MIT
+
+require recipes-kernel/kselftest/kselftest.inc
+
+SRC_URI += "https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${PV}.tar.xz"
+SRC_URI[sha256sum] = "f125d79c8f6974213638787adcad6b575bbd35a05851802fd83f622ec18ff987"
diff --git a/meta/recipes-kernel/kselftest/files/rules b/meta/recipes-kernel/kselftest/files/rules
new file mode 100755
index 0000000..776d341
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/files/rules
index 0000000..ca9b882
--- /dev/null
+++ b/meta/recipes-kernel/kselftest/kselftest.inc
@@ -0,0 +1,59 @@
+# Kselftest package for Linux
+#
+# This software is a part of ISAR.
+# Copyright (c) Mentor Graphics, a Siemens Business, 2020
+#
+# SPDX-License-Identifier: MIT
+
+inherit dpkg
+SRC_URI += "file://rules"
+S = "${WORKDIR}/linux-${PV}"
+
+KSELFTEST_TARGETS ?= ""
+KSELFTEST_SKIP_TARGETS ?= ""
+KSELFTEST_FORCE_TARGETS ?= "0"
+
+do_prepare_build[cleandirs] += "${S}/debian"
+do_prepare_build() {
+ deb_debianize
+}
+
+dpkg_runbuild_prepend() {
+ if [ -n "${KSELFTEST_TARGETS}" ];then
+ export KSELFTEST_ARGS="TARGETS=\"${KSELFTEST_TARGETS}\""
+ fi
+ if [ ${KSELFTEST_FORCE_TARGETS} -eq 1 ];then
+ export KSELFTEST_ARGS="${KSELFTEST_ARGS} FORCE_TARGETS=1"
+ fi
+ if [ -n "${KSELFTEST_SKIP_TARGETS}" ];then
+ export KSELFTEST_ARGS="${KSELFTEST_ARGS} SKIP_TARGETS=\"${KSELFTEST_SKIP_TARGETS}\""
+ fi
+}
--
2.17.1

Jan Kiszka

unread,
Oct 13, 2020, 6:03:35 AM10/13/20
to Vijai Kumar K, isar-...@googlegroups.com, i...@radix50.net
Unless I'm missing something right now, this still lacks a test case.

Jan

--
Siemens AG, T RDA IOT

vijaikumar....@gmail.com

unread,
Oct 14, 2020, 2:18:56 AM10/14/20
to isar-users
Yes. Somehow I never sent that version of patch. Will send it.
Reply all
Reply to author
Forward
0 new messages