mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-31 22:47:51 +00:00
Merge pull request #1835 from HiassofT/le9-module-overlays
add support for optional kernel modules in image and from addons
This commit is contained in:
commit
cda34c50c3
117
config/functions
117
config/functions
@ -143,7 +143,24 @@ kernel_version() {
|
|||||||
|
|
||||||
# get kernel module dir
|
# get kernel module dir
|
||||||
get_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
|
# get package's build dir
|
||||||
@ -172,16 +189,106 @@ get_pkg_variable() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
install_binary_addon() {
|
install_binary_addon() {
|
||||||
local addon_name="$1" addon_id="$2" addon_so
|
local addon_id="$1" addon_so
|
||||||
|
|
||||||
mkdir -p $ADDON_BUILD/$addon_id/
|
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
|
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
|
chmod +x $ADDON_BUILD/$addon_id/$addon_so
|
||||||
fi
|
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 <import addon=\"$requires_addonname\" version=\"$requires_addonversion\" />"
|
||||||
|
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+="<screenshot>resources/$(basename $f)</screenshot>\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() {
|
tolower() {
|
||||||
|
@ -48,6 +48,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -46,6 +46,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcm_sta
|
mkdir -p $INSTALL/$(get_full_module_dir)/bcm_sta
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,9 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd
|
mkdir -p $INSTALL/$(get_full_module_dir)/bcmdhd
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/bcmdhd
|
cp *.ko $INSTALL/$(get_full_module_dir)/bcmdhd
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/lib/firmware/brcm
|
mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm
|
||||||
cp $PKG_DIR/config/config.txt $INSTALL/usr/lib/firmware/brcm
|
cp $PKG_DIR/config/config.txt $INSTALL/$(get_full_firmware_dir)/brcm
|
||||||
}
|
}
|
||||||
|
@ -58,8 +58,8 @@ pre_configure_target() {
|
|||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
cd $PKG_BUILD
|
cd $PKG_BUILD
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun
|
mkdir -p $INSTALL/$(get_full_module_dir)/hdhomerun
|
||||||
cp kernel/*.ko $INSTALL/usr/lib/modules/$(get_module_dir)/hdhomerun/
|
cp kernel/*.ko $INSTALL/$(get_full_module_dir)/hdhomerun/
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/bin
|
mkdir -p $INSTALL/usr/bin
|
||||||
cp -PR .$TARGET_NAME/userhdhomerun $INSTALL/usr/bin
|
cp -PR .$TARGET_NAME/userhdhomerun $INSTALL/usr/bin
|
||||||
|
@ -42,6 +42,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$KERNEL_VER/updates
|
mkdir -p $INSTALL/$(get_full_module_dir)/updates
|
||||||
find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/usr/lib/modules/$KERNEL_VER/updates \;
|
find $PKG_BUILD/v4l/ -name \*.ko -exec cp {} $INSTALL/$(get_full_module_dir)/updates \;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,6 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
cp *.ko $INSTALL/usr/lib/modules/$(get_module_dir)/$PKG_NAME
|
cp *.ko $INSTALL/$(get_full_module_dir)/$PKG_NAME
|
||||||
}
|
}
|
||||||
|
@ -38,13 +38,13 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_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
|
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
|
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
|
fi
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/lib/firmware
|
mkdir -p $INSTALL/$(get_full_firmware_dir)
|
||||||
cp firmware/* $INSTALL/usr/lib/firmware
|
cp firmware/* $INSTALL/$(get_full_firmware_dir)
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
DESTDIR=$INSTALL/usr ./install
|
DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
|
||||||
}
|
}
|
||||||
|
|
||||||
post_makeinstall_target() {
|
post_makeinstall_target() {
|
||||||
|
@ -35,5 +35,5 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
DESTDIR=$INSTALL/usr ./install
|
DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/firmware/vpu
|
mkdir -p $INSTALL/$(get_full_firmware_dir)/vpu
|
||||||
cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/usr/lib/firmware/vpu
|
cp -P firmware/vpu/vpu_fw_imx6d.bin $INSTALL/$(get_full_firmware_dir)/vpu
|
||||||
cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/usr/lib/firmware/vpu
|
cp -P firmware/vpu/vpu_fw_imx6q.bin $INSTALL/$(get_full_firmware_dir)/vpu
|
||||||
}
|
}
|
||||||
|
@ -36,5 +36,5 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
DESTDIR=$INSTALL/usr ./install
|
DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ make_target() {
|
|||||||
|
|
||||||
# Install additional miscellaneous drivers
|
# Install additional miscellaneous drivers
|
||||||
makeinstall_target() {
|
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="${PKG_DIR}/firmwares/any.dat ${PKG_DIR}/firmwares/${TARGET_ARCH}.dat"
|
||||||
FW_LISTS+=" ${PROJECT_DIR}/${PROJECT}/${PKG_NAME}/firmwares/any.dat"
|
FW_LISTS+=" ${PROJECT_DIR}/${PROJECT}/${PKG_NAME}/firmwares/any.dat"
|
||||||
|
@ -36,5 +36,5 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
DESTDIR=$INSTALL/usr ./install
|
DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
|
||||||
}
|
}
|
||||||
|
@ -36,20 +36,20 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
mkdir -p $INSTALL/usr/lib/firmware/brcm
|
mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm
|
||||||
|
|
||||||
# AP6255
|
# AP6255
|
||||||
cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/usr/lib/firmware/brcm
|
cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm
|
||||||
cp -P bcm_ampak/config/6255/nvram.txt $INSTALL/usr/lib/firmware/brcm/nvram_ap6255.txt
|
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/usr/lib/firmware/brcm/bcm4345c0.hcd
|
cp -P bcm_ampak/config/6255/BT/BCM4345C0.hcd $INSTALL/$(get_full_firmware_dir)/brcm/bcm4345c0.hcd
|
||||||
|
|
||||||
# AP6330
|
# AP6330
|
||||||
cp -PR bcm_ampak/config/AP6330/Wi-Fi/fw_bcm40183b2*.bin $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/usr/lib/firmware/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/usr/lib/firmware/brcm
|
cp -P bcm_ampak/config/AP6330/BT/bcm40183b2.hcd $INSTALL/$(get_full_firmware_dir)/brcm
|
||||||
|
|
||||||
# AP6335
|
# AP6335
|
||||||
cp -PR bcm_ampak/config/6335/fw_bcm4339a0_*.bin $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/usr/lib/firmware/brcm/nvram_ap6335.txt
|
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/usr/lib/firmware/brcm
|
cp -P bcm_ampak/config/6335/BT/bcm4335c0.hcd $INSTALL/$(get_full_firmware_dir)/brcm
|
||||||
}
|
}
|
||||||
|
@ -36,5 +36,5 @@ make_target() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
makeinstall_target() {
|
makeinstall_target() {
|
||||||
DESTDIR=$INSTALL/usr ./install
|
DESTDIR=$INSTALL/$(get_kernel_overlay_dir) ./install
|
||||||
}
|
}
|
||||||
|
@ -194,9 +194,9 @@ pre_make_target() {
|
|||||||
|
|
||||||
make_target() {
|
make_target() {
|
||||||
LDFLAGS="" make modules
|
LDFLAGS="" make modules
|
||||||
LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/usr DEPMOD="$TOOLCHAIN/bin/depmod" modules_install
|
LDFLAGS="" make INSTALL_MOD_PATH=$INSTALL/$(get_kernel_overlay_dir) DEPMOD="$TOOLCHAIN/bin/depmod" modules_install
|
||||||
rm -f $INSTALL/usr/lib/modules/*/build
|
rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/build
|
||||||
rm -f $INSTALL/usr/lib/modules/*/source
|
rm -f $INSTALL/$(get_kernel_overlay_dir)/lib/modules/*/source
|
||||||
|
|
||||||
( cd $ROOT
|
( cd $ROOT
|
||||||
rm -rf $BUILD/initramfs
|
rm -rf $BUILD/initramfs
|
||||||
@ -247,7 +247,7 @@ makeinstall_init() {
|
|||||||
mkdir -p $INSTALL/usr/lib/modules
|
mkdir -p $INSTALL/usr/lib/modules
|
||||||
|
|
||||||
for i in $INITRAMFS_MODULES; do
|
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
|
if [ -n "$module" ]; then
|
||||||
echo $i >> $INSTALL/etc/modules
|
echo $i >> $INSTALL/etc/modules
|
||||||
cp $module $INSTALL/usr/lib/modules/`basename $module`
|
cp $module $INSTALL/usr/lib/modules/`basename $module`
|
||||||
@ -257,15 +257,15 @@ makeinstall_init() {
|
|||||||
|
|
||||||
if [ "$UVESAFB_SUPPORT" = yes ]; then
|
if [ "$UVESAFB_SUPPORT" = yes ]; then
|
||||||
mkdir -p $INSTALL/usr/lib/modules
|
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`
|
cp $uvesafb $INSTALL/usr/lib/modules/`basename $uvesafb`
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
post_install() {
|
post_install() {
|
||||||
mkdir -p $INSTALL/usr/lib/firmware/
|
mkdir -p $INSTALL/$(get_full_firmware_dir)/
|
||||||
ln -sf /storage/.config/firmware/ $INSTALL/usr/lib/firmware/updates
|
ln -sf /storage/.config/firmware/ $INSTALL/$(get_full_firmware_dir)/updates
|
||||||
|
|
||||||
# bluez looks in /etc/firmware/
|
# bluez looks in /etc/firmware/
|
||||||
ln -sf /usr/lib/firmware/ $INSTALL/etc/firmware
|
ln -sf /$(get_full_firmware_dir)/ $INSTALL/etc/firmware
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ PKG_LONGDESC="inputstream.adaptive"
|
|||||||
PKG_IS_ADDON="yes"
|
PKG_IS_ADDON="yes"
|
||||||
|
|
||||||
addon() {
|
addon() {
|
||||||
install_binary_addon $PKG_NAME $PKG_ADDON_ID
|
install_binary_addon $PKG_ADDON_ID
|
||||||
|
|
||||||
mkdir -p $ADDON_BUILD/$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
|
cp -P $PKG_BUILD/.$TARGET_NAME/wvdecrypter/libssd_wv.so $ADDON_BUILD/$PKG_ADDON_ID
|
||||||
|
@ -41,7 +41,7 @@ addon() {
|
|||||||
for _ADDON in $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/* ; do
|
for _ADDON in $PKG_BUILD/.install_pkg/usr/share/$MEDIACENTER/addons/* ; do
|
||||||
_ADDON_ID=$(basename $_ADDON)
|
_ADDON_ID=$(basename $_ADDON)
|
||||||
|
|
||||||
install_binary_addon $_ADDON_ID $_ADDON_ID
|
install_binary_addon $_ADDON_ID
|
||||||
|
|
||||||
MULTI_ADDONS="$MULTI_ADDONS $_ADDON_ID"
|
MULTI_ADDONS="$MULTI_ADDONS $_ADDON_ID"
|
||||||
done
|
done
|
||||||
|
@ -271,8 +271,8 @@ post_makeinstall_target() {
|
|||||||
cp $PKG_DIR/scripts/kodi-config $INSTALL/usr/lib/kodi
|
cp $PKG_DIR/scripts/kodi-config $INSTALL/usr/lib/kodi
|
||||||
cp $PKG_DIR/scripts/kodi.sh $INSTALL/usr/lib/kodi
|
cp $PKG_DIR/scripts/kodi.sh $INSTALL/usr/lib/kodi
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/lib/libreelec
|
mkdir -p $INSTALL/usr/sbin
|
||||||
cp $PKG_DIR/scripts/systemd-addon-wrapper $INSTALL/usr/lib/libreelec
|
cp $PKG_DIR/scripts/service-addon-wrapper $INSTALL/usr/sbin
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/bin
|
mkdir -p $INSTALL/usr/bin
|
||||||
cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin
|
cp $PKG_DIR/scripts/cputemp $INSTALL/usr/bin
|
||||||
|
@ -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:
|
@ -1,94 +0,0 @@
|
|||||||
From 4abf9ef52d9f5cf625e196935683eb35f150e7e9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: MilhouseVH <milhouseVH.github@nmacleod.com>
|
|
||||||
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
|
|
||||||
|
|
111
packages/mediacenter/kodi/scripts/service-addon-wrapper
Executable file
111
packages/mediacenter/kodi/scripts/service-addon-wrapper
Executable file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
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
|
@ -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 <http://www.gnu.org/licenses/>.
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
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
|
|
@ -1011,7 +1011,7 @@
|
|||||||
mount --move /flash /sysroot/flash
|
mount --move /flash /sysroot/flash
|
||||||
mount --move /storage /sysroot/storage
|
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 ""
|
||||||
echo "NEVER TOUCH boot= in extlinux.conf / cmdline.txt!"
|
echo "NEVER TOUCH boot= in extlinux.conf / cmdline.txt!"
|
||||||
echo "If you don't know what you are doing,"
|
echo "If you don't know what you are doing,"
|
||||||
|
@ -66,6 +66,7 @@ post_makeinstall_target() {
|
|||||||
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/rmmod
|
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/modinfo
|
||||||
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modprobe
|
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/modprobe
|
||||||
|
ln -sf /usr/bin/kmod $INSTALL/usr/sbin/depmod
|
||||||
|
|
||||||
mkdir -p $INSTALL/etc
|
mkdir -p $INSTALL/etc
|
||||||
ln -sf /storage/.config/modprobe.d $INSTALL/etc/modprobe.d
|
ln -sf /storage/.config/modprobe.d $INSTALL/etc/modprobe.d
|
||||||
|
@ -205,8 +205,10 @@ post_makeinstall_target() {
|
|||||||
cp $PKG_DIR/scripts/systemd-machine-id-setup $INSTALL/usr/bin
|
cp $PKG_DIR/scripts/systemd-machine-id-setup $INSTALL/usr/bin
|
||||||
cp $PKG_DIR/scripts/userconfig-setup $INSTALL/usr/bin
|
cp $PKG_DIR/scripts/userconfig-setup $INSTALL/usr/bin
|
||||||
|
|
||||||
# provide 'halt', 'shutdown', 'reboot' & co.
|
|
||||||
mkdir -p $INSTALL/usr/sbin
|
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/halt
|
||||||
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/poweroff
|
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/poweroff
|
||||||
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/reboot
|
ln -sf /usr/bin/systemctl $INSTALL/usr/sbin/reboot
|
||||||
@ -255,5 +257,6 @@ post_install() {
|
|||||||
enable_service machine-id.service
|
enable_service machine-id.service
|
||||||
enable_service debugconfig.service
|
enable_service debugconfig.service
|
||||||
enable_service userconfig.service
|
enable_service userconfig.service
|
||||||
|
enable_service kernel-overlays.service
|
||||||
enable_service hwdb.service
|
enable_service hwdb.service
|
||||||
}
|
}
|
||||||
|
90
packages/sysutils/systemd/scripts/kernel-overlays-setup
Executable file
90
packages/sysutils/systemd/scripts/kernel-overlays-setup
Executable file
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
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"
|
12
packages/sysutils/systemd/system.d/kernel-overlays.service
Normal file
12
packages/sysutils/systemd/system.d/kernel-overlays.service
Normal file
@ -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
|
@ -67,8 +67,8 @@ makeinstall_target() {
|
|||||||
# rename to not conflicting with Mesa libGL.so
|
# rename to not conflicting with Mesa libGL.so
|
||||||
cp -P libGL.so* $INSTALL/usr/lib/libGL_nvidia-legacy.so.1
|
cp -P libGL.so* $INSTALL/usr/lib/libGL_nvidia-legacy.so.1
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
|
mkdir -p $INSTALL/$(get_full_module_dir)/nvidia
|
||||||
ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko
|
ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/lib/nvidia-legacy
|
mkdir -p $INSTALL/usr/lib/nvidia-legacy
|
||||||
cp kernel/nvidia.ko $INSTALL/usr/lib/nvidia-legacy
|
cp kernel/nvidia.ko $INSTALL/usr/lib/nvidia-legacy
|
||||||
|
@ -70,10 +70,10 @@ makeinstall_target() {
|
|||||||
# rename to not conflicting with Mesa libGL.so
|
# rename to not conflicting with Mesa libGL.so
|
||||||
cp -P libGL.so.$PKG_VERSION $INSTALL/usr/lib/libGL_nvidia.so.1
|
cp -P libGL.so.$PKG_VERSION $INSTALL/usr/lib/libGL_nvidia.so.1
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
|
mkdir -p $INSTALL/$(get_full_module_dir)/nvidia
|
||||||
ln -sf /var/lib/nvidia.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia/nvidia.ko
|
ln -sf /var/lib/nvidia.ko $INSTALL/$(get_full_module_dir)/nvidia/nvidia.ko
|
||||||
cp -P kernel/nvidia-uvm.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
|
cp -P kernel/nvidia-uvm.ko $INSTALL/$(get_full_module_dir)/nvidia
|
||||||
cp -P kernel/nvidia-modeset.ko $INSTALL/usr/lib/modules/$(get_module_dir)/nvidia
|
cp -P kernel/nvidia-modeset.ko $INSTALL/$(get_full_module_dir)/nvidia
|
||||||
|
|
||||||
mkdir -p $INSTALL/usr/lib/nvidia
|
mkdir -p $INSTALL/usr/lib/nvidia
|
||||||
cp -P kernel/nvidia.ko $INSTALL/usr/lib/nvidia
|
cp -P kernel/nvidia.ko $INSTALL/usr/lib/nvidia
|
||||||
|
@ -101,7 +101,7 @@ if [ "$PKG_IS_ADDON" = "yes" ] ; then
|
|||||||
if [ "$(type -t addon)" = "function" ]; then
|
if [ "$(type -t addon)" = "function" ]; then
|
||||||
addon
|
addon
|
||||||
else
|
else
|
||||||
install_binary_addon $PKG_NAME $PKG_ADDON_ID
|
install_binary_addon $PKG_ADDON_ID
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# HACK for packages that provide multiple addons like screensavers.rsxs
|
# HACK for packages that provide multiple addons like screensavers.rsxs
|
||||||
|
@ -215,20 +215,27 @@ if [ -n "$DEVICE" -a -d "$PROJECT_DIR/$PROJECT/devices/$DEVICE/filesystem" ]; th
|
|||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# run depmod
|
# run depmod for base overlay modules
|
||||||
MODVER=$(basename $(ls -d $INSTALL/usr/lib/modules/*))
|
MODVER=$(basename $(ls -d $INSTALL/usr/lib/kernel-overlays/base/lib/modules/*))
|
||||||
find $INSTALL/usr/lib/modules/$MODVER/ -name *.ko | \
|
find $INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/ -name *.ko | \
|
||||||
sed -e "s,$INSTALL/usr/lib/modules/$MODVER/,," > $INSTALL/usr/lib/modules/$MODVER/modules.order
|
sed -e "s,$INSTALL/usr/lib/kernel-overlays/base/lib/modules/$MODVER/,," \
|
||||||
$TOOLCHAIN/bin/depmod -b $INSTALL/usr -a -e -F "$BUILD/linux-$(kernel_version)/System.map" $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
|
# strip kernel modules
|
||||||
if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then
|
if [ "$TARGET_KERNEL_ARCH" = "arm64" -a "$TARGET_ARCH" = "arm" ]; then
|
||||||
STRIP=$TOOLCHAIN/lib/gcc-linaro-aarch64-elf/bin/aarch64-elf-strip
|
STRIP=$TOOLCHAIN/lib/gcc-linaro-aarch64-elf/bin/aarch64-elf-strip
|
||||||
fi
|
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
|
$STRIP --strip-debug $MOD
|
||||||
done
|
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
|
# make target dir
|
||||||
mkdir -p $TARGET_IMG
|
mkdir -p $TARGET_IMG
|
||||||
rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
|
rm -rf $TARGET_IMG/$IMAGE_NAME.kernel
|
||||||
|
@ -22,81 +22,10 @@
|
|||||||
|
|
||||||
[ -n "$2" ] && PKG_ADDON_ID=$2
|
[ -n "$2" ] && PKG_ADDON_ID=$2
|
||||||
|
|
||||||
IFS=" "
|
ADDON_DIRECTORY="$ADDON_BUILD/$PKG_ADDON_ID"
|
||||||
for i in $PKG_ADDON_REQUIRES; do
|
|
||||||
REQUIRES_ADDONNAME=`echo $i | cut -f1 -d ":"`
|
|
||||||
REQUIRES_ADDONVERSION=`echo $i | cut -f2 -d ":"`
|
|
||||||
REQUIRES="$REQUIRES\n <import addon=\"$REQUIRES_ADDONNAME\" version=\"$REQUIRES_ADDONVERSION\" />"
|
|
||||||
done
|
|
||||||
|
|
||||||
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
|
debug_strip "$ADDON_DIRECTORY"
|
||||||
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+="<screenshot>resources/$(basename $f)</screenshot>\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
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user