Files
Arch-R/packages/sysutils/systemd/scripts/kernel-overlays-setup

87 lines
2.2 KiB
Plaintext
Raw Normal View History

Add support for kernel overlays Core Kernel modules are now installed to /usr/lib/kernel-overlays/base/lib/modules instead of /usr/lib/modules Firmware files are installed to /usr/lib/kernel-overlays/base/lib/firmware instead of /usr/lib/firmware Packages can choose to install their modules and/or firmwareinto a different overlay directory than base so they are not automatically enabled. A new systemd service kernel-overlays, which is run before any modules are loaded, adds overlays enabled via /storage/.cache/kernel-overlays/*.conf These conf files must either contain the name of a system overlay, which will then be searched for in /usr/lib/kernel-overlays/, or an absolute path starting with '/'. Overlaying is implemented by symlinking files from the overlays to /usr/lib/modules and /usr/lib/firmware as not all platforms support overlayfs. This overlaying system can also be used by addons to provide optional kernel modules and/or firmware by storing the absolute path to the addon directory in the conf file and shipping kernel modules in <addondir>/lib/modules/<KERNELVER>. To save space only symlinks for modules matching the currently running kernel version are created as addons may want to ship modules for older kernel versions as well to be backward-compatible to older LibreELEC versions. Changes since v1: - fixup kernel-overlays-service: add before kmod-static-nodes.service Fix static device nodes for module autoloading not being created. - fixup kernel-overlays-service: fail if /usr/lib/modules exists - squash kernel overlays: use get_kernel_overlay_dir in linux/package.mk - Add support for firmware files via kernel overlays - config/functions: include kernel overlays in addon installation Signed-off-by: Matthias Reichl <hias@horus.com>
2017-09-05 09:17:30 +02:00
#!/bin/sh
2018-07-16 20:45:36 +02:00
# SPDX-License-Identifier: GPL-2.0
2018-07-16 20:45:36 +02:00
# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv)
Add support for kernel overlays Core Kernel modules are now installed to /usr/lib/kernel-overlays/base/lib/modules instead of /usr/lib/modules Firmware files are installed to /usr/lib/kernel-overlays/base/lib/firmware instead of /usr/lib/firmware Packages can choose to install their modules and/or firmwareinto a different overlay directory than base so they are not automatically enabled. A new systemd service kernel-overlays, which is run before any modules are loaded, adds overlays enabled via /storage/.cache/kernel-overlays/*.conf These conf files must either contain the name of a system overlay, which will then be searched for in /usr/lib/kernel-overlays/, or an absolute path starting with '/'. Overlaying is implemented by symlinking files from the overlays to /usr/lib/modules and /usr/lib/firmware as not all platforms support overlayfs. This overlaying system can also be used by addons to provide optional kernel modules and/or firmware by storing the absolute path to the addon directory in the conf file and shipping kernel modules in <addondir>/lib/modules/<KERNELVER>. To save space only symlinks for modules matching the currently running kernel version are created as addons may want to ship modules for older kernel versions as well to be backward-compatible to older LibreELEC versions. Changes since v1: - fixup kernel-overlays-service: add before kmod-static-nodes.service Fix static device nodes for module autoloading not being created. - fixup kernel-overlays-service: fail if /usr/lib/modules exists - squash kernel overlays: use get_kernel_overlay_dir in linux/package.mk - Add support for firmware files via kernel overlays - config/functions: include kernel overlays in addon installation Signed-off-by: Matthias Reichl <hias@horus.com>
2017-09-05 09:17:30 +02:00
SYSTEM_OVERLAYS_DIR=/usr/lib/kernel-overlays
OVERLAY_CONFIG_DIR=/storage/.cache/kernel-overlays
KVER=$(uname -r)
RUNTIME_DIR="/run/kernel-overlays"
MODULES_DIR="${RUNTIME_DIR}/modules/${KVER}"
FIRMWARE_DIR="${RUNTIME_DIR}/firmware"
USER_FIRMWARE_DIR="/storage/.config/firmware"
Add support for kernel overlays Core Kernel modules are now installed to /usr/lib/kernel-overlays/base/lib/modules instead of /usr/lib/modules Firmware files are installed to /usr/lib/kernel-overlays/base/lib/firmware instead of /usr/lib/firmware Packages can choose to install their modules and/or firmwareinto a different overlay directory than base so they are not automatically enabled. A new systemd service kernel-overlays, which is run before any modules are loaded, adds overlays enabled via /storage/.cache/kernel-overlays/*.conf These conf files must either contain the name of a system overlay, which will then be searched for in /usr/lib/kernel-overlays/, or an absolute path starting with '/'. Overlaying is implemented by symlinking files from the overlays to /usr/lib/modules and /usr/lib/firmware as not all platforms support overlayfs. This overlaying system can also be used by addons to provide optional kernel modules and/or firmware by storing the absolute path to the addon directory in the conf file and shipping kernel modules in <addondir>/lib/modules/<KERNELVER>. To save space only symlinks for modules matching the currently running kernel version are created as addons may want to ship modules for older kernel versions as well to be backward-compatible to older LibreELEC versions. Changes since v1: - fixup kernel-overlays-service: add before kmod-static-nodes.service Fix static device nodes for module autoloading not being created. - fixup kernel-overlays-service: fail if /usr/lib/modules exists - squash kernel overlays: use get_kernel_overlay_dir in linux/package.mk - Add support for firmware files via kernel overlays - config/functions: include kernel overlays in addon installation Signed-off-by: Matthias Reichl <hias@horus.com>
2017-09-05 09:17:30 +02:00
mkdir -p "${MODULES_DIR}"
mkdir -p "${FIRMWARE_DIR}"
mkdir -p "${OVERLAY_CONFIG_DIR}"
log() {
echo "kernel-overlays-setup: $@" > /dev/kmsg
}
apply_overlay() {
case "$1" in
/*)
modules_overlay_dir="${1}/lib/modules/${KVER}"
firmware_overlay_dir="${1}/lib/firmware"
;;
*)
modules_overlay_dir="${SYSTEM_OVERLAYS_DIR}/${1}/lib/modules/${KVER}"
firmware_overlay_dir="${SYSTEM_OVERLAYS_DIR}/${1}/lib/firmware"
;;
esac
if [ -d "${modules_overlay_dir}" ] ; then
GOT_MODULE_OVERLAY="yes"
if cp -rfs "${modules_overlay_dir}"/* "${MODULES_DIR}" ; then
log "added modules from $modules_overlay_dir"
else
log "failed to add modules from $modules_overlay_dir"
fi
fi
if [ -d "${firmware_overlay_dir}" ] ; then
if cp -rfs "${firmware_overlay_dir}"/* "${FIRMWARE_DIR}" ; then
log "added firmware from $firmware_overlay_dir"
else
log "failed to add firmware from $firmware_overlay_dir"
fi
fi
}
# setup system base modules
log "setup base modules"
apply_overlay base
# apply user-configured module overlays
if [ -d "${OVERLAY_CONFIG_DIR}" ] ; then
log "adding overlays from ${OVERLAY_CONFIG_DIR}"
GOT_MODULE_OVERLAY="no"
for conf in "${OVERLAY_CONFIG_DIR}/"*.conf ; do
if [ -e "$conf" ] ; then
log "processing conf $conf"
overlay=$(cat "$conf")
[ -n "$overlay" ] && apply_overlay "$overlay"
fi
done
if [ "yes" = "$GOT_MODULE_OVERLAY" ] ; then
log "running depmod"
/usr/sbin/depmod -a
fi
fi
if [ -d "${USER_FIRMWARE_DIR}" ] && [ -n "$(ls ${USER_FIRMWARE_DIR})" ] ; then
if cp -rfs "${USER_FIRMWARE_DIR}"/* "${FIRMWARE_DIR}" ; then
log "added firmware from ${USER_FIRMWARE_DIR}"
else
log "failed to add firmware from ${USER_FIRMWARE_DIR}"
fi
fi
Add support for kernel overlays Core Kernel modules are now installed to /usr/lib/kernel-overlays/base/lib/modules instead of /usr/lib/modules Firmware files are installed to /usr/lib/kernel-overlays/base/lib/firmware instead of /usr/lib/firmware Packages can choose to install their modules and/or firmwareinto a different overlay directory than base so they are not automatically enabled. A new systemd service kernel-overlays, which is run before any modules are loaded, adds overlays enabled via /storage/.cache/kernel-overlays/*.conf These conf files must either contain the name of a system overlay, which will then be searched for in /usr/lib/kernel-overlays/, or an absolute path starting with '/'. Overlaying is implemented by symlinking files from the overlays to /usr/lib/modules and /usr/lib/firmware as not all platforms support overlayfs. This overlaying system can also be used by addons to provide optional kernel modules and/or firmware by storing the absolute path to the addon directory in the conf file and shipping kernel modules in <addondir>/lib/modules/<KERNELVER>. To save space only symlinks for modules matching the currently running kernel version are created as addons may want to ship modules for older kernel versions as well to be backward-compatible to older LibreELEC versions. Changes since v1: - fixup kernel-overlays-service: add before kmod-static-nodes.service Fix static device nodes for module autoloading not being created. - fixup kernel-overlays-service: fail if /usr/lib/modules exists - squash kernel overlays: use get_kernel_overlay_dir in linux/package.mk - Add support for firmware files via kernel overlays - config/functions: include kernel overlays in addon installation Signed-off-by: Matthias Reichl <hias@horus.com>
2017-09-05 09:17:30 +02:00
log "done"