summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-03-03 19:36:13 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2021-03-08 16:54:29 +0200
commit237e23bb19f49814584d99cc6c0a2e80dad46be8 (patch)
treebdad706fd53acd1698dfdb2deaac74e17474482e /utils
parentae05b9f9d08210ba07683af975247b87e7fdb014 (diff)
utils: Add kernel headers update script
Add a script to update the local copy of kernel headers (in include/linux/) from a Linux kernel git tree. The script handles header installation, manual processing of the IPU3 header that is still in staging, and update of the README file. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'utils')
-rwxr-xr-xutils/update-kernel-headers.sh89
1 files changed, 89 insertions, 0 deletions
diff --git a/utils/update-kernel-headers.sh b/utils/update-kernel-headers.sh
new file mode 100755
index 00000000..3c3f34c7
--- /dev/null
+++ b/utils/update-kernel-headers.sh
@@ -0,0 +1,89 @@
+#!/bin/sh
+
+# SPDX-License-Identifier: GPL-2.0-or-later
+# Update the kernel headers copy from a kernel source tree
+
+if [ $# != 1 ] ; then
+ echo "Usage: $0 <kernel dir>"
+ exit 1
+fi
+
+header_dir="$(dirname "$(realpath "$0")")/../include/linux"
+kernel_dir="$1"
+
+# Bail out if the directory doesn't contain kernel sources
+line=$(head -3 "${kernel_dir}/Kbuild" 2>/dev/null | tail -1)
+if [ "$line" != "# Kbuild for top-level directory of the kernel" ] ; then
+ echo "Directory ${kernel_dir} doesn't contain a kernel source tree"
+ exit 1
+fi
+
+if [ ! -d "${kernel_dir}/.git" ] ; then
+ echo "Directory ${kernel_dir} doesn't contain a git tree"
+ exit 1
+fi
+
+# Check the kernel version, and reject dirty trees
+version=$(git -C "${kernel_dir}" describe --dirty)
+echo $version
+if echo "${version}" | grep -q dirty ; then
+ echo "Kernel tree in ${kernel_dir} is dirty"
+ exit 1
+fi
+
+# Install the headers to a temporary directory
+install_dir=$(mktemp -d)
+if [ ! -d "${install_dir}" ] ; then
+ echo "Failed to create temporary directory"
+ exit 1
+fi
+
+trap "rm -rf ${install_dir}" EXIT
+
+set -e
+make -C "${kernel_dir}" O="${install_dir}" headers_install
+set +e
+
+# Copy the headers
+headers="
+ drm/drm_fourcc.h
+ linux/dma-buf.h
+ linux/dma-heap.h
+ linux/media-bus-format.h
+ linux/media.h
+ linux/rkisp1-config.h
+ linux/v4l2-common.h
+ linux/v4l2-controls.h
+ linux/v4l2-mediabus.h
+ linux/v4l2-subdev.h
+ linux/videodev2.h
+"
+
+for header in $headers ; do
+ name=$(basename "${header}")
+ cp "${install_dir}/usr/include/${header}" "${header_dir}/${name}"
+done
+
+# The IPU3 header is a special case, as it's stored in staging. Handle it
+# manually.
+(cd "${install_dir}" ; "${kernel_dir}scripts/headers_install.sh" \
+ "${kernel_dir}/drivers/staging/media/ipu3/include/intel-ipu3.h" \
+ "${header_dir}/intel-ipu3.h")
+
+# Update the README file
+cat <<EOF > "${header_dir}/README"
+# SPDX-License-Identifier: CC0-1.0
+
+Files in this directory are imported from ${version} of the Linux kernel. Do not
+modify them manually.
+EOF
+
+# Cleanup
+rm -rf "${install_dir}"
+
+cat <<EOF
+----------------------------------------------------------------------
+Kernel headers updated. Please review and up-port local changes before
+committing.
+----------------------------------------------------------------------
+EOF