diff --git a/config/functions b/config/functions
index e02b9be364..dea1198531 100644
--- a/config/functions
+++ b/config/functions
@@ -143,7 +143,24 @@ kernel_version() {
# get kernel module dir
get_module_dir() {
- basename $(ls -d $(get_build_dir linux)/.install_pkg/usr/lib/modules/*)
+ basename $(ls -d $(get_build_dir linux)/.install_pkg/usr/lib/kernel-overlays/base/lib/modules/*)
+}
+
+# get base path to kernel modules and firmware
+get_kernel_overlay_dir() {
+ echo "/usr/lib/kernel-overlays/${1:-base}"
+}
+
+# get full path to kernel module dir
+# optional parameter specifies overlay level (default is base)
+get_full_module_dir() {
+ echo "$(get_kernel_overlay_dir $1)/lib/modules/$(get_module_dir)"
+}
+
+# get full path to firmware dir
+# optional parameter specifies overlay level (default is base)
+get_full_firmware_dir() {
+ echo "$(get_kernel_overlay_dir $1)/lib/firmware"
}
# get package's build dir
@@ -172,16 +189,106 @@ get_pkg_variable() {
}
install_binary_addon() {
- local addon_name="$1" addon_id="$2" addon_so
+ local addon_id="$1" addon_so
mkdir -p $ADDON_BUILD/$addon_id/
- cp -R $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/$addon_name/* $ADDON_BUILD/$addon_id/
+ cp -R $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/$addon_id/* $ADDON_BUILD/$addon_id/
- addon_so=$(xmlstarlet sel -t -v "/addon/extension/@library_linux" $ADDON_BUILD/$addon_id/addon.xml)
+ addon_so=$(xmlstarlet sel -t -v "/addon/extension/@library_linux" $ADDON_BUILD/$addon_id/addon.xml || :)
if [ -n "$addon_so" ]; then
- cp -L $PKG_BUILD/.install_pkg/usr/lib/$MEDIACENTER/addons/$addon_name/$addon_so $ADDON_BUILD/$addon_id/
+ cp -L $PKG_BUILD/.install_pkg/usr/lib/$MEDIACENTER/addons/$addon_id/$addon_so $ADDON_BUILD/$addon_id/
chmod +x $ADDON_BUILD/$addon_id/$addon_so
fi
+
+ if [ -d $PKG_BUILD/.install_pkg/usr/lib/kernel-overlays/$addon_id ] ; then
+ mkdir -p $ADDON_BUILD/$addon_id/kernel-overlay
+ cp -PR $PKG_BUILD/.install_pkg/usr/lib/kernel-overlays/$addon_id/* $ADDON_BUILD/$addon_id/kernel-overlay
+ fi
+}
+
+install_addon_source() {
+ if [ -d $PKG_DIR/source ]; then
+ cp -R $PKG_DIR/source/* "$1"
+ fi
+}
+
+install_addon_images() {
+ local dest_dir="$1"
+
+ if [ -f "$PKG_DIR/icon/icon.png" ]; then
+ mkdir -p "$dest_dir/resources"
+ cp "$PKG_DIR/icon/icon.png" "$dest_dir/resources"
+ fi
+
+ if [ -f "$DISTRO_DIR/$DISTRO/addons/fanart.png" ]; then
+ mkdir -p "$dest_dir/resources"
+ cp "$DISTRO_DIR/$DISTRO/addons/fanart.png" "$dest_dir/resources"
+ fi
+}
+
+create_addon_xml() {
+ local addon_xml addon_version addon_name provider_name requires requires_addonname requires_addonversion screenshots
+
+ addon_xml="$1/addon.xml"
+
+ IFS=" "
+for i in $PKG_ADDON_REQUIRES; do
+ requires_addonname=`echo $i | cut -f1 -d ":"`
+ requires_addonversion=`echo $i | cut -f2 -d ":"`
+ requires="$requires\n "
+done
+ unset IFS
+
+ if [ ! -f "$addon_xml" ] ; then
+ cp $ROOT/config/addon/${PKG_ADDON_TYPE}.xml "$addon_xml"
+ addon_version=${PKG_ADDON_VERSION:-${ADDON_VERSION}.${PKG_REV}}
+ else
+ if [ ! $(which xmlstarlet) ]; then
+ echo "*** ERROR: $ADDON has addon.xml shipped, you need 'xmlstarlet' ***"
+ exit 255
+ fi
+ addon_version="${PKG_ADDON_VERSION:-$(xmlstarlet sel -t -v "/addon/@version" "$addon_xml").$PKG_REV}"
+ xmlstarlet ed --inplace -u "/addon[@version]/@version" -v "$addon_version" "$addon_xml"
+ fi
+
+ if [ -f $PKG_DIR/changelog.txt ]; then
+ sed -e "/@PKG_ADDON_NEWS@/ \
+ {
+ r $PKG_DIR/changelog.txt
+ d
+ }" -i "$addon_xml"
+ else
+ sed -e "s|@PKG_ADDON_NEWS@||g" -i "$addon_xml"
+ fi
+
+ provider_name=${PKG_MAINTAINER:-"Team LibreELEC"}
+ addon_name=${PKG_ADDON_NAME:-"$PKG_NAME"}
+
+ for f in $PKG_DIR/source/resources/screenshot-*.{jpg,png}; do
+ if [ -f "$f" ]; then
+ screenshots+="resources/$(basename $f)\n"
+ fi
+ done
+
+ $SED -e "s|@PKG_ADDON_ID@|$PKG_ADDON_ID|g" \
+ -e "s|@ADDON_NAME@|$addon_name|g" \
+ -e "s|@ADDON_VERSION@|$addon_version|g" \
+ -e "s|@REQUIRES@|$requires|g" \
+ -e "s|@PKG_SHORTDESC@|$PKG_SHORTDESC|g" \
+ -e "s|@OS_VERSION@|$OS_VERSION|g" \
+ -e "s|@PKG_LONGDESC@|$PKG_LONGDESC|g" \
+ -e "s|@PKG_DISCLAIMER@|$PKG_DISCLAIMER|g" \
+ -e "s|@PROVIDER_NAME@|$provider_name|g" \
+ -e "s|@PKG_ADDON_PROVIDES@|$PKG_ADDON_PROVIDES|g" \
+ -e "s|@PKG_ADDON_SCREENSHOT@|$screenshots|g" \
+ -e "s|@PKG_ADDON_BROKEN@|$PKG_ADDON_BROKEN|g" \
+ -i "$addon_xml"
+}
+
+install_addon_files() {
+ install_addon_source "$1"
+ install_addon_images "$1"
+ create_addon_xml "$1"
}
tolower() {
diff --git a/packages/linux-drivers/RTL8188EU/package.mk b/packages/linux-drivers/RTL8188EU/package.mk
index d9ecaad289..9652f95089 100644
--- a/packages/linux-drivers/RTL8188EU/package.mk
+++ b/packages/linux-drivers/RTL8188EU/package.mk
@@ -48,6 +48,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/RTL8192CU/package.mk b/packages/linux-drivers/RTL8192CU/package.mk
index 7bdd26cf5e..8ba1a2122f 100644
--- a/packages/linux-drivers/RTL8192CU/package.mk
+++ b/packages/linux-drivers/RTL8192CU/package.mk
@@ -47,6 +47,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/RTL8192DU/package.mk b/packages/linux-drivers/RTL8192DU/package.mk
index 09a54d1f50..a02f838171 100644
--- a/packages/linux-drivers/RTL8192DU/package.mk
+++ b/packages/linux-drivers/RTL8192DU/package.mk
@@ -47,6 +47,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/RTL8192EU/package.mk b/packages/linux-drivers/RTL8192EU/package.mk
index 2958b076c8..615e4d869c 100644
--- a/packages/linux-drivers/RTL8192EU/package.mk
+++ b/packages/linux-drivers/RTL8192EU/package.mk
@@ -48,6 +48,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/RTL8812AU/package.mk b/packages/linux-drivers/RTL8812AU/package.mk
index 4725b346e7..48c6ea2af8 100644
--- a/packages/linux-drivers/RTL8812AU/package.mk
+++ b/packages/linux-drivers/RTL8812AU/package.mk
@@ -46,6 +46,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/bcm_sta/package.mk b/packages/linux-drivers/bcm_sta/package.mk
index ac55c6b9c6..3b34f6878b 100644
--- a/packages/linux-drivers/bcm_sta/package.mk
+++ b/packages/linux-drivers/bcm_sta/package.mk
@@ -42,6 +42,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcm_sta
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/bcm_sta
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/brcmap6xxx-aml/package.mk b/packages/linux-drivers/brcmap6xxx-aml/package.mk
index f0af7b4104..5bf544220b 100644
--- a/packages/linux-drivers/brcmap6xxx-aml/package.mk
+++ b/packages/linux-drivers/brcmap6xxx-aml/package.mk
@@ -42,9 +42,9 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd
+ mkdir -p $INSTALL/$(get_full_module_dir)/bcmdhd
+ cp *.ko $INSTALL/$(get_full_module_dir)/bcmdhd
- mkdir -p $INSTALL/usr/lib/firmware/brcm
- cp $PKG_DIR/config/config.txt $INSTALL/usr/lib/firmware/brcm
+ mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm
+ cp $PKG_DIR/config/config.txt $INSTALL/$(get_full_firmware_dir)/brcm
}
diff --git a/packages/linux-drivers/dvbhdhomerun/package.mk b/packages/linux-drivers/dvbhdhomerun/package.mk
index a1e94e9065..73d39b77eb 100644
--- a/packages/linux-drivers/dvbhdhomerun/package.mk
+++ b/packages/linux-drivers/dvbhdhomerun/package.mk
@@ -58,8 +58,8 @@ pre_configure_target() {
makeinstall_target() {
cd $PKG_BUILD
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun
- cp kernel/*.ko $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun/
+ mkdir -p $INSTALL/$(get_full_module_dir)/hdhomerun
+ cp kernel/*.ko $INSTALL/$(get_full_module_dir)/hdhomerun/
mkdir -p $INSTALL/usr/bin
cp -PR .$TARGET_NAME/userhdhomerun $INSTALL/usr/bin
diff --git a/packages/linux-drivers/intel_nuc_led/package.mk b/packages/linux-drivers/intel_nuc_led/package.mk
index ff302fe446..5512e0f47b 100644
--- a/packages/linux-drivers/intel_nuc_led/package.mk
+++ b/packages/linux-drivers/intel_nuc_led/package.mk
@@ -42,6 +42,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/media_build/package.mk b/packages/linux-drivers/media_build/package.mk
index 01676fae91..02dc59ec31 100644
--- a/packages/linux-drivers/media_build/package.mk
+++ b/packages/linux-drivers/media_build/package.mk
@@ -57,6 +57,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$KERNEL_VER/updates
- find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/usr/lib/modules/$KERNEL_VER/updates \;
+ mkdir -p $INSTALL/$(get_full_module_dir)/updates
+ find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/$(get_full_module_dir)/updates \;
}
diff --git a/packages/linux-drivers/slice-drivers/package.mk b/packages/linux-drivers/slice-drivers/package.mk
index 70e4ef38e3..c703ed9540 100644
--- a/packages/linux-drivers/slice-drivers/package.mk
+++ b/packages/linux-drivers/slice-drivers/package.mk
@@ -42,6 +42,6 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
- cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
+ cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
}
diff --git a/packages/linux-drivers/wetekdvb/package.mk b/packages/linux-drivers/wetekdvb/package.mk
index 18f0c001d5..c6d263a8ad 100644
--- a/packages/linux-drivers/wetekdvb/package.mk
+++ b/packages/linux-drivers/wetekdvb/package.mk
@@ -38,13 +38,13 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
if [ $PROJECT = "WeTek_Play_2" ]; then
- cp driver/wetekdvb_play2.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME/wetekdvb.ko
+ cp driver/wetekdvb_play2.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME/wetekdvb.ko
else
- cp driver/wetekdvb.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
+ cp driver/wetekdvb.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
fi
- mkdir -p $INSTALL/usr/lib/firmware
- cp firmware/* $INSTALL/usr/lib/firmware
+ mkdir -p $INSTALL/$(get_full_firmware_dir)
+ cp firmware/* $INSTALL/$(get_full_firmware_dir)
}
diff --git a/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk b/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk
index c11f7b6fd5..c8511dee00 100644
--- a/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk
+++ b/packages/linux-firmware/brcmfmac_sdio-firmware-rpi/package.mk
@@ -36,7 +36,7 @@ make_target() {
}
makeinstall_target() {
- DESTDIR=$INSTALL/usr ./install
+ DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
}
post_makeinstall_target() {
diff --git a/packages/linux-firmware/dvb-firmware/package.mk b/packages/linux-firmware/dvb-firmware/package.mk
index 69f623f96e..5ace21de9a 100644
--- a/packages/linux-firmware/dvb-firmware/package.mk
+++ b/packages/linux-firmware/dvb-firmware/package.mk
@@ -35,5 +35,5 @@ make_target() {
}
makeinstall_target() {
- DESTDIR=$INSTALL/usr ./install
+ DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
}
diff --git a/packages/linux-firmware/firmware-imx/package.mk b/packages/linux-firmware/firmware-imx/package.mk
index 6103ba8dcd..28c4226f19 100644
--- a/packages/linux-firmware/firmware-imx/package.mk
+++ b/packages/linux-firmware/firmware-imx/package.mk
@@ -42,7 +42,7 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/firmware/vpu
- cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/usr/lib/firmware/vpu
- cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/usr/lib/firmware/vpu
+ mkdir -p $INSTALL/$(get_full_firmware_dir)/vpu
+ cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/$(get_full_firmware_dir)/vpu
+ cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/$(get_full_firmware_dir)/vpu
}
diff --git a/packages/linux-firmware/iwlwifi-firmware/package.mk b/packages/linux-firmware/iwlwifi-firmware/package.mk
index da732181f4..26caafbefb 100644
--- a/packages/linux-firmware/iwlwifi-firmware/package.mk
+++ b/packages/linux-firmware/iwlwifi-firmware/package.mk
@@ -36,5 +36,5 @@ make_target() {
}
makeinstall_target() {
- DESTDIR=$INSTALL/usr ./install
+ DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
}
diff --git a/packages/linux-firmware/kernel-firmware/package.mk b/packages/linux-firmware/kernel-firmware/package.mk
index 12867d06da..43ef8e8aac 100644
--- a/packages/linux-firmware/kernel-firmware/package.mk
+++ b/packages/linux-firmware/kernel-firmware/package.mk
@@ -42,7 +42,7 @@ make_target() {
# Install additional miscellaneous drivers
makeinstall_target() {
- FW_TARGET_DIR=$INSTALL/usr/lib/firmware
+ FW_TARGET_DIR=$INSTALL/$(get_full_firmware_dir)
FW_LISTS="${PKG_DIR}/firmwares/any.dat ${PKG_DIR}/firmwares/${TARGET_ARCH}.dat"
FW_LISTS+=" ${PROJECT_DIR}/${PROJECT}/${PKG_NAME}/firmwares/any.dat"
diff --git a/packages/linux-firmware/misc-firmware/package.mk b/packages/linux-firmware/misc-firmware/package.mk
index 5bb1b688a8..fc2519be76 100644
--- a/packages/linux-firmware/misc-firmware/package.mk
+++ b/packages/linux-firmware/misc-firmware/package.mk
@@ -36,5 +36,5 @@ make_target() {
}
makeinstall_target() {
- DESTDIR=$INSTALL/usr ./install
+ DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
}
diff --git a/packages/linux-firmware/wlan-firmware-aml/package.mk b/packages/linux-firmware/wlan-firmware-aml/package.mk
index 8480ca7cca..eee765454c 100644
--- a/packages/linux-firmware/wlan-firmware-aml/package.mk
+++ b/packages/linux-firmware/wlan-firmware-aml/package.mk
@@ -36,20 +36,20 @@ make_target() {
}
makeinstall_target() {
- mkdir -p $INSTALL/usr/lib/firmware/brcm
+ mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm
# AP6255
- cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/usr/lib/firmware/brcm
- cp -P bcm_ampak/config/6255/nvram.txt $INSTALL/usr/lib/firmware/brcm/nvram_ap6255.txt
- cp -P bcm_ampak/config/6255/BT/BCM4345C0.hcd $INSTALL/usr/lib/firmware/brcm/bcm4345c0.hcd
+ cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm
+ cp -P bcm_ampak/config/6255/nvram.txt $INSTALL/$(get_full_firmware_dir)/brcm/nvram_ap6255.txt
+ cp -P bcm_ampak/config/6255/BT/BCM4345C0.hcd $INSTALL/$(get_full_firmware_dir)/brcm/bcm4345c0.hcd
# AP6330
- cp -PR bcm_ampak/config/AP6330/Wi-Fi/fw_bcm40183b2*.bin $INSTALL/usr/lib/firmware/brcm
- cp -P bcm_ampak/config/AP6330/Wi-Fi/nvram_ap6330.txt $INSTALL/usr/lib/firmware/brcm
- cp -P bcm_ampak/config/AP6330/BT/bcm40183b2.hcd $INSTALL/usr/lib/firmware/brcm
+ cp -PR bcm_ampak/config/AP6330/Wi-Fi/fw_bcm40183b2*.bin $INSTALL/$(get_full_firmware_dir)/brcm
+ cp -P bcm_ampak/config/AP6330/Wi-Fi/nvram_ap6330.txt $INSTALL/$(get_full_firmware_dir)/brcm
+ cp -P bcm_ampak/config/AP6330/BT/bcm40183b2.hcd $INSTALL/$(get_full_firmware_dir)/brcm
# AP6335
- cp -PR bcm_ampak/config/6335/fw_bcm4339a0_*.bin $INSTALL/usr/lib/firmware/brcm
- cp -P bcm_ampak/config/6335/nvram.txt $INSTALL/usr/lib/firmware/brcm/nvram_ap6335.txt
- cp -P bcm_ampak/config/6335/BT/bcm4335c0.hcd $INSTALL/usr/lib/firmware/brcm
+ cp -PR bcm_ampak/config/6335/fw_bcm4339a0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm
+ cp -P bcm_ampak/config/6335/nvram.txt $INSTALL/$(get_full_firmware_dir)/brcm/nvram_ap6335.txt
+ cp -P bcm_ampak/config/6335/BT/bcm4335c0.hcd $INSTALL/$(get_full_firmware_dir)/brcm
}
diff --git a/packages/linux-firmware/wlan-firmware/package.mk b/packages/linux-firmware/wlan-firmware/package.mk
index 65e2b63f9b..87e8df52f4 100644
--- a/packages/linux-firmware/wlan-firmware/package.mk
+++ b/packages/linux-firmware/wlan-firmware/package.mk
@@ -36,5 +36,5 @@ make_target() {
}
makeinstall_target() {
- DESTDIR=$INSTALL/usr ./install
+ DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
}
diff --git a/packages/linux/package.mk b/packages/linux/package.mk
index 173afce9a0..9bc0e1d766 100644
--- a/packages/linux/package.mk
+++ b/packages/linux/package.mk
@@ -194,9 +194,9 @@ pre_make_target() {
make_target() {
LDFLAGS="" make modules
- LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/usr DEPMOD="$TOOLCHAIN/bin/depmod" modules_install
- rm -f $INSTALL/usr/lib/modules/*/build
- rm -f $INSTALL/usr/lib/modules/*/source
+ LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/$(get_kernel_overlay_dir) DEPMOD="$TOOLCHAIN/bin/depmod" modules_install
+ rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/build
+ rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/source
( cd $ROOT
rm -rf $BUILD/initramfs
@@ -247,7 +247,7 @@ makeinstall_init() {
mkdir -p $INSTALL/usr/lib/modules
for i in $INITRAMFS_MODULES; do
- module=`find .install_pkg/usr/lib/modules/$(get_module_dir)/kernel -name $i.ko`
+ module=`find .install_pkg/$(get_full_module_dir)/kernel -name $i.ko`
if [ -n "$module" ]; then
echo $i >> $INSTALL/etc/modules
cp $module $INSTALL/usr/lib/modules/`basename $module`
@@ -257,15 +257,15 @@ makeinstall_init() {
if [ "$UVESAFB_SUPPORT" = yes ]; then
mkdir -p $INSTALL/usr/lib/modules
- uvesafb=`find .install_pkg/usr/lib/modules/$(get_module_dir)/kernel -name uvesafb.ko`
+ uvesafb=`find .install_pkg/$(get_full_module_dir)/kernel -name uvesafb.ko`
cp $uvesafb $INSTALL/usr/lib/modules/`basename $uvesafb`
fi
}
post_install() {
- mkdir -p $INSTALL/usr/lib/firmware/
- ln -sf /storage/.config/firmware/ $INSTALL/usr/lib/firmware/updates
+ mkdir -p $INSTALL/$(get_full_firmware_dir)/
+ ln -sf /storage/.config/firmware/ $INSTALL/$(get_full_firmware_dir)/updates
# bluez looks in /etc/firmware/
- ln -sf /usr/lib/firmware/ $INSTALL/etc/firmware
+ ln -sf /$(get_full_firmware_dir)/ $INSTALL/etc/firmware
}
diff --git a/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk b/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk
index 358285b995..46f60affab 100644
--- a/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk
+++ b/packages/mediacenter/kodi-binary-addons/inputstream.adaptive/package.mk
@@ -30,7 +30,7 @@ PKG_LONGDESC="inputstream.adaptive"
PKG_IS_ADDON="yes"
addon() {
- install_binary_addon $PKG_NAME $PKG_ADDON_ID
+ install_binary_addon $PKG_ADDON_ID
mkdir -p $ADDON_BUILD/$PKG_ADDON_ID
cp -P $PKG_BUILD/.$TARGET_NAME/wvdecrypter/libssd_wv.so $ADDON_BUILD/$PKG_ADDON_ID
diff --git a/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk b/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk
index 6ab26bf66a..9e66c7ab39 100644
--- a/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk
+++ b/packages/mediacenter/kodi-binary-addons/screensavers.rsxs/package.mk
@@ -41,7 +41,7 @@ addon() {
for _ADDON in $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/* ; do
_ADDON_ID=$(basename $_ADDON)
- install_binary_addon $_ADDON_ID $_ADDON_ID
+ install_binary_addon $_ADDON_ID
MULTI_ADDONS="$MULTI_ADDONS $_ADDON_ID"
done
diff --git a/packages/mediacenter/kodi/package.mk b/packages/mediacenter/kodi/package.mk
index efa80c96ca..08692726a8 100644
--- a/packages/mediacenter/kodi/package.mk
+++ b/packages/mediacenter/kodi/package.mk
@@ -271,8 +271,8 @@ post_makeinstall_target() {
cp $PKG_DIR/scripts/kodi-config $INSTALL/usr/lib/kodi
cp $PKG_DIR/scripts/kodi.sh $INSTALL/usr/lib/kodi
- mkdir -p $INSTALL/usr/lib/libreelec
- cp $PKG_DIR/scripts/systemd-addon-wrapper $INSTALL/usr/lib/libreelec
+ mkdir -p $INSTALL/usr/sbin
+ cp $PKG_DIR/scripts/service-addon-wrapper $INSTALL/usr/sbin
mkdir -p $INSTALL/usr/bin
cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin
diff --git a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch
new file mode 100644
index 0000000000..84d2f12a01
--- /dev/null
+++ b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-service-addons.patch
@@ -0,0 +1,89 @@
+diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp
+index 45f42ad2e3..ce10080469 100644
+--- a/xbmc/addons/Addon.cpp
++++ b/xbmc/addons/Addon.cpp
+@@ -397,13 +397,48 @@ AddonVersion CAddon::GetDependencyVersion(const std::string &dependencyID) const
+ return AddonVersion("0.0.0");
+ }
+
++void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context) {
++
++ if (addon->Type() == ADDON_SERVICE) {
++ std::string contextStr;
++ char cmd[255];
++
++ switch (context) {
++ case LE_ADDON_ENABLED:
++ contextStr = "enable";
++ break;
++ case LE_ADDON_DISABLED:
++ contextStr = "disable";
++ break;
++ case LE_ADDON_POST_INSTALL:
++ contextStr = "post-install";
++ break;
++ case LE_ADDON_PRE_UNINSTALL:
++ contextStr = "pre-uninstall";
++ break;
++ default:
++ contextStr = StringUtils::Format("unknown(%d)", context);
++ break;
++ }
++
++ snprintf(cmd, sizeof(cmd), "/usr/sbin/service-addon-wrapper %s %s %s",
++ contextStr.c_str(), addon->ID().c_str(), addon->Path().c_str());
++
++ system(cmd);
++ }
++}
++
+ void OnEnabled(const AddonPtr& addon)
+ {
++ LEAddonHook(addon, LE_ADDON_ENABLED);
++
+ addon->OnEnabled();
+ }
+
+ void OnDisabled(const AddonPtr& addon)
+ {
++ LEAddonHook(addon, LE_ADDON_DISABLED);
++
+ addon->OnDisabled();
+ }
+
+@@ -438,11 +476,15 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal)
+ }
+ // OE
+
++ LEAddonHook(addon, LE_ADDON_POST_INSTALL);
++
+ addon->OnPostInstall(update, modal);
+ }
+
+ void OnPreUnInstall(const AddonPtr& addon)
+ {
++ LEAddonHook(addon, LE_ADDON_PRE_UNINSTALL);
++
+ addon->OnPreUnInstall();
+ }
+
+diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h
+index 95f3f23437..23ad39116a 100644
+--- a/xbmc/addons/Addon.h
++++ b/xbmc/addons/Addon.h
+@@ -43,6 +43,15 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal);
+ void OnPreUnInstall(const AddonPtr& addon);
+ void OnPostUnInstall(const AddonPtr& addon);
+
++typedef enum {
++ LE_ADDON_ENABLED,
++ LE_ADDON_DISABLED,
++ LE_ADDON_POST_INSTALL,
++ LE_ADDON_PRE_UNINSTALL,
++} LE_ADDON_CONTEXT;
++
++void LEAddonHook(const AddonPtr& addon, const LE_ADDON_CONTEXT context);
++
+ class CAddon : public IAddon
+ {
+ public:
diff --git a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch b/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch
deleted file mode 100644
index 8b83bb8bca..0000000000
--- a/packages/mediacenter/kodi/patches/kodi-100.09-use-a-wrapper-to-setup-systemd-services.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-From 4abf9ef52d9f5cf625e196935683eb35f150e7e9 Mon Sep 17 00:00:00 2001
-From: MilhouseVH
-Date: Tue, 11 Jul 2017 17:46:48 +0100
-Subject: [PATCH] use a wrapper to setup systemd services
-
----
- xbmc/addons/Addon.cpp | 38 ++++++++++++++++++++++++++++++++++++++
- xbmc/addons/Addon.h | 2 ++
- 2 files changed, 40 insertions(+)
-
-diff --git a/xbmc/addons/Addon.cpp b/xbmc/addons/Addon.cpp
-index 45f42ad..5870328 100644
---- a/xbmc/addons/Addon.cpp
-+++ b/xbmc/addons/Addon.cpp
-@@ -397,13 +397,34 @@ AddonVersion CAddon::GetDependencyVersion(const std::string &dependencyID) const
- return AddonVersion("0.0.0");
- }
-
-+void CallOEWrapper(const std::string& ID, bool disable)
-+{
-+ char cmd[255];
-+ snprintf(cmd, sizeof(cmd), "/usr/lib/libreelec/systemd-addon-wrapper %s %d", ID.c_str(), disable);
-+ system(cmd);
-+}
-+
- void OnEnabled(const AddonPtr& addon)
- {
-+ AddonPtr localAddon;
-+
-+ // OE: systemctl enable & start on addon enable
-+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
-+ CallOEWrapper(addon->ID(), false);
-+ // OE
-+
- addon->OnEnabled();
- }
-
- void OnDisabled(const AddonPtr& addon)
- {
-+ AddonPtr localAddon;
-+
-+ // OE: systemctl stop & disable on addon disable
-+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE, false))
-+ CallOEWrapper(addon->ID(), true);
-+ // OE
-+
- addon->OnDisabled();
- }
-
-@@ -438,11 +459,28 @@ void OnPostInstall(const AddonPtr& addon, bool update, bool modal)
- }
- // OE
-
-+ AddonPtr localAddon;
-+
-+ // OE: systemctl stop & disable / enable & start on addon upgrade
-+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
-+ {
-+ CallOEWrapper(addon->ID(), true);
-+ CallOEWrapper(addon->ID(), false);
-+ }
-+ // OE
-+
- addon->OnPostInstall(update, modal);
- }
-
- void OnPreUnInstall(const AddonPtr& addon)
- {
-+ AddonPtr localAddon;
-+
-+ // OE: systemctl stop & disable on addon uninstall
-+ if (CServiceBroker::GetAddonMgr().GetAddon(addon->ID(), localAddon, ADDON_SERVICE))
-+ CallOEWrapper(addon->ID(), true);
-+ // OE
-+
- addon->OnPreUnInstall();
- }
-
-diff --git a/xbmc/addons/Addon.h b/xbmc/addons/Addon.h
-index 95f3f23..5f2223c 100644
---- a/xbmc/addons/Addon.h
-+++ b/xbmc/addons/Addon.h
-@@ -77,6 +77,8 @@ public:
- const InfoMap& ExtraInfo() const override { return m_addonInfo.ExtraInfo(); }
- const ADDONDEPS& GetDeps() const override { return m_addonInfo.GetDeps(); }
-
-+ void CallOEWrapper(const std::string& ID, bool disable);
-+
- std::string FanArt() const override
- {
- auto it = m_addonInfo.Art().find("fanart");
---
-2.7.4
-
diff --git a/packages/mediacenter/kodi/scripts/service-addon-wrapper b/packages/mediacenter/kodi/scripts/service-addon-wrapper
new file mode 100755
index 0000000000..83aca484fa
--- /dev/null
+++ b/packages/mediacenter/kodi/scripts/service-addon-wrapper
@@ -0,0 +1,111 @@
+#!/bin/sh
+################################################################################
+# This file is part of LibreELEC - https://www.libreelec.tv
+# Copyright (C) 2017-present Team LibreELEC
+#
+# LibreELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# LibreELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LibreELEC. If not, see .
+################################################################################
+
+if [ $# -ne 3 ] ; then
+ echo "$0 usage: context addon-id addon-path"
+ exit 1
+fi
+
+CONTEXT="$1"
+ADDON_ID="$2"
+ADDON_PATH="$3"
+
+if [ ! -d /storage/.config/system.d ] ; then
+ mkdir -p /storage/.config/system.d
+fi
+
+SERVICE_FILE="${ADDON_PATH}/system.d/${ADDON_ID}.service"
+
+if [ -f "${SERVICE_FILE}" ] ; then
+ case "${CONTEXT}" in
+ enable)
+ systemctl enable "${SERVICE_FILE}"
+ chmod +x "${ADDON_PATH}/bin"/*
+ systemctl start "${ADDON_ID}.service"
+ ;;
+ disable | pre-uninstall)
+ systemctl stop "${ADDON_ID}.service"
+ systemctl disable "${ADDON_ID}.service"
+ ;;
+ post-install)
+ # post-install is triggered on update as well,
+ # make sure to stop and re-install service
+ systemctl stop "${ADDON_ID}.service"
+ systemctl disable "${ADDON_ID}.service"
+ systemctl enable "${SERVICE_FILE}"
+ chmod +x "${ADDON_PATH}/bin"/*
+ systemctl start "${ADDON_ID}.service"
+ ;;
+ restart)
+ systemctl restart "${ADDON_ID}.service"
+ ;;
+ reload)
+ systemctl reload "${ADDON_ID}.service"
+ ;;
+ *)
+ echo "$0: unknown service context $CONTEXT"
+ exit 1
+ ;;
+ esac
+fi
+
+if [ ! -d /storage/.cache/kernel-overlays ] ; then
+ mkdir -p /storage/.cache/kernel-overlays
+fi
+
+# kernel-overlay addons built into the image have their
+# files installed in the default /usr/lib/kernel-overlays
+# location, not inside the kodi addon dir
+
+case "${ADDON_PATH}" in
+ /usr/share/kodi/addons/*)
+ OVERLAY_PATH="/usr/lib/kernel-overlays/${ADDON_ID}"
+ ;;
+ *)
+ OVERLAY_PATH="${ADDON_PATH}/kernel-overlay"
+ ;;
+esac
+
+create_overlay_conf() {
+ rm -f "${OVERLAY_CONF}"
+ echo "${OVERLAY_PATH}" > "${OVERLAY_CONF}"
+}
+
+if [ -d "${OVERLAY_PATH}" ] ; then
+ OVERLAY_CONF="/storage/.cache/kernel-overlays/50-${ADDON_ID}.conf"
+
+ case "${CONTEXT}" in
+ enable | post-install )
+ create_overlay_conf
+ ;;
+ disable | pre-uninstall )
+ rm -f "${OVERLAY_CONF}"
+ ;;
+ update )
+ if [ -e "${OVERLAY_CONF}" ] ; then
+ create_overlay_conf
+ fi
+ ;;
+ *)
+ echo "$0: unknown overlay context $CONTEXT"
+ exit 1
+ ;;
+ esac
+
+fi
diff --git a/packages/mediacenter/kodi/scripts/systemd-addon-wrapper b/packages/mediacenter/kodi/scripts/systemd-addon-wrapper
deleted file mode 100755
index 32630c8ca0..0000000000
--- a/packages/mediacenter/kodi/scripts/systemd-addon-wrapper
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/sh
-################################################################################
-# This file is part of OpenELEC - http://www.openelec.tv
-# Copyright (C) 2009-2014 Stephan Raue (stephan@openelec.tv)
-#
-# OpenELEC is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# OpenELEC is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with OpenELEC. If not, see .
-################################################################################
-
-if [ ! -d /storage/.config/system.d ] ; then
- mkdir -p /storage/.config/system.d
-fi
-
-if [ -f "/storage/.kodi/addons/$1/system.d/$1.service" ] ; then
- if [ "_$2" = "_1" ] ; then
- # disable = true: cleanup
- systemctl stop "$1.service"
- systemctl disable "$1.service"
- else
- # disable = false: setup
- systemctl enable "/storage/.kodi/addons/$1/system.d/$1.service"
- chmod +x "/storage/.kodi/addons/$1/bin"/*
- systemctl start "$1.service"
- fi
-fi
diff --git a/packages/sysutils/busybox/scripts/init b/packages/sysutils/busybox/scripts/init
index 69170c6986..4f72249796 100755
--- a/packages/sysutils/busybox/scripts/init
+++ b/packages/sysutils/busybox/scripts/init
@@ -1011,7 +1011,7 @@
mount --move /flash /sysroot/flash
mount --move /storage /sysroot/storage
- if [ ! -d "/sysroot/usr/lib/modules/$(uname -r)/" -a -f "/sysroot/usr/lib/systemd/systemd" ]; then
+ if [ ! -d "/sysroot/usr/lib/kernel-overlays/base/lib/modules/$(uname -r)/" -a -f "/sysroot/usr/lib/systemd/systemd" ]; then
echo ""
echo "NEVER TOUCH boot= in extlinux.conf / cmdline.txt!"
echo "If you don't know what you are doing,"
diff --git a/packages/sysutils/kmod/package.mk b/packages/sysutils/kmod/package.mk
index cb430be3d4..b398646a48 100644
--- a/packages/sysutils/kmod/package.mk
+++ b/packages/sysutils/kmod/package.mk
@@ -66,6 +66,7 @@ post_makeinstall_target() {
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/rmmod
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modinfo
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modprobe
+ ln -sf /usr/bin/kmod $INSTALL/usr/sbin/depmod
mkdir -p $INSTALL/etc
ln -sf /storage/.config/modprobe.d $INSTALL/etc/modprobe.d
diff --git a/packages/sysutils/systemd/package.mk b/packages/sysutils/systemd/package.mk
index b57864f6e6..c08ac6e746 100644
--- a/packages/sysutils/systemd/package.mk
+++ b/packages/sysutils/systemd/package.mk
@@ -205,8 +205,10 @@ post_makeinstall_target() {
cp $PKG_DIR/scripts/systemd-machine-id-setup $INSTALL/usr/bin
cp $PKG_DIR/scripts/userconfig-setup $INSTALL/usr/bin
- # provide 'halt', 'shutdown', 'reboot' & co.
mkdir -p $INSTALL/usr/sbin
+ cp $PKG_DIR/scripts/kernel-overlays-setup $INSTALL/usr/sbin
+
+ # provide 'halt', 'shutdown', 'reboot' & co.
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/halt
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/poweroff
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/reboot
@@ -255,5 +257,6 @@ post_install() {
enable_service machine-id.service
enable_service debugconfig.service
enable_service userconfig.service
+ enable_service kernel-overlays.service
enable_service hwdb.service
}
diff --git a/packages/sysutils/systemd/scripts/kernel-overlays-setup b/packages/sysutils/systemd/scripts/kernel-overlays-setup
new file mode 100755
index 0000000000..27326a46c7
--- /dev/null
+++ b/packages/sysutils/systemd/scripts/kernel-overlays-setup
@@ -0,0 +1,90 @@
+#!/bin/sh
+################################################################################
+# This file is part of LibreELEC - https://libreelec.tv
+# Copyright (C) 2017-present Team LibreELEC
+#
+# LibreELEC is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# LibreELEC is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with LibreELEC. If not, see .
+################################################################################
+
+SYSTEM_OVERLAYS_DIR=/usr/lib/kernel-overlays
+OVERLAY_CONFIG_DIR=/storage/.cache/kernel-overlays
+KVER=$(uname -r)
+MODULES_DIR="/var/lib/modules/${KVER}"
+FIRMWARE_DIR="/var/lib/firmware"
+
+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
+
+log "done"
diff --git a/packages/sysutils/systemd/system.d/kernel-overlays.service b/packages/sysutils/systemd/system.d/kernel-overlays.service
new file mode 100644
index 0000000000..5d771ac3a0
--- /dev/null
+++ b/packages/sysutils/systemd/system.d/kernel-overlays.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Create kernel modules tree from overlays
+DefaultDependencies=no
+After=var.mount
+Before=systemd-udevd.service systemd-udev-trigger.service systemd-modules-load.service systemd-remount-fs.service swap.service machine-id.service kmod-static-nodes.service
+
+[Service]
+Type=oneshot
+ExecStart=/usr/sbin/kernel-overlays-setup
+
+[Install]
+WantedBy=local-fs.target
diff --git a/packages/x11/driver/xf86-video-nvidia-legacy/package.mk b/packages/x11/driver/xf86-video-nvidia-legacy/package.mk
index 6b7512c1cb..00f772f630 100644
--- a/packages/x11/driver/xf86-video-nvidia-legacy/package.mk
+++ b/packages/x11/driver/xf86-video-nvidia-legacy/package.mk
@@ -67,8 +67,8 @@ makeinstall_target() {
# rename to not conflicting with Mesa libGL.so
cp -P libGL.so* $INSTALL/usr/lib/libGL_nvidia-legacy.so.1
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
- ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko
+ mkdir -p $INSTALL/$(get_full_module_dir)/nvidia
+ ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko
mkdir -p $INSTALL/usr/lib/nvidia-legacy
cp kernel/nvidia.ko $INSTALL/usr/lib/nvidia-legacy
diff --git a/packages/x11/driver/xf86-video-nvidia/package.mk b/packages/x11/driver/xf86-video-nvidia/package.mk
index 2c222a7023..3085475158 100644
--- a/packages/x11/driver/xf86-video-nvidia/package.mk
+++ b/packages/x11/driver/xf86-video-nvidia/package.mk
@@ -70,10 +70,10 @@ makeinstall_target() {
# rename to not conflicting with Mesa libGL.so
cp -P libGL.so.$PKG_VERSION $INSTALL/usr/lib/libGL_nvidia.so.1
- mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
- ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko
- cp -P kernel/nvidia-uvm.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
- cp -P kernel/nvidia-modeset.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
+ mkdir -p $INSTALL/$(get_full_module_dir)/nvidia
+ ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko
+ cp -P kernel/nvidia-uvm.ko $INSTALL/$(get_full_module_dir)/nvidia
+ cp -P kernel/nvidia-modeset.ko $INSTALL/$(get_full_module_dir)/nvidia
mkdir -p $INSTALL/usr/lib/nvidia
cp -P kernel/nvidia.ko $INSTALL/usr/lib/nvidia
diff --git a/scripts/create_addon b/scripts/create_addon
index 777ad76c7a..89131d1e40 100755
--- a/scripts/create_addon
+++ b/scripts/create_addon
@@ -101,7 +101,7 @@ if [ "$PKG_IS_ADDON" = "yes" ] ; then
if [ "$(type -t addon)" = "function" ]; then
addon
else
- install_binary_addon $PKG_NAME $PKG_ADDON_ID
+ install_binary_addon $PKG_ADDON_ID
fi
# HACK for packages that provide multiple addons like screensavers.rsxs
diff --git a/scripts/image b/scripts/image
index e1674fbbd1..491f38dc72 100755
--- a/scripts/image
+++ b/scripts/image
@@ -215,20 +215,27 @@ if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; th
done
fi
-# run depmod
-MODVER=$(basename $(ls -d $INSTALL/usr/lib/modules/*))
-find $INSTALL/usr/lib/modules/$MODVER/ -name *.ko | \
- sed -e "s,$INSTALL/usr/lib/modules/$MODVER/,," > $INSTALL/usr/lib/modules/$MODVER/modules.order
-$TOOLCHAIN/bin/depmod -b $INSTALL/usr -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $MODVER
+# run depmod for base overlay modules
+MODVER=$(basename $(ls -d $INSTALL/usr/lib/kernel-overlays/base/lib/modules/*))
+find $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/ -name *.ko | \
+ sed -e "s,$INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/,," \
+ > $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/modules.order
+$TOOLCHAIN/bin/depmod -b $INSTALL/usr/lib/kernel-overlays/base -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $MODVER
# strip kernel modules
if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then
STRIP=$TOOLCHAIN/lib/gcc-linaro-aarch64-elf/bin/aarch64-elf-strip
fi
-for MOD in `find $INSTALL/usr/lib/modules/ -type f -name *.ko`; do
+for MOD in `find $INSTALL/usr/lib/kernel-overlays/ -type f -name *.ko`; do
$STRIP --strip-debug $MOD
done
+# symlink overlayed modules to /usr/lib/modules
+ln -sT /var/lib/modules $INSTALL/usr/lib/modules
+
+# symlink overlayed firmware to /usr/lib/firmware
+ln -sT /var/lib/firmware $INSTALL/usr/lib/firmware
+
# make target dir
mkdir -p $TARGET_IMG
rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
diff --git a/scripts/install_addon b/scripts/install_addon
index 746d753b27..6f23bad429 100755
--- a/scripts/install_addon
+++ b/scripts/install_addon
@@ -22,81 +22,10 @@
[ -n "$2" ] && PKG_ADDON_ID=$2
-IFS=" "
-for i in $PKG_ADDON_REQUIRES; do
- REQUIRES_ADDONNAME=`echo $i | cut -f1 -d ":"`
- REQUIRES_ADDONVERSION=`echo $i | cut -f2 -d ":"`
- REQUIRES="$REQUIRES\n "
-done
+ADDON_DIRECTORY="$ADDON_BUILD/$PKG_ADDON_ID"
-unset IFS
+mkdir -p "$ADDON_DIRECTORY"
-mkdir -p $ADDON_BUILD/$PKG_ADDON_ID
+install_addon_files "$ADDON_DIRECTORY"
-if [ ! -f $ADDON_BUILD/$PKG_ADDON_ID/addon.xml ]; then
- cp config/addon/${PKG_ADDON_TYPE}.xml $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
- ADDONVER=$ADDON_VERSION.$PKG_REV
-else
- if [ ! $(which xmlstarlet) ]; then
- echo "*** ERROR: $ADDON has addon.xml shipped, you need 'xmlstarlet' ***"
- exit 255
- fi
- ADDONVER="$(xmlstarlet sel -t -v "/addon/@version" $ADDON_BUILD/$PKG_ADDON_ID/addon.xml).$PKG_REV"
- xmlstarlet ed --inplace -u "/addon[@version]/@version" -v "$ADDONVER" $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
-fi
-
-if [ -d $PKG_DIR/source ]; then
- cp -R $PKG_DIR/source/* $ADDON_BUILD/$PKG_ADDON_ID
-fi
-
-if [ -f $PKG_DIR/icon/icon.png ]; then
- mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/resources
- cp $PKG_DIR/icon/icon.png $ADDON_BUILD/$PKG_ADDON_ID/resources
-fi
-
-if [ -f $DISTRO_DIR/$DISTRO/addons/fanart.png ]; then
- mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/resources
- cp $DISTRO_DIR/$DISTRO/addons/fanart.png $ADDON_BUILD/$PKG_ADDON_ID/resources
-fi
-
-for f in $PKG_DIR/source/resources/screenshot-*.{jpg,png}; do
- if [ -f "$f" ]; then
- PKG_ADDON_SCREENSHOT+="resources/$(basename $f)\n"
- fi
-done
-
-if [ -f $PKG_DIR/changelog.txt ]; then
- sed -e "/@PKG_ADDON_NEWS@/ \
- {
- r $PKG_DIR/changelog.txt
- d
- }" -i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
-else
- sed -e "s|@PKG_ADDON_NEWS@||g" -i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
-fi
-
-PROVIDER_NAME="Team LibreELEC"
-if [ ! -z "$PKG_MAINTAINER" ] ; then
- PROVIDER_NAME="$PKG_MAINTAINER"
-fi
-
-ADDON_NAME="$PKG_NAME"
-if [ ! -z "$PKG_ADDON_NAME" ] ; then
- ADDON_NAME="$PKG_ADDON_NAME"
-fi
-
-$SED -e "s|@PKG_ADDON_ID@|$PKG_ADDON_ID|g" \
- -e "s|@ADDON_NAME@|$ADDON_NAME|g" \
- -e "s|@ADDON_VERSION@|$ADDON_VERSION.$PKG_REV|g" \
- -e "s|@REQUIRES@|$REQUIRES|g" \
- -e "s|@PKG_SHORTDESC@|$PKG_SHORTDESC|g" \
- -e "s|@OS_VERSION@|$OS_VERSION|g" \
- -e "s|@PKG_LONGDESC@|$PKG_LONGDESC|g" \
- -e "s|@PKG_DISCLAIMER@|$PKG_DISCLAIMER|g" \
- -e "s|@PROVIDER_NAME@|$PROVIDER_NAME|g" \
- -e "s|@PKG_ADDON_PROVIDES@|$PKG_ADDON_PROVIDES|g" \
- -e "s|@PKG_ADDON_SCREENSHOT@|$PKG_ADDON_SCREENSHOT|g" \
- -e "s|@PKG_ADDON_BROKEN@|$PKG_ADDON_BROKEN|g" \
- -i $ADDON_BUILD/$PKG_ADDON_ID/addon.xml
-
-debug_strip $ADDON_BUILD/$PKG_ADDON_ID
+debug_strip "$ADDON_DIRECTORY"