Skip to content
This repository has been archived by the owner on May 8, 2024. It is now read-only.

Adding option to configure modules to use in DSM #218

Merged
merged 1 commit into from
Oct 4, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.4-alpha12
0.5-alpha1
2 changes: 1 addition & 1 deletion files/board/arpl/overlayfs/opt/arpl/include/consts.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

ARPL_VERSION="0.4-alpha12"
ARPL_VERSION="0.5-alpha1"

# Define paths
TMP_PATH="/tmp"
Expand Down
22 changes: 22 additions & 0 deletions files/board/arpl/overlayfs/opt/arpl/include/modules.sh
Original file line number Diff line number Diff line change
@@ -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"
}
1 change: 1 addition & 0 deletions files/board/arpl/overlayfs/opt/arpl/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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}"
Expand Down
99 changes: 96 additions & 3 deletions files/board/arpl/overlayfs/opt/arpl/menu.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -666,6 +755,8 @@ function extractDsmFiles() {
echo "OK"
}

###############################################################################
# Where the magic happens!
function make() {
clear
PLATFORM="`readModelKey "${MODEL}" "platform"`"
Expand Down Expand Up @@ -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
Expand All @@ -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" ;;
Expand Down
1 change: 1 addition & 0 deletions files/board/arpl/overlayfs/opt/arpl/modinfo
18 changes: 13 additions & 5 deletions files/board/arpl/overlayfs/opt/arpl/ramdisk-patch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 "."
Expand Down Expand Up @@ -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"

Expand Down
Binary file modified files/board/arpl/p3/modules/apollolake-4.4.180.tgz
Binary file not shown.
Binary file modified files/board/arpl/p3/modules/broadwell-4.4.180.tgz
Binary file not shown.
Binary file modified files/board/arpl/p3/modules/broadwellnk-4.4.180.tgz
Binary file not shown.
Binary file modified files/board/arpl/p3/modules/bromolow-3.10.108.tgz
Binary file not shown.
Binary file modified files/board/arpl/p3/modules/denverton-4.4.180.tgz
Binary file not shown.
Binary file modified files/board/arpl/p3/modules/geminilake-4.4.180.tgz
Binary file not shown.
Binary file modified files/board/arpl/p3/modules/v1000-4.4.180.tgz
Binary file not shown.