@@ -69,3 +69,13 @@ Conflicts: linux-kbuild-${KERNEL_NAME_PROVIDED}
Description: ${KERNEL_NAME_PROVIDED} Linux kbuild scripts and tools for @KR@
This package provides kernel kbuild scripts and tools for @KR@
This is useful for people who need to build external modules
+
+Package: linux-tools-${KERNEL_NAME_PROVIDED}
+Build-Profiles: <pkg.${BPN}.kernel pkg.${BPN}.tools>
+Architecture: any
+Multi-Arch: foreign
+Depends: ${misc:Depends}, ${shlib:Depends}
+Description: ${KERNEL_NAME_PROVIDED} Linux tools for @KR@
+ This package provides kernel tools for @KR@.
+ .
+ This is useful for people who want to run things like perf.
@@ -23,6 +23,9 @@ do_build() {
if echo "${DEB_BUILD_PROFILES}" | grep -q "kernel"; then # Build kernel scripts and tools
${MAKE} O=${KERNEL_BUILD_DIR} ${PARALLEL_MAKE} ${KERNEL_EXTRA_BUILDARGS} KCFLAGS="${KCFLAGS}" KAFLAGS="${KAFLAGS}"
+ if echo "${DEB_BUILD_PROFILES}" | grep -q "tools"; then # Build kernel tools
+ ${MAKE} O=${KERNEL_BUILD_DIR} ${PARALLEL_MAKE} ${KERNEL_EXTRA_BUILDARGS} KCFLAGS="${KCFLAGS}" KAFLAGS="${KAFLAGS}" -C tools/perf
+ fi
elif echo "${DEB_BUILD_PROFILES}" | grep -q "kbuild"; then # Build kernel scripts and tools
${MAKE} O=${KERNEL_BUILD_DIR} ${PARALLEL_MAKE} ${KERNEL_EXTRA_BUILDARGS} KCFLAGS="${KCFLAGS}" KAFLAGS="${KAFLAGS}" scripts
if grep -q -E "CONFIG_STACK_VALIDATION=y|CONFIG_HAVE_OBJTOOL=y" ${KERNEL_BUILD_DIR}/.config && [ -d "tools/objtool" ]; then
@@ -12,6 +12,7 @@ KERNEL_PKG_LIBC_HEADERS=linux-libc-dev
KERNEL_PKG_LIBC_HEADERS_CROSS=linux-libc-dev-${DISTRO_ARCH}-cross
KERNEL_PKG_KERN_KBUILD=linux-kbuild-${KERNEL_NAME_PROVIDED}
KERNEL_PKG_KERN_KBUILD_CROSS=${KERNEL_PKG_KERN_KBUILD}-${DISTRO_ARCH}-cross
+KERNEL_PKG_TOOLS=linux-tools-${KERNEL_NAME_PROVIDED}
# Force creating debian package with valid host arch for -native build
# Use a cross build to comply with arch specific kernel defconfigs
@@ -38,6 +39,7 @@ deb_libc_hdr_dir=${deb_top_dir}/${KERNEL_PKG_LIBC_HEADERS}
deb_libc_hdr_cross_dir=${deb_top_dir}/${KERNEL_PKG_LIBC_HEADERS_CROSS}
deb_kern_kbuild_dir=${deb_top_dir}/${KERNEL_PKG_KERN_KBUILD}
deb_kern_kbuild_cross_dir=${deb_top_dir}/${KERNEL_PKG_KERN_KBUILD_CROSS}
+deb_tools_dir=${deb_top_dir}/${KERNEL_PKG_TOOLS}
# Array of packages to be generated
declare -A kern_pkgs
@@ -68,6 +68,9 @@ do_install() {
install_dtbs
install_kmods
install_headers
+ if echo "${DEB_BUILD_PROFILES}" | grep -q "tools"; then
+ install_tools
+ fi
fi
# Stop tracing
@@ -137,6 +140,10 @@ install_dtbs() {
${MAKE} O=${O} INSTALL_DTBS_PATH=${deb_img_dir}/usr/lib/linux-image-${krel} dtbs_install
}
+install_tools() {
+ install -Dm0755 ${O}/perf ${deb_tools_dir}/usr/bin/perf
+}
+
install_kmods() {
[ -n "${CONFIG_MODULES}" ] || return 0
${MAKE} O=${O} modules_install \
@@ -45,4 +45,4 @@ override_dh_strip_nondeterminism:
true
override_dh_strip:
- unset DEB_HOST_GNU_TYPE && dh_strip -Xvmlinu --no-automatic-dbgsym
+ unset DEB_HOST_GNU_TYPE && dh_strip -Xvmlinu -Xperf --no-automatic-dbgsym
@@ -169,6 +169,14 @@ RECIPE_PROVIDES:append:libcdev = " \
linux-libc-dev-${DISTRO_ARCH}-cross \
"
+# Set to "1" to enable the tools build profile and build the linux-tools package
+KERNEL_BUILD_TOOLS ??= "0"
+
+# Provide the linux-tools package if the tools build profile has been enabled
+RECIPE_PROVIDES:append = " \
+ ${@ bb.utils.contains('DEB_BUILD_PROFILES', 'pkg.{}.tools'.format(d.getVar('BPN')), 'linux-tools-{}'.format(d.getVar('KERNEL_NAME_PROVIDED')), '', d)} \
+"
+
# When cross-profile is active:
# kbuild package is provided by -native or -kbuildtarget variant. Also headers
# provisioning moves over to ensure those variants are pulled, although the
@@ -231,6 +239,8 @@ def get_additional_build_profiles(d):
profiles += ' pkg.{}.nolibcdev'.format(d.getVar('BPN'))
elif bb.utils.to_boolean(d.getVar('KERNEL_LIBC_DEV_ARCH_ALL')):
profiles += ' pkg.{}.libcdev-arch-all'.format(d.getVar('BPN'))
+ if bb.utils.to_boolean(d.getVar('KERNEL_BUILD_TOOLS')):
+ profiles += ' pkg.{}.tools'.format(d.getVar('BPN'))
return profiles
KERNEL_LIBC_DEV_ARCH = "${@ bb.utils.contains('DEB_BUILD_PROFILES', 'pkg.{}.libcdev-arch-all'.format(d.getVar('BPN')), 'all\nMulti-Arch: foreign', 'any', d) }"
Add an additional package to the linux-custom recipe which can be used to deliver tools built from the kernel sources. Additionally, build the perf tool as part of the kernel build process and add it to the linux-tools package, allowing users to install it to their target rootfs. Signed-off-by: Isaac True <itrue@emlix.com> --- meta/recipes-kernel/linux/files/debian/control.tmpl | 10 ++++++++++ meta/recipes-kernel/linux/files/debian/isar/build.tmpl | 3 +++ .../recipes-kernel/linux/files/debian/isar/common.tmpl | 2 ++ .../linux/files/debian/isar/install.tmpl | 7 +++++++ meta/recipes-kernel/linux/files/debian/rules.tmpl | 2 +- meta/recipes-kernel/linux/linux-custom.inc | 10 ++++++++++ 6 files changed, 33 insertions(+), 1 deletion(-)