diff --git a/VERSION b/VERSION index f682efea..694ee345 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4-alpha12 +0.5-alpha1 diff --git a/files/board/arpl/overlayfs/opt/arpl/include/consts.sh b/files/board/arpl/overlayfs/opt/arpl/include/consts.sh index 922955d7..7951d51e 100644 --- a/files/board/arpl/overlayfs/opt/arpl/include/consts.sh +++ b/files/board/arpl/overlayfs/opt/arpl/include/consts.sh @@ -1,5 +1,5 @@ -ARPL_VERSION="0.4-alpha12" +ARPL_VERSION="0.5-alpha1" # Define paths TMP_PATH="/tmp" diff --git a/files/board/arpl/overlayfs/opt/arpl/include/modules.sh b/files/board/arpl/overlayfs/opt/arpl/include/modules.sh new file mode 100644 index 00000000..ee547932 --- /dev/null +++ b/files/board/arpl/overlayfs/opt/arpl/include/modules.sh @@ -0,0 +1,22 @@ + +############################################################################### +# Return list of all modules available +# 1 - Platform +# 2 - Kernel Version +function getAllModules() { + PLATFORM=${1} + KVER=${2} + # Unzip modules for temporary folder + rm -rf "${TMP_PATH}/modules" + mkdir -p "${TMP_PATH}/modules" + gzip -dc "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" | tar xf - -C "${TMP_PATH}/modules" + # Get list of all modules + for F in `ls ${TMP_PATH}/modules/*.ko`; do + X=`basename ${F}` + M=${X:0:-3} + DESC=`modinfo ${F} | awk -F':' '/description/{ print $2}' | awk '{sub(/^[ ]+/,""); print}'` + [ -z "${DESC}" ] && DESC="${X}" + echo "${M} \"${DESC}\"" + done + rm -rf "${TMP_PATH}/modules" +} diff --git a/files/board/arpl/overlayfs/opt/arpl/init.sh b/files/board/arpl/overlayfs/opt/arpl/init.sh index 06b3cf35..37fccc4b 100755 --- a/files/board/arpl/overlayfs/opt/arpl/init.sh +++ b/files/board/arpl/overlayfs/opt/arpl/init.sh @@ -82,6 +82,7 @@ if [ ! -f "${USER_CONFIG_FILE}" ]; then writeConfigKey "addons" "{}" "${USER_CONFIG_FILE}" writeConfigKey "addons.misc" "" "${USER_CONFIG_FILE}" writeConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}" + writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" # Initialize with real MAC writeConfigKey "cmdline.netif_num" "1" "${USER_CONFIG_FILE}" writeConfigKey "cmdline.mac1" "${MACF}" "${USER_CONFIG_FILE}" diff --git a/files/board/arpl/overlayfs/opt/arpl/menu.sh b/files/board/arpl/overlayfs/opt/arpl/menu.sh index 0aaac372..a9a48ca0 100755 --- a/files/board/arpl/overlayfs/opt/arpl/menu.sh +++ b/files/board/arpl/overlayfs/opt/arpl/menu.sh @@ -2,6 +2,7 @@ . /opt/arpl/include/functions.sh . /opt/arpl/include/addons.sh +. /opt/arpl/include/modules.sh # Check partition 3 space, if < 2GiB uses ramdisk RAMCACHE=0 @@ -61,6 +62,8 @@ function backtitle() { function modelMenu() { RESTRICT=1 FLGBETA=0 + dialog --backtitle "`backtitle`" --title "Model" --aspect 18 \ + --infobox "Reading models" 0 0 while true; do echo "" > "${TMP_PATH}/menu" FLGNEX=0 @@ -126,6 +129,8 @@ function buildMenu() { resp=$(<${TMP_PATH}/resp) [ -z "${resp}" ] && return if [ "${BUILD}" != "${resp}" ]; then + dialog --backtitle "`backtitle`" --title "Build Number" \ + --infobox "Reconfiguring Synoinfo, Addons and Modules" 0 0 BUILD=${resp} writeConfigKey "build" "${BUILD}" "${USER_CONFIG_FILE}" # Delete synoinfo and reload model/build synoinfo @@ -142,6 +147,11 @@ function buildMenu() { deleteConfigKey "addons.${ADDON}" "${USER_CONFIG_FILE}" fi done < <(readConfigMap "addons" "${USER_CONFIG_FILE}") + # Rebuild modules + writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" + while read ID DESC; do + writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}" + done < <(getAllModules "${PLATFORM}" "${KVER}") # Remove old files rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" DIRTY=1 @@ -314,7 +324,7 @@ function cmdlineMenu() { while IFS="=" read KEY VALUE; do [ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}" done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}") - echo "a \"Add/edit an cmdline item\"" > "${TMP_PATH}/menu" + echo "a \"Add/edit a cmdline item\"" > "${TMP_PATH}/menu" echo "d \"Delete cmdline item(s)\"" >> "${TMP_PATH}/menu" echo "c \"Define a custom MAC\"" >> "${TMP_PATH}/menu" echo "s \"Show user cmdline\"" >> "${TMP_PATH}/menu" @@ -445,7 +455,7 @@ function synoinfoMenu() { [ -n "${KEY}" ] && SYNOINFO["${KEY}"]="${VALUE}" done < <(readConfigMap "synoinfo" "${USER_CONFIG_FILE}") - echo "a \"Add/edit an synoinfo item\"" > "${TMP_PATH}/menu" + echo "a \"Add/edit a synoinfo item\"" > "${TMP_PATH}/menu" echo "d \"Delete synoinfo item(s)\"" >> "${TMP_PATH}/menu" if [ "${DT}" != "true" ]; then echo "x \"Set maxdisks manually\"" >> "${TMP_PATH}/menu" @@ -518,6 +528,85 @@ function synoinfoMenu() { done } +############################################################################### +# Permit user select the modules to include +function selectModules() { + PLATFORM="`readModelKey "${MODEL}" "platform"`" + KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`" + dialog --backtitle "`backtitle`" --title "Modules" --aspect 18 \ + --infobox "Reading modules" 0 0 + ALLMODULES=`getAllModules "${PLATFORM}" "${KVER}"` + unset USERMODULES + declare -A USERMODULES + while IFS="=" read KEY VALUE; do + [ -n "${KEY}" ] && USERMODULES["${KEY}"]="${VALUE}" + done < <(readConfigMap "modules" "${USER_CONFIG_FILE}") + # menu loop + while true; do + dialog --backtitle "`backtitle`" --menu "Choose a option" 0 0 0 \ + s "Show selected modules" \ + a "Select all modules" \ + d "Deselect all modules" \ + c "Choose modules to include" \ + e "Exit" \ + 2>${TMP_PATH}/resp + [ $? -ne 0 ] && break + case "`<${TMP_PATH}/resp`" in + s) ITEMS="" + for KEY in ${!USERMODULES[@]}; do + ITEMS+="${KEY}: ${USERMODULES[$KEY]}\n" + done + dialog --backtitle "`backtitle`" --title "User modules" \ + --msgbox "${ITEMS}" 0 0 + ;; + a) dialog --backtitle "`backtitle`" --title "Modules" \ + --infobox "Selecting all modules" 0 0 + unset USERMODULES + declare -A USERMODULES + writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" + while read ID DESC; do + USERMODULES["${ID}"]="" + writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}" + done <<<${ALLMODULES} + ;; + + d) dialog --backtitle "`backtitle`" --title "Modules" \ + --infobox "Deselecting all modules" 0 0 + writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" + unset USERMODULES + declare -A USERMODULES + ;; + + c) + rm -f "${TMP_PATH}/opts" + while read ID DESC; do + arrayExistItem "${ID}" "${!USERMODULES[@]}" && ACT="on" || ACT="off" + echo "${ID} ${DESC} ${ACT}" >> "${TMP_PATH}/opts" + done <<<${ALLMODULES} + dialog --backtitle "`backtitle`" --title "Modules" --aspect 18 \ + --checklist "Select modules to include" 0 0 0 \ + --file "${TMP_PATH}/opts" 2>${TMP_PATH}/resp + [ $? -ne 0 ] && continue + resp=$(<${TMP_PATH}/resp) + [ -z "${resp}" ] && continue + dialog --backtitle "`backtitle`" --title "Modules" \ + --infobox "Writing to user config" 0 0 + unset USERMODULES + declare -A USERMODULES + writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" + for ID in ${resp}; do + USERMODULES["${ID}"]="" + writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}" + done + ;; + + e) + break + ;; + esac + done +} + ############################################################################### # Extract linux and ramdisk files from the DSM .pat function extractDsmFiles() { @@ -666,6 +755,8 @@ function extractDsmFiles() { echo "OK" } +############################################################################### +# Where the magic happens! function make() { clear PLATFORM="`readModelKey "${MODEL}" "platform"`" @@ -954,6 +1045,7 @@ while true; do echo "x \"Cmdline menu\"" >> "${TMP_PATH}/menu" echo "i \"Synoinfo menu\"" >> "${TMP_PATH}/menu" echo "l \"Switch LKM version: \Z4${LKM}\Zn\"" >> "${TMP_PATH}/menu" + echo "o \"Modules\"" >> "${TMP_PATH}/menu" echo "d \"Build the loader\"" >> "${TMP_PATH}/menu" fi fi @@ -976,8 +1068,9 @@ while true; do i) synoinfoMenu; NEXT="l" ;; l) [ "${LKM}" = "dev" ] && LKM='prod' || LKM='dev' writeConfigKey "lkm" "${LKM}" "${USER_CONFIG_FILE}" - NEXT="d" + NEXT="o" ;; + o) selectModules; NEXT="d" ;; d) make; NEXT="b" ;; b) boot ;; u) editUserConfig; NEXT="u" ;; diff --git a/files/board/arpl/overlayfs/opt/arpl/modinfo b/files/board/arpl/overlayfs/opt/arpl/modinfo new file mode 120000 index 00000000..76158284 --- /dev/null +++ b/files/board/arpl/overlayfs/opt/arpl/modinfo @@ -0,0 +1 @@ +kmod \ No newline at end of file diff --git a/files/board/arpl/overlayfs/opt/arpl/ramdisk-patch.sh b/files/board/arpl/overlayfs/opt/arpl/ramdisk-patch.sh index f8634195..fce9666d 100755 --- a/files/board/arpl/overlayfs/opt/arpl/ramdisk-patch.sh +++ b/files/board/arpl/overlayfs/opt/arpl/ramdisk-patch.sh @@ -45,6 +45,7 @@ RD_COMPRESSED="`readModelKey "${MODEL}" "builds.${BUILD}.rd-compressed"`" declare -A SYNOINFO declare -A ADDONS +declare -A USERMODULES # Read synoinfo and addons from config while IFS="=" read KEY VALUE; do @@ -54,6 +55,11 @@ while IFS="=" read KEY VALUE; do [ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}" done < <(readConfigMap "addons" "${USER_CONFIG_FILE}") +# Read modules from user config +while IFS="=" read KEY VALUE; do + [ -n "${KEY}" ] && USERMODULES["${KEY}"]="${VALUE}" +done < <(readConfigMap "modules" "${USER_CONFIG_FILE}") + # Patches while read f; do echo -n "." @@ -84,15 +90,17 @@ echo -n "." # Extract modules to ramdisk rm -rf "${TMP_PATH}/modules" mkdir -p "${TMP_PATH}/modules" -gzip -dc "${CACHE_PATH}/modules/${PLATFORM}-${KVER}.tgz" | tar xf - -C "${TMP_PATH}/modules" +gzip -dc "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" | tar xf - -C "${TMP_PATH}/modules" for F in `ls "${TMP_PATH}/modules/"*.ko`; do M=`basename ${F}` - # Skip existent modules -# [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] || mv "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" - cp "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" + if arrayExistItem "${M:0:-3}" "${!USERMODULES[@]}"; then + cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" + else + rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" + fi done mkdir -p "${RAMDISK_PATH}/usr/lib/firmware" -gzip -dc "${CACHE_PATH}/modules/firmware.tgz" | tar xf - -C "${RAMDISK_PATH}/usr/lib/firmware" +gzip -dc "${MODULES_PATH}/firmware.tgz" | tar xf - -C "${RAMDISK_PATH}/usr/lib/firmware" # Clean rm -rf "${TMP_PATH}/modules" diff --git a/files/board/arpl/p3/modules/apollolake-4.4.180.tgz b/files/board/arpl/p3/modules/apollolake-4.4.180.tgz index 791294b6..41de8ed1 100644 Binary files a/files/board/arpl/p3/modules/apollolake-4.4.180.tgz and b/files/board/arpl/p3/modules/apollolake-4.4.180.tgz differ diff --git a/files/board/arpl/p3/modules/broadwell-4.4.180.tgz b/files/board/arpl/p3/modules/broadwell-4.4.180.tgz index 01a4e4a5..d6e5df1a 100644 Binary files a/files/board/arpl/p3/modules/broadwell-4.4.180.tgz and b/files/board/arpl/p3/modules/broadwell-4.4.180.tgz differ diff --git a/files/board/arpl/p3/modules/broadwellnk-4.4.180.tgz b/files/board/arpl/p3/modules/broadwellnk-4.4.180.tgz index 0af95cea..f1e33c8b 100644 Binary files a/files/board/arpl/p3/modules/broadwellnk-4.4.180.tgz and b/files/board/arpl/p3/modules/broadwellnk-4.4.180.tgz differ diff --git a/files/board/arpl/p3/modules/bromolow-3.10.108.tgz b/files/board/arpl/p3/modules/bromolow-3.10.108.tgz index dd586605..5931cbdd 100644 Binary files a/files/board/arpl/p3/modules/bromolow-3.10.108.tgz and b/files/board/arpl/p3/modules/bromolow-3.10.108.tgz differ diff --git a/files/board/arpl/p3/modules/denverton-4.4.180.tgz b/files/board/arpl/p3/modules/denverton-4.4.180.tgz index ba37a9d5..538e75ee 100644 Binary files a/files/board/arpl/p3/modules/denverton-4.4.180.tgz and b/files/board/arpl/p3/modules/denverton-4.4.180.tgz differ diff --git a/files/board/arpl/p3/modules/geminilake-4.4.180.tgz b/files/board/arpl/p3/modules/geminilake-4.4.180.tgz index 6775840f..36358bb1 100644 Binary files a/files/board/arpl/p3/modules/geminilake-4.4.180.tgz and b/files/board/arpl/p3/modules/geminilake-4.4.180.tgz differ diff --git a/files/board/arpl/p3/modules/v1000-4.4.180.tgz b/files/board/arpl/p3/modules/v1000-4.4.180.tgz index 50376fa0..7333b969 100644 Binary files a/files/board/arpl/p3/modules/v1000-4.4.180.tgz and b/files/board/arpl/p3/modules/v1000-4.4.180.tgz differ