mirror of
https://github.com/fbelavenuto/arpl.git
synced 2025-12-24 23:12:05 +08:00
Compare commits
26 Commits
v0.1-alpha
...
v0.1-alpha
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8405ebb43f | ||
|
|
5382bde2c1 | ||
|
|
67eb896d9e | ||
|
|
58bb997b34 | ||
|
|
3f47e24fef | ||
|
|
970ccbee46 | ||
|
|
d7b13c9bf7 | ||
|
|
7d7c83ccc7 | ||
|
|
00f5b13249 | ||
|
|
14d568e47c | ||
|
|
5cd5a84602 | ||
|
|
bbc33b9991 | ||
|
|
99c2b26d8d | ||
|
|
cabe06ec67 | ||
|
|
27e0da70d2 | ||
|
|
02b03e5c30 | ||
|
|
be0a7ea2a6 | ||
|
|
995b93cf30 | ||
|
|
fb596f44bb | ||
|
|
7f3bf6c6b0 | ||
|
|
faed1e838e | ||
|
|
425c043e83 | ||
|
|
f028e5d8fe | ||
|
|
4032413b6f | ||
|
|
89b76b94f1 | ||
|
|
5314c0694a |
124
.github/workflows/main.yml
vendored
Normal file
124
.github/workflows/main.yml
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
name: Build img
|
||||
|
||||
# Controls when the workflow will run
|
||||
on:
|
||||
|
||||
# push:
|
||||
# branches:
|
||||
# - main
|
||||
# pull_request:
|
||||
|
||||
# When a release is published
|
||||
release:
|
||||
types: [published]
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
build:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
# Install missing buildroot dependency
|
||||
- name: Install dependency
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y libelf-dev
|
||||
|
||||
- name: Cache buildroot
|
||||
id: cache
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: .buildroot
|
||||
key: ${{ runner.os }}-${{ hashFiles('files/configs/arpl_defconfig') }}
|
||||
|
||||
# Prepare buildroot for first make (for cache)
|
||||
- name: Prepare buildroot
|
||||
if: steps.cache.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
git clone --single-branch -b 2022.02 https://github.com/buildroot/buildroot.git .buildroot
|
||||
# Copy files
|
||||
echo "Copying files"
|
||||
cp -Ru files/* .buildroot
|
||||
cd .buildroot
|
||||
echo "Generating default config"
|
||||
make arpl_defconfig
|
||||
echo "First make"
|
||||
make
|
||||
|
||||
# Build incremental from cache
|
||||
- name: Build image
|
||||
id: build
|
||||
run: |
|
||||
VERSION=`<VERSION`
|
||||
echo "::set-output name=VERSION::${VERSION}"
|
||||
# Remove old files
|
||||
rm -rf .buildroot/output/target/opt/arpl
|
||||
rm -rf .buildroot/board/arpl/overlayfs
|
||||
rm -rf .buildroot/board/arpl/p1
|
||||
rm -rf .buildroot/board/arpl/p3
|
||||
# Get latest LKMs
|
||||
echo "Getting latest LKMs"
|
||||
TAG=`curl -s https://api.github.com/repos/fbelavenuto/redpill-lkm/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`
|
||||
curl -L "https://github.com/fbelavenuto/redpill-lkm/releases/download/${TAG}/rp-lkms.zip" -o /tmp/rp-lkms.zip
|
||||
rm -rf files/board/arpl/p3/lkms/*
|
||||
unzip /tmp/rp-lkms.zip -d files/board/arpl/p3/lkms
|
||||
# Get latest addons and install its
|
||||
echo "Getting latest Addons"
|
||||
TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`
|
||||
curl -L "https://github.com/fbelavenuto/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip
|
||||
mkdir -p /tmp/addons
|
||||
unzip /tmp/addons.zip -d /tmp/addons
|
||||
DEST_PATH="files/board/arpl/p3/addons"
|
||||
echo "Installing addons to ${DEST_PATH}"
|
||||
for PKG in `ls /tmp/addons/*.addon`; do
|
||||
ADDON=`basename ${PKG} | sed 's|.addon||'`
|
||||
mkdir -p "${DEST_PATH}/${ADDON}"
|
||||
echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}"
|
||||
tar xaf "${PKG}" -C "${DEST_PATH}/${ADDON}"
|
||||
done
|
||||
# Copy files
|
||||
echo "Copying files"
|
||||
cp -Ru files/* .buildroot/
|
||||
VERSION=`cat VERSION`
|
||||
sed 's/^ARPL_VERSION=.*/ARPL_VERSION="'${VERSION}'"/' -i files/board/arpl/overlayfs/opt/arpl/include/consts.sh
|
||||
cd .buildroot
|
||||
echo "Generating default config"
|
||||
make arpl_defconfig
|
||||
echo "Version: ${VERSION}"
|
||||
echo "Building..."
|
||||
make
|
||||
cd -
|
||||
|
||||
# Zip image
|
||||
- name: Pack
|
||||
shell: bash
|
||||
run: zip -9 "arpl-${{ steps.build.outputs.VERSION }}.img.zip" arpl.img
|
||||
|
||||
# Upload artifact
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Image to burn
|
||||
path: arpl.img
|
||||
retention-days: 1
|
||||
|
||||
# Publish a release if is a tag
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: |
|
||||
arpl-${{ steps.build.outputs.VERSION }}.img.zip
|
||||
.buildroot/output/images/bzImage
|
||||
.buildroot/output/images/rootfs.cpio.xz
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -2,7 +2,8 @@
|
||||
.vscode
|
||||
arpl.img*
|
||||
*.zip
|
||||
/buildroot-2022.02.2
|
||||
.buildroot
|
||||
test.sh
|
||||
docker/Dockerfile
|
||||
docker/cache
|
||||
*.bak
|
||||
|
||||
4
.gitmodules
vendored
4
.gitmodules
vendored
@@ -1,6 +1,6 @@
|
||||
[submodule "redpill-lkm"]
|
||||
path = redpill-lkm
|
||||
url = git@github.com:fbelavenuto/redpill-lkm.git
|
||||
url = https://github.com/fbelavenuto/redpill-lkm
|
||||
[submodule "addons"]
|
||||
path = addons
|
||||
url = git@github.com:fbelavenuto/arpl-addons.git
|
||||
url = https://github.com/fbelavenuto/arpl-addons
|
||||
|
||||
@@ -5,4 +5,3 @@ broadwellnk 4.4.180
|
||||
denverton 4.4.180
|
||||
geminilake 4.4.180
|
||||
v1000 4.4.180
|
||||
purley 4.4.180
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
TMP_PATH="/tmp"
|
||||
DEST_PATH="files/board/arpl/p3/lkms"
|
||||
|
||||
###############################################################################
|
||||
function trap_cancel() {
|
||||
echo "Press Control+C once more terminate the process (or wait 2s for it to restart)"
|
||||
sleep 2 || exit 1
|
||||
}
|
||||
trap trap_cancel SIGINT SIGTERM
|
||||
|
||||
###############################################################################
|
||||
function die() {
|
||||
echo -e "\033[1;31m$@\033[0m"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Main
|
||||
while read PLATFORM KVER; do
|
||||
# Compile using docker
|
||||
docker run --rm -t --user `id -u` -v "${TMP_PATH}":/output \
|
||||
-v "${PWD}/redpill-lkm":/input syno-compiler compile-lkm ${PLATFORM}
|
||||
mv "${TMP_PATH}/redpill-dev.ko" "${DEST_PATH}/rp-${PLATFORM}-${KVER}-dev.ko"
|
||||
mv "${TMP_PATH}/redpill-prod.ko" "${DEST_PATH}/rp-${PLATFORM}-${KVER}-prod.ko"
|
||||
done < PLATFORMS
|
||||
@@ -7,6 +7,8 @@ function trap_cancel() {
|
||||
}
|
||||
trap trap_cancel SIGINT SIGTERM
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
# Read platforms/kerver version
|
||||
echo "Reading platforms"
|
||||
declare -A PLATFORMS
|
||||
@@ -15,6 +17,7 @@ while read PLATFORM KVER; do
|
||||
done <../PLATFORMS
|
||||
|
||||
# Download toolkits
|
||||
mkdir -p cache
|
||||
TOOLKIT_VER="7.0"
|
||||
for PLATFORM in ${!PLATFORMS[@]}; do
|
||||
echo -n "Checking cache/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz... "
|
||||
@@ -39,5 +42,5 @@ sed -i "s|@@@TOOLKIT_VER@@@|${TOOLKIT_VER}|g" Dockerfile
|
||||
|
||||
# Build
|
||||
echo "Building... Drink a coffee and wait!"
|
||||
docker image rm syno-compiler >/dev/null 2>&1
|
||||
docker buildx build . --load --tag syno-compiler
|
||||
docker image rm fbelavenuto/syno-compiler >/dev/null 2>&1
|
||||
docker buildx build . --load --tag fbelavenuto/syno-compiler
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
ARPL_VERSION="0.1-alpha"
|
||||
ARPL_VERSION="0.1-alpha3"
|
||||
|
||||
# Define paths
|
||||
TMP_PATH="/tmp"
|
||||
|
||||
@@ -75,9 +75,10 @@ writeConfigKey "pid" ${PID} "${USER_CONFIG_FILE}"
|
||||
|
||||
# Shows title
|
||||
clear
|
||||
TITLE="Welcome to Automated Redpill Loader ${ARPL_VERSION}"
|
||||
TITLE="Welcome to Automated Redpill Loader v${ARPL_VERSION}"
|
||||
printf "\033[1;44m%*s\n" $COLUMNS ""
|
||||
printf "\033[1;32m%*s%*s \033[0m\n" $(((${#TITLE}+$COLUMNS)/2)) "${TITLE}" $(((${#TITLE}+$COLUMNS)/2-${#TITLE})) ""
|
||||
printf "\033[1;44m%*s\033[A\n" $COLUMNS ""
|
||||
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE}+$COLUMNS)/2)) "${TITLE}"
|
||||
printf "\033[1;44m%*s\033[0m\n" $COLUMNS ""
|
||||
|
||||
# Inform user
|
||||
|
||||
@@ -162,6 +162,399 @@ function serialMenu() {
|
||||
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Detect hardware
|
||||
function detectHw() {
|
||||
PLATFORM="`readModelKey "${MODEL}" "platform"`"
|
||||
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
|
||||
# Get modules not needed
|
||||
unset NOTNEEDED
|
||||
declare -A NOTNEEDED
|
||||
while read M; do
|
||||
NOTNEEDED[${M}]="1"
|
||||
done < <(readModelArray "${MODEL}" "builds.${BUILD}.modules-notneeded")
|
||||
unset DEVC DEVN
|
||||
declare -A DEVC
|
||||
declare -A DEVN
|
||||
while read L; do
|
||||
F=` sed -E 's/^([0-9a-z]{2}:[0-9a-z]{2}.[0-9a-z]{1})[^\[]*\[([0-9a-z]{4})\]: (.*)/\1|\2|\3/' <<<"${L}"`
|
||||
PCI="`cut -d'|' -f1 <<<"${F}"`"
|
||||
CLASS="`cut -d'|' -f2 <<<"${F}"`"
|
||||
NAME="`cut -d'|' -f3 <<<"${F}"`"
|
||||
MODULE="`lspci -ks "${PCI}" | awk '/Kernel driver in use/{print$5}'`"
|
||||
[ -z "${MODULE}" ] && continue
|
||||
# If is a virtio module, change id
|
||||
if grep -q "virtio" <<<"$MODULE"; then
|
||||
MODULE="virtio"
|
||||
fi
|
||||
CLASS=${CLASSES[${CLASS}]} # Get class name of module
|
||||
[ -z "${CLASS}" ] && continue # If no class, skip
|
||||
arrayExistItem "${MODULE}" "${!ADDONS[@]}" && continue # Check if module already added
|
||||
[ -n "${NOTNEEDED[${MODULE}]}" ] && continue # Check if module is not necessary
|
||||
# Add module to list
|
||||
DEVC[${MODULE}]="${CLASS}"
|
||||
DEVN[${MODULE}]="${NAME}"
|
||||
done < <(lspci -nn)
|
||||
if [ ${#DEVC[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --aspect 18 \
|
||||
--msgbox "No device detected or already added!" 0 0
|
||||
return
|
||||
fi
|
||||
for MODULE in ${!DEVC[@]}; do
|
||||
CLASS="${DEVC[${MODULE}]}"
|
||||
NAME="${DEVN[${MODULE}]}"
|
||||
TEXT="Found a ${NAME}\nClass ${CLASS}\nModule ${MODULE}\nAccept?"
|
||||
checkAddonExist "${MODULE}" "${PLATFORM}" "${KVER}" || TEXT+="\n\n\Z1PS: Addon for this module not found\Zn"
|
||||
dialog --backtitle "`backtitle`" --title "Found Hardware" \
|
||||
--colors --yesno "${TEXT}" 12 70
|
||||
[ $? -ne 0 ] && continue
|
||||
dialog --backtitle "`backtitle`" --title "params" \
|
||||
--inputbox "Type a opcional params to module" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<${TMP_PATH}/resp`"
|
||||
ADDONS["${MODULE}"]="${VALUE}"
|
||||
writeConfigKey "addons.${MODULE}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
DIRTY=1
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Manage addons/drivers
|
||||
function addonMenu() {
|
||||
# Read 'platform' and kernel version to check if addon exists
|
||||
PLATFORM="`readModelKey "${MODEL}" "platform"`"
|
||||
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
|
||||
# Read addons from user config
|
||||
unset ADDONS
|
||||
declare -A ADDONS
|
||||
while IFS="=" read KEY VALUE; do
|
||||
[ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
|
||||
NEXT="h"
|
||||
# Loop menu
|
||||
while true; do
|
||||
dialog --backtitle "`backtitle`" --default-item ${NEXT} \
|
||||
--menu "Choose a option" 0 0 0 \
|
||||
h "Detect hardware" \
|
||||
a "Add an addon" \
|
||||
d "Delete addon(s)" \
|
||||
s "Show user addons" \
|
||||
m "Show all available addons" \
|
||||
o "Download an addon" \
|
||||
e "Exit" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && return
|
||||
case "`<${TMP_PATH}/resp`" in
|
||||
h)
|
||||
detectHw
|
||||
NEXT='e'
|
||||
;;
|
||||
a) NEXT='a'
|
||||
rm "${TMP_PATH}/menu"
|
||||
while read ADDON DESC; do
|
||||
arrayExistItem "${ADDON}" "${!ADDONS[@]}" && continue # Check if addon has already been added
|
||||
echo "${ADDON} \"${DESC}\"" >> "${TMP_PATH}/menu"
|
||||
done < <(availableAddons "${PLATFORM}" "${KVER}")
|
||||
if [ ! -f "${TMP_PATH}/menu" ] ; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No available addons to add" 0 0
|
||||
continue
|
||||
fi
|
||||
dialog --backtitle "`backtitle`" --menu "Select an addon" 0 0 0 \
|
||||
--file "${TMP_PATH}/menu" 2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
ADDON="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${ADDON}" ] && continue
|
||||
dialog --backtitle "`backtitle`" --title "params" \
|
||||
--inputbox "Type a opcional params to addon" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
ADDONS[${ADDON}]="`<"${TMP_PATH}/resp"`"
|
||||
writeConfigKey "addons.${ADDON}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
DIRTY=1
|
||||
;;
|
||||
d) NEXT='d'
|
||||
if [ ${#ADDONS[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No user addons to remove" 0 0
|
||||
continue
|
||||
fi
|
||||
ITEMS=""
|
||||
for I in "${!ADDONS[@]}"; do
|
||||
ITEMS+="${I} ${I} off "
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --no-tags \
|
||||
--checklist "Select addon to remove" 0 0 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
ADDON="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${ADDON}" ] && continue
|
||||
for I in ${ADDON}; do
|
||||
unset ADDONS[${I}]
|
||||
deleteConfigKey "addons.${I}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
DIRTY=1
|
||||
;;
|
||||
s) NEXT='s'
|
||||
ITEMS=""
|
||||
for KEY in ${!ADDONS[@]}; do
|
||||
ITEMS+="${KEY}: ${ADDONS[$KEY]}\n"
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --title "User addons" \
|
||||
--msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
m) NEXT='m'
|
||||
MSG=""
|
||||
while read MODULE DESC; do
|
||||
if arrayExistItem "${MODULE}" "${!ADDONS[@]}"; then
|
||||
MSG+="\Z4${MODULE}\Zn"
|
||||
else
|
||||
MSG+="${MODULE}"
|
||||
fi
|
||||
MSG+=": \Z5${DESC}\Zn\n"
|
||||
done < <(availableAddons "${PLATFORM}" "${KVER}")
|
||||
dialog --backtitle "`backtitle`" --title "Available addons" \
|
||||
--colors --msgbox "${MSG}" 0 0
|
||||
;;
|
||||
o)
|
||||
TEXT="please enter the complete URL to download.\n"
|
||||
TEXT+="\Zb(Official addons location: https://github.com/fbelavenuto/arpl-addons/releases)\Zn\n"
|
||||
TEXT+="Ex: https://github.com/fbelavenuto/arpl-addons/releases/download/v0.2/9p.addon"
|
||||
dialog --backtitle "`backtitle`" --aspect 18 --colors --inputbox "${TEXT}" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
URL="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${URL}" ] && continue
|
||||
clear
|
||||
echo "Downloading ${URL}"
|
||||
curl --insecure -L "${URL}" -o "${TMP_PATH}/addon.tgz" --progress-bar
|
||||
if [ $? -ne 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --title "Error downloading" --aspect 18 \
|
||||
--msgbox "Check internet or cache disk space" 0 0
|
||||
return 1
|
||||
fi
|
||||
ADDON="`untarAddon "${TMP_PATH}/addon.tgz"`"
|
||||
if [ -n "${ADDON}" ]; then
|
||||
dialog --backtitle "`backtitle`" --title "Success" --aspect 18 \
|
||||
--msgbox "Addon '${ADDON}' added to loader" 0 0
|
||||
else
|
||||
dialog --backtitle "`backtitle`" --title "Invalid addon" --aspect 18 \
|
||||
--msgbox "File format not recognized!" 0 0
|
||||
fi
|
||||
;;
|
||||
e) return ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Sets variables to configure maxdisks
|
||||
# 1 - Number of disks
|
||||
function setMaxDisks() {
|
||||
CMDLINE['maxdisks']="${1}"
|
||||
writeConfigKey "cmdline.maxdisks" "${1}" "${USER_CONFIG_FILE}"
|
||||
INTPORTCFG=""
|
||||
for I in `seq 1 ${1}`; do INTPORTCFG+="1"; done
|
||||
INTPORTCFG="0x`printf "%x" "$((2#${INTPORTCFG}))"`"
|
||||
CMDLINE['internalportcfg']="${INTPORTCFG}"
|
||||
writeConfigKey "cmdline.internalportcfg" "${INTPORTCFG}" "${USER_CONFIG_FILE}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
function cmdlineMenu() {
|
||||
# Read from user config
|
||||
DT="`readModelKey "${MODEL}" "dt"`"
|
||||
unset CMDLINE
|
||||
declare -A CMDLINE
|
||||
while IFS="=" read KEY VALUE; do
|
||||
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
|
||||
# Loop menu
|
||||
while true; do
|
||||
echo "a \"Add/edit an cmdline item\"" > "${TMP_PATH}/menu"
|
||||
echo "d \"Delete cmdline item(s)\"" >> "${TMP_PATH}/menu"
|
||||
echo "s \"Show user cmdline\"" >> "${TMP_PATH}/menu"
|
||||
echo "m \"Show model/build cmdline\"" >> "${TMP_PATH}/menu"
|
||||
if [ "${DT}" != "true" ]; then
|
||||
echo "h \"Change maxdisks\"" >> "${TMP_PATH}/menu"
|
||||
echo "u \"Show SATA(s) # ports and drives\"" >> "${TMP_PATH}/menu"
|
||||
fi
|
||||
echo "e \"Exit\"" >> "${TMP_PATH}/menu"
|
||||
|
||||
dialog --backtitle "`backtitle`" --menu "Choose a option" 0 0 0 \
|
||||
--file "${TMP_PATH}/menu" 2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && return
|
||||
case "`<${TMP_PATH}/resp`" in
|
||||
a)
|
||||
dialog --backtitle "`backtitle`" --title "User cmdline" \
|
||||
--inputbox "Type a name of cmdline" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
|
||||
[ -z "${NAME}" ] && continue
|
||||
dialog --backtitle "`backtitle`" --title "User cmdline" \
|
||||
--inputbox "Type a value of '${NAME}' cmdline" 0 0 "${CMDLINE[${NAME}]}" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<"${TMP_PATH}/resp"`"
|
||||
CMDLINE[${NAME}]="${VALUE}"
|
||||
writeConfigKey "cmdline.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
;;
|
||||
d)
|
||||
if [ ${#CMDLINE[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No user cmdline to remove" 0 0
|
||||
continue
|
||||
fi
|
||||
ITEMS=""
|
||||
for I in "${!CMDLINE[@]}"; do
|
||||
ITEMS+="${I} ${CMDLINE[${I}]} off "
|
||||
done
|
||||
dialog --backtitle "`backtitle`" \
|
||||
--checklist "Select cmdline to remove" 0 0 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
RESP=`<"${TMP_PATH}/resp"`
|
||||
[ -z "${RESP}" ] && continue
|
||||
for I in ${RESP}; do
|
||||
unset CMDLINE[${I}]
|
||||
deleteConfigKey "cmdline.${I}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
;;
|
||||
s)
|
||||
ITEMS=""
|
||||
for KEY in ${!CMDLINE[@]}; do
|
||||
ITEMS+="${KEY}: ${CMDLINE[$KEY]}\n"
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --title "User cmdline" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
m)
|
||||
ITEMS=""
|
||||
while IFS="=" read KEY VALUE; do
|
||||
ITEMS+="${KEY}: ${VALUE}\n"
|
||||
done < <(readModelMap "${MODEL}" "builds.${BUILD}.cmdline")
|
||||
dialog --backtitle "`backtitle`" --title "Model/build cmdline" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
h) MODEL_DISKS="`readModelKey "${MODEL}" "disks"`"
|
||||
dialog --backtitle "`backtitle`" --title "Change max of disks" \
|
||||
--inputbox "${MODEL} disks: ${MODEL_DISKS}\nType the desired number of disks (1-26)" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${VALUE}" ] && continue
|
||||
if [ ${VALUE} -ge 1 -a ${VALUE} -le 26 ]; then
|
||||
setMaxDisks ${VALUE}
|
||||
else
|
||||
dialog --backtitle "`backtitle`" --msgbox "Invalid number" 0 0
|
||||
fi
|
||||
;;
|
||||
u) TEXT=""
|
||||
for PCI in `lspci -d ::106 | awk '{print$1}'`; do
|
||||
NAME=`lspci -s "${PCI}" | sed "s/\ .*://"`
|
||||
TEXT+="\Zb${NAME}\Zn\nPorts: "
|
||||
unset HOSTPORTS
|
||||
declare -A HOSTPORTS
|
||||
while read LINE; do
|
||||
ATAPORT="`echo ${LINE} | grep -o 'ata[0-9]*'`"
|
||||
PORT=`echo ${ATAPORT} | sed 's/ata//'`
|
||||
HOSTPORTS[${PORT}]=`echo ${LINE} | grep -o 'host[0-9]*$'`
|
||||
done < <(ls -l /sys/class/scsi_host | fgrep "${PCI}")
|
||||
while read PORT; do
|
||||
ls -l /sys/block | fgrep -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
|
||||
PCMD=`cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd`
|
||||
[ "${PCMD}" = "0" ] && DUMMY=1 || DUMMY=0
|
||||
[ ${ATTACH} -eq 1 ] && TEXT+="\Z2\Zb"
|
||||
[ ${DUMMY} -eq 1 ] && TEXT+="\Z1"
|
||||
TEXT+="${PORT}\Zn "
|
||||
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
|
||||
TEXT+="\n"
|
||||
done
|
||||
TEXT+="\nPorts with color \Z1red\Zn as DUMMY, color \Z2\Zbgreen\Zn has drive connected."
|
||||
dialog --backtitle "`backtitle`" --colors --aspect 18 \
|
||||
--msgbox "${TEXT}" 0 0
|
||||
;;
|
||||
e) return ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
function synoinfoMenu() {
|
||||
# Read synoinfo from user config
|
||||
unset SYNOINFO
|
||||
declare -A SYNOINFO
|
||||
while IFS="=" read KEY VALUE; do
|
||||
[ -n "${KEY}" ] && SYNOINFO["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "synoinfo" "${USER_CONFIG_FILE}")
|
||||
# menu loop
|
||||
while true; do
|
||||
dialog --backtitle "`backtitle`" \
|
||||
--menu "Choose a option" 0 0 0 \
|
||||
a "Add/edit an synoinfo item" \
|
||||
d "Delete synoinfo item(s)" \
|
||||
s "Show user synoinfo" \
|
||||
m "Show model/build synoinfo" \
|
||||
e "Exit" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && return
|
||||
case "`<${TMP_PATH}/resp`" in
|
||||
a)
|
||||
dialog --backtitle "`backtitle`" --title "User synoinfo" \
|
||||
--inputbox "Type a name of synoinfo variable" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
|
||||
dialog --backtitle "`backtitle`" --title "User synoinfo" \
|
||||
--inputbox "Type a value of '${NAME}' variable" 0 0 "${SYNOINFO[${NAME}]}" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<"${TMP_PATH}/resp"`"
|
||||
SYNOINFO[${NAME}]="${VALUE}"
|
||||
writeConfigKey "synoinfo.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
DIRTY=1
|
||||
;;
|
||||
d)
|
||||
if [ ${#SYNOINFO[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No user synoinfo to remove" 0 0
|
||||
continue
|
||||
fi
|
||||
ITEMS=""
|
||||
for I in "${!SYNOINFO[@]}"; do
|
||||
ITEMS+="${I} ${SYNOINFO[${I}]} off "
|
||||
done
|
||||
dialog --backtitle "`backtitle`" \
|
||||
--checklist "Select synoinfo to remove" 0 0 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
RESP=`<"${TMP_PATH}/resp"`
|
||||
[ -z "${RESP}" ] && continue
|
||||
for I in ${RESP}; do
|
||||
unset SYNOINFO[${I}]
|
||||
deleteConfigKey "synoinfo.${I}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
DIRTY=1
|
||||
;;
|
||||
s)
|
||||
ITEMS=""
|
||||
for KEY in ${!SYNOINFO[@]}; do
|
||||
ITEMS+="${KEY}: ${SYNOINFO[$KEY]}\n"
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --title "User synoinfo" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
m)
|
||||
ITEMS=""
|
||||
while IFS="=" read KEY VALUE; do
|
||||
ITEMS+="${KEY}: ${VALUE}\n"
|
||||
done < <(readModelMap "${MODEL}" "builds.${BUILD}.synoinfo")
|
||||
dialog --backtitle "`backtitle`" --title "Model/build synoinfo" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
e) return ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Where the magic happens :D
|
||||
function make() {
|
||||
@@ -330,7 +723,7 @@ function make() {
|
||||
--msgbox "zImage not patched:\n`<"${LOG_FILE}"`" 0 0
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
/opt/arpl/ramdisk-patch.sh
|
||||
if [ $? -ne 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --title "Error" --aspect 18 \
|
||||
@@ -347,391 +740,6 @@ function make() {
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Detect hardware
|
||||
function detectHw() {
|
||||
PLATFORM="`readModelKey "${MODEL}" "platform"`"
|
||||
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
|
||||
# Get modules not needed
|
||||
unset NOTNEEDED
|
||||
declare -A NOTNEEDED
|
||||
while read M; do
|
||||
NOTNEEDED[${M}]="1"
|
||||
done < <(readModelArray "${MODEL}" "builds.${BUILD}.modules-notneeded")
|
||||
unset DEVC DEVN
|
||||
declare -A DEVC
|
||||
declare -A DEVN
|
||||
while read L; do
|
||||
F=` sed -E 's/^([0-9a-z]{2}:[0-9a-z]{2}.[0-9a-z]{1})[^\[]*\[([0-9a-z]{4})\]: (.*)/\1|\2|\3/' <<<"${L}"`
|
||||
PCI="`cut -d'|' -f1 <<<"${F}"`"
|
||||
CLASS="`cut -d'|' -f2 <<<"${F}"`"
|
||||
NAME="`cut -d'|' -f3 <<<"${F}"`"
|
||||
MODULE="`lspci -ks "${PCI}" | awk '/Kernel driver in use/{print$5}'`"
|
||||
[ -z "${MODULE}" ] && continue
|
||||
# If is a virtio module, change id
|
||||
if grep -q "virtio" <<<"$MODULE"; then
|
||||
MODULE="virtio"
|
||||
fi
|
||||
CLASS=${CLASSES[${CLASS}]} # Get class name of module
|
||||
[ -z "${CLASS}" ] && continue # If no class, skip
|
||||
arrayExistItem "${MODULE}" "${!ADDONS[@]}" && continue # Check if module already added
|
||||
[ -n "${NOTNEEDED[${MODULE}]}" ] && continue # Check if module is not necessary
|
||||
# Add module to list
|
||||
DEVC[${MODULE}]="${CLASS}"
|
||||
DEVN[${MODULE}]="${NAME}"
|
||||
done < <(lspci -nn)
|
||||
if [ ${#DEVC[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --aspect 18 \
|
||||
--msgbox "No device detected or already added!" 0 0
|
||||
return
|
||||
fi
|
||||
for MODULE in ${!DEVC[@]}; do
|
||||
CLASS="${DEVC[${MODULE}]}"
|
||||
NAME="${DEVN[${MODULE}]}"
|
||||
TEXT="Found a ${NAME}\nClass ${CLASS}\nModule ${MODULE}\nAccept?"
|
||||
checkAddonExist "${MODULE}" "${PLATFORM}" "${KVER}" || TEXT+="\n\n\Z1PS: Addon for this module not found\Zn"
|
||||
dialog --backtitle "`backtitle`" --title "Found Hardware" \
|
||||
--colors --yesno "${TEXT}" 12 70
|
||||
[ $? -ne 0 ] && continue
|
||||
dialog --backtitle "`backtitle`" --title "params" \
|
||||
--inputbox "Type a opcional params to module" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<${TMP_PATH}/resp`"
|
||||
ADDONS["${MODULE}"]="${VALUE}"
|
||||
writeConfigKey "addons.${MODULE}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
DIRTY=1
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Manage addons/drivers
|
||||
function addonMenu() {
|
||||
# Read 'platform' and kernel version to check if addon exists
|
||||
PLATFORM="`readModelKey "${MODEL}" "platform"`"
|
||||
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
|
||||
# Read addons from user config
|
||||
unset ADDONS
|
||||
declare -A ADDONS
|
||||
while IFS="=" read KEY VALUE; do
|
||||
[ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
|
||||
NEXT="h"
|
||||
# Loop menu
|
||||
while true; do
|
||||
dialog --backtitle "`backtitle`" --default-item ${NEXT} \
|
||||
--menu "Choose a option" 0 0 0 \
|
||||
h "Detect hardware" \
|
||||
a "Add an addon" \
|
||||
d "Delete addon(s)" \
|
||||
s "Show user addons" \
|
||||
m "Show all available addons" \
|
||||
o "Download an addon" \
|
||||
e "Exit" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && return
|
||||
case "`<${TMP_PATH}/resp`" in
|
||||
h)
|
||||
detectHw
|
||||
NEXT='e'
|
||||
;;
|
||||
a) NEXT='a'
|
||||
rm "${TMP_PATH}/menu"
|
||||
while read ADDON DESC; do
|
||||
arrayExistItem "${ADDON}" "${!ADDONS[@]}" && continue # Check if addon has already been added
|
||||
echo "${ADDON} \"${DESC}\"" >> "${TMP_PATH}/menu"
|
||||
done < <(availableAddons "${PLATFORM}" "${KVER}")
|
||||
if [ ! -f "${TMP_PATH}/menu" ] ; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No available addons to add" 0 0
|
||||
continue
|
||||
fi
|
||||
dialog --backtitle "`backtitle`" --menu "Select an addon" 0 0 0 \
|
||||
--file "${TMP_PATH}/menu" 2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
ADDON="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${ADDON}" ] && continue
|
||||
dialog --backtitle "`backtitle`" --title "params" \
|
||||
--inputbox "Type a opcional params to addon" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
ADDONS[${ADDON}]="`<"${TMP_PATH}/resp"`"
|
||||
writeConfigKey "addons.${ADDON}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
DIRTY=1
|
||||
;;
|
||||
d) NEXT='d'
|
||||
if [ ${#ADDONS[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No user addons to remove" 0 0
|
||||
continue
|
||||
fi
|
||||
ITEMS=""
|
||||
for I in "${!ADDONS[@]}"; do
|
||||
ITEMS+="${I} ${I} off "
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --no-tags \
|
||||
--checklist "Select addon to remove" 0 0 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
ADDON="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${ADDON}" ] && continue
|
||||
for I in ${ADDON}; do
|
||||
unset ADDONS[${I}]
|
||||
deleteConfigKey "addons.${I}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
DIRTY=1
|
||||
;;
|
||||
s) NEXT='s'
|
||||
ITEMS=""
|
||||
for KEY in ${!ADDONS[@]}; do
|
||||
ITEMS+="${KEY}: ${ADDONS[$KEY]}\n"
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --title "User addons" \
|
||||
--msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
m) NEXT='m'
|
||||
MSG=""
|
||||
while read MODULE DESC; do
|
||||
if arrayExistItem "${MODULE}" "${!ADDONS[@]}"; then
|
||||
MSG+="\Z4${MODULE}\Zn"
|
||||
else
|
||||
MSG+="${MODULE}"
|
||||
fi
|
||||
MSG+=": \Z5${DESC}\Zn\n"
|
||||
done < <(availableAddons "${PLATFORM}" "${KVER}")
|
||||
dialog --backtitle "`backtitle`" --title "Available addons" \
|
||||
--colors --msgbox "${MSG}" 0 0
|
||||
;;
|
||||
o) dialog --backtitle "`backtitle`" \
|
||||
--inputbox "please enter the URL to download" 0 0 \
|
||||
"https://raw.githubusercontent.com/fbelavenuto/arpl-addons/main/" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
URL="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${URL}" ] && continue
|
||||
clear
|
||||
echo "Downloading ${URL}"
|
||||
curl --insecure -L "${URL}" -o "${TMP_PATH}/addon.tgz" --progress-bar
|
||||
if [ $? -ne 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --title "Error downloading" --aspect 18 \
|
||||
--msgbox "Check internet or cache disk space" 0 0
|
||||
return 1
|
||||
fi
|
||||
ADDON="`untarAddon "${TMP_PATH}/addon.tgz"`"
|
||||
if [ -n "${ADDON}" ]; then
|
||||
dialog --backtitle "`backtitle`" --title "Success" --aspect 18 \
|
||||
--msgbox "Addon '${ADDON}' added to loader" 0 0
|
||||
else
|
||||
dialog --backtitle "`backtitle`" --title "Invalid addon" --aspect 18 \
|
||||
--msgbox "File format not recognized!" 0 0
|
||||
fi
|
||||
;;
|
||||
e) return ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
function cmdlineMenu() {
|
||||
# Read from user config
|
||||
DT="`readModelKey "${MODEL}" "dt"`"
|
||||
unset CMDLINE
|
||||
declare -A CMDLINE
|
||||
while IFS="=" read KEY VALUE; do
|
||||
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
|
||||
# Loop menu
|
||||
while true; do
|
||||
|
||||
echo "a \"Add/edit an cmdline item\"" > "${TMP_PATH}/menu"
|
||||
echo "d \"Delete cmdline item(s)\"" >> "${TMP_PATH}/menu"
|
||||
echo "s \"Show user cmdline\"" >> "${TMP_PATH}/menu"
|
||||
echo "m \"Show model/build cmdline\"" >> "${TMP_PATH}/menu"
|
||||
if [ "${DT}" != "true" ]; then
|
||||
echo "h \"Change maxdisks\"" >> "${TMP_PATH}/menu"
|
||||
echo "u \"Show SATA(s) # ports and drives\"" >> "${TMP_PATH}/menu"
|
||||
fi
|
||||
echo "e \"Exit\"" >> "${TMP_PATH}/menu"
|
||||
|
||||
dialog --backtitle "`backtitle`" --menu "Choose a option" 0 0 0 \
|
||||
--file "${TMP_PATH}/menu" 2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && return
|
||||
case "`<${TMP_PATH}/resp`" in
|
||||
a)
|
||||
dialog --backtitle "`backtitle`" --title "User cmdline" \
|
||||
--inputbox "Type a name of cmdline" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
|
||||
[ -z "${NAME}" ] continue
|
||||
dialog --backtitle "`backtitle`" --title "User cmdline" \
|
||||
--inputbox "Type a value of '${NAME}' cmdline" 0 0 "${CMDLINE[${NAME}]}" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<"${TMP_PATH}/resp"`"
|
||||
CMDLINE[${NAME}]="${VALUE}"
|
||||
writeConfigKey "cmdline.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
;;
|
||||
d)
|
||||
if [ ${#CMDLINE[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No user cmdline to remove" 0 0
|
||||
continue
|
||||
fi
|
||||
ITEMS=""
|
||||
for I in "${!CMDLINE[@]}"; do
|
||||
ITEMS+="${I} ${CMDLINE[${I}]} off "
|
||||
done
|
||||
dialog --backtitle "`backtitle`" \
|
||||
--checklist "Select cmdline to remove" 0 0 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
RESP=`<"${TMP_PATH}/resp"`
|
||||
[ -z "${RESP}" ] && continue
|
||||
for I in ${RESP}; do
|
||||
unset CMDLINE[${I}]
|
||||
deleteConfigKey "cmdline.${I}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
;;
|
||||
s)
|
||||
ITEMS=""
|
||||
for KEY in ${!CMDLINE[@]}; do
|
||||
ITEMS+="${KEY}: ${CMDLINE[$KEY]}\n"
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --title "User cmdline" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
m)
|
||||
ITEMS=""
|
||||
while IFS="=" read KEY VALUE; do
|
||||
ITEMS+="${KEY}: ${VALUE}\n"
|
||||
done < <(readModelMap "${MODEL}" "builds.${BUILD}.cmdline")
|
||||
dialog --backtitle "`backtitle`" --title "Model/build cmdline" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
h) MODEL_DISKS="`readModelKey "${MODEL}" "disks"`"
|
||||
dialog --backtitle "`backtitle`" --title "Change max of disks" \
|
||||
--inputbox "${MODEL} disks: ${MODEL_DISKS}\nType the desired number of disks (1-26)" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<"${TMP_PATH}/resp"`"
|
||||
[ -z "${VALUE}" ] && continue
|
||||
if [ ${VALUE} -ge 1 -a ${VALUE} -le 26 ]; then
|
||||
CMDLINE['maxdisks']="${VALUE}"
|
||||
writeConfigKey "cmdline.maxdisks" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
INTPORTCFG=""
|
||||
for I in `seq 1 ${VALUE}`; do INTPORTCFG+="1"; done
|
||||
INTPORTCFG=`printf "%x" "$((2#${INTPORTCFG}))"`
|
||||
CMDLINE['internalportcfg']="${INTPORTCFG}"
|
||||
writeConfigKey "cmdline.internalportcfg" "${INTPORTCFG}" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
dialog --backtitle "`backtitle`" --msgbox "Invalid number" 0 0
|
||||
fi
|
||||
;;
|
||||
u) TEXT=""
|
||||
for PCI in `lspci -d ::106 | awk '{print$1}'`; do
|
||||
NAME=`lspci -s "${PCI}" | sed "s/\ .*://"`
|
||||
TEXT+="\Zb${NAME}\Zn\nPorts: "
|
||||
unset HOSTPORTS
|
||||
declare -A HOSTPORTS
|
||||
while read LINE; do
|
||||
ATAPORT="`echo ${LINE} | grep -o 'ata[0-9]*'`"
|
||||
PORT=`echo ${ATAPORT} | sed 's/ata//'`
|
||||
HOSTPORTS[${PORT}]=`echo ${LINE} | grep -o 'host[0-9]*$'`
|
||||
done < <(ls -l /sys/class/scsi_host | fgrep "${PCI}")
|
||||
while read PORT; do
|
||||
ls -l /sys/block | fgrep -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
|
||||
[ `cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd` -eq 0 ] && DUMMY=1 || DUMMY=0
|
||||
[ ${ATTACH} -eq 1 ] && TEXT+="\Z2\Zb"
|
||||
[ ${DUMMY} -eq 1 ] && TEXT+="\Z1"
|
||||
TEXT+="${PORT}\Zn "
|
||||
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
|
||||
TEXT+="\n"
|
||||
done
|
||||
TEXT+="\nPorts with color \Z1red\Zn as DUMMY, color \Z2\Zbgreen\Zn has drive connected\n"
|
||||
TEXT+="Use this information to assist in creating SataPortMap, DiskIdxMap and sata_remap"
|
||||
dialog --backtitle "`backtitle`" --colors --aspect 18 \
|
||||
--msgbox "${TEXT}" 0 0
|
||||
;;
|
||||
e) return ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
function synoinfoMenu() {
|
||||
# Read synoinfo from user config
|
||||
unset SYNOINFO
|
||||
declare -A SYNOINFO
|
||||
while IFS="=" read KEY VALUE; do
|
||||
[ -n "${KEY}" ] && SYNOINFO["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "synoinfo" "${USER_CONFIG_FILE}")
|
||||
# menu loop
|
||||
while true; do
|
||||
dialog --backtitle "`backtitle`" \
|
||||
--menu "Choose a option" 0 0 0 \
|
||||
a "Add/edit an synoinfo item" \
|
||||
d "Delete synoinfo item(s)" \
|
||||
s "Show user synoinfo" \
|
||||
m "Show model/build synoinfo" \
|
||||
e "Exit" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && return
|
||||
case "`<${TMP_PATH}/resp`" in
|
||||
a)
|
||||
dialog --backtitle "`backtitle`" --title "User synoinfo" \
|
||||
--inputbox "Type a name of synoinfo variable" 0 0 \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
|
||||
dialog --backtitle "`backtitle`" --title "User synoinfo" \
|
||||
--inputbox "Type a value of '${NAME}' variable" 0 0 "${SYNOINFO[${NAME}]}" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && continue
|
||||
VALUE="`<"${TMP_PATH}/resp"`"
|
||||
SYNOINFO[${NAME}]="${VALUE}"
|
||||
writeConfigKey "synoinfo.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
DIRTY=1
|
||||
;;
|
||||
d)
|
||||
if [ ${#SYNOINFO[@]} -eq 0 ]; then
|
||||
dialog --backtitle "`backtitle`" --msgbox "No user synoinfo to remove" 0 0
|
||||
continue
|
||||
fi
|
||||
ITEMS=""
|
||||
for I in "${!SYNOINFO[@]}"; do
|
||||
ITEMS+="${I} ${SYNOINFO[${I}]} off "
|
||||
done
|
||||
dialog --backtitle "`backtitle`" \
|
||||
--checklist "Select synoinfo to remove" 0 0 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
RESP=`<"${TMP_PATH}/resp"`
|
||||
[ -z "${RESP}" ] && continue
|
||||
for I in ${RESP}; do
|
||||
unset SYNOINFO[${I}]
|
||||
deleteConfigKey "synoinfo.${I}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
DIRTY=1
|
||||
;;
|
||||
s)
|
||||
ITEMS=""
|
||||
for KEY in ${!SYNOINFO[@]}; do
|
||||
ITEMS+="${KEY}: ${SYNOINFO[$KEY]}\n"
|
||||
done
|
||||
dialog --backtitle "`backtitle`" --title "User synoinfo" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
m)
|
||||
ITEMS=""
|
||||
while IFS="=" read KEY VALUE; do
|
||||
ITEMS+="${KEY}: ${VALUE}\n"
|
||||
done < <(readModelMap "${MODEL}" "builds.${BUILD}.synoinfo")
|
||||
dialog --backtitle "`backtitle`" --title "Model/build synoinfo" \
|
||||
--aspect 18 --msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
e) return ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Calls boot.sh to boot into DSM kernel/ramdisk
|
||||
function boot() {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DS1621+"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DS2422+"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DS3615xs"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DS3617xs"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DS3622xs+"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DS918+"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DS920+"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DVA1622"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
id: "DVA3221"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- ata_piix
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
|
||||
@@ -1,88 +0,0 @@
|
||||
id: "FS6400"
|
||||
modules-notneeded: &modules-notneeded
|
||||
- ahci
|
||||
- i40e
|
||||
- ixgbe
|
||||
- igb
|
||||
- e1000e
|
||||
- dca
|
||||
- etxhci_hcd
|
||||
- xhci_hcd
|
||||
- ehci-pci
|
||||
- uhci_hcd
|
||||
- r8168
|
||||
- mpt3sas
|
||||
synoinfo: &synoinfo
|
||||
# support_bde_internal_10g: "no"
|
||||
# support_disk_compatibility: "no"
|
||||
# esataportcfg: "0x00"
|
||||
# usbportcfg: "0x10000"
|
||||
rss_server: "http://example.com/null.xml"
|
||||
rss_server_ssl: "https://example.com/null.xml"
|
||||
rss_server_v2: "https://example.com/autoupdate/v2/getList"
|
||||
update_server: "http://example.com/"
|
||||
update_server_ssl: "https://example.com/"
|
||||
small_info_path: "https://example.com/null"
|
||||
updateurl: "http://example.com/"
|
||||
myds_region_api_base_url: "https://example.com"
|
||||
security_version_server: "https://example.com/smallupdate"
|
||||
cmdline: &cmdline
|
||||
# SMBusHddDynamicPower: 1
|
||||
vender_format_version: 2
|
||||
syno_port_thaw: 1
|
||||
syno_hdd_detect: 0
|
||||
synoboot2:
|
||||
syno_ttyS0: "serial,0x3f8"
|
||||
syno_ttyS1: "serial,0x2f8"
|
||||
platform: "purley"
|
||||
serial:
|
||||
prefix:
|
||||
- "1960"
|
||||
middle: "PSN"
|
||||
suffix: "numeric"
|
||||
disks: 24
|
||||
dt: true
|
||||
builds:
|
||||
42218:
|
||||
ver: "7.0.1"
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
efi-bug: no
|
||||
modules-notneeded: *modules-notneeded
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
pat:
|
||||
url: "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_FS6400_42218.pat"
|
||||
hash: "0e5e15398fb50d21ac52e0fbae199d5bacebc52f04933be5825c710f9de874ea"
|
||||
ramdisk-hash: "eebaf0236230956fc1a9d8ca8c8f86143da959b631cad9c311152a4e644d17a0"
|
||||
zimage-hash: "cbed16da4970c41e9b9c6797c57c70b12f55ab497756cb050247d1c155c8a8f6"
|
||||
patch:
|
||||
- "ramdisk-common-disable-root-pwd.patch"
|
||||
- "ramdisk-common-init-script.patch"
|
||||
- "ramdisk-common-post-init-script.patch"
|
||||
- "ramdisk-common-network-hosts.patch"
|
||||
- "ramdisk-common-disable-disabled-ports.patch"
|
||||
|
||||
42661:
|
||||
ver: "7.1.0"
|
||||
kver: "4.4.180"
|
||||
rd-compressed: false
|
||||
efi-bug: no
|
||||
modules-notneeded: *modules-notneeded
|
||||
cmdline:
|
||||
<<: *cmdline
|
||||
synoinfo:
|
||||
<<: *synoinfo
|
||||
pat:
|
||||
url: "https://global.download.synology.com/download/DSM/release/7.1/42661-1/DSM_FS6400_42661.pat"
|
||||
hash: "94a84725e8b24dfb448429068c046e05084ead3a210f8710979e0992904673e7"
|
||||
ramdisk-hash: "6ceff751e7132dd8cc80ff64ee23b7e3b3986d85d7d9132b4cb4b0d50f223b1f"
|
||||
zimage-hash: "2326a556eec4c48b9887bad7eecab268e43dc0e036bed8ddf6fbba466d713cde"
|
||||
patch:
|
||||
- "ramdisk-common-disable-root-pwd.patch"
|
||||
- "ramdisk-common-init-script.patch"
|
||||
- "ramdisk-42661-post-init-script.patch"
|
||||
- "ramdisk-common-network-hosts.patch"
|
||||
- "ramdisk-42661-disable-disabled-ports.patch"
|
||||
@@ -93,6 +93,7 @@ cp "${PATCH_PATH}/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
|
||||
# Check if model needs Device-tree dynamic patch
|
||||
DT="`readModelKey "${MODEL}" "dt"`"
|
||||
[ "${DT}" = "true" ] && ADDONS['qjs-dtb']="" # Add system addon "qjs-dtb"
|
||||
ADDONS['misc']="" # Add system addon "misc"
|
||||
mkdir -p "${RAMDISK_PATH}/addons"
|
||||
echo -n "."
|
||||
#/proc/sys/kernel/syno_install_flag
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -23,6 +23,3 @@ available-for:
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
purley-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -30,7 +30,3 @@ available-for:
|
||||
install-script: "install.sh"
|
||||
copy: "all"
|
||||
modules: true
|
||||
purley-4.4.180:
|
||||
install-script: "install.sh"
|
||||
copy: "all"
|
||||
modules: false
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
files/board/arpl/p3/addons/arcmsr/apollolake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/arcmsr/apollolake-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/arcmsr/broadwell-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/arcmsr/broadwell-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/arcmsr/broadwellnk-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/arcmsr/broadwellnk-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/arcmsr/bromolow-3.10.108.tgz
Normal file
BIN
files/board/arpl/p3/addons/arcmsr/bromolow-3.10.108.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/arcmsr/denverton-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/arcmsr/denverton-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/arcmsr/geminilake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/arcmsr/geminilake-4.4.180.tgz
Normal file
Binary file not shown.
25
files/board/arpl/p3/addons/arcmsr/manifest.yml
Normal file
25
files/board/arpl/p3/addons/arcmsr/manifest.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
version: 1
|
||||
name: arcmsr
|
||||
description: "Driver for Areca ARC11xx/12xx/16xx/188x SAS/SATA RAID Controller"
|
||||
available-for:
|
||||
bromolow-3.10.108:
|
||||
install-script: &script "install.sh"
|
||||
modules: true
|
||||
apollolake-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
broadwell-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
broadwellnk-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
denverton-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
geminilake-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
BIN
files/board/arpl/p3/addons/arcmsr/v1000-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/arcmsr/v1000-4.4.180.tgz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -23,6 +23,3 @@ available-for:
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
purley-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -23,6 +23,3 @@ available-for:
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
purley-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
|
||||
Binary file not shown.
Binary file not shown.
BIN
files/board/arpl/p3/addons/ax88179_178a/apollolake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/ax88179_178a/apollolake-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/ax88179_178a/broadwell-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/ax88179_178a/broadwell-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/ax88179_178a/broadwellnk-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/ax88179_178a/broadwellnk-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/ax88179_178a/bromolow-3.10.108.tgz
Normal file
BIN
files/board/arpl/p3/addons/ax88179_178a/bromolow-3.10.108.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/ax88179_178a/denverton-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/ax88179_178a/denverton-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/ax88179_178a/geminilake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/ax88179_178a/geminilake-4.4.180.tgz
Normal file
Binary file not shown.
25
files/board/arpl/p3/addons/ax88179_178a/manifest.yml
Normal file
25
files/board/arpl/p3/addons/ax88179_178a/manifest.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
version: 1
|
||||
name: ax88179_178a
|
||||
description: "Driver for ASIX AX88179/178A based USB 3.0/2.0 Gigabit Ethernet"
|
||||
available-for:
|
||||
bromolow-3.10.108:
|
||||
install-script: &script "install.sh"
|
||||
modules: true
|
||||
apollolake-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
broadwell-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
broadwellnk-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
denverton-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
geminilake-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
BIN
files/board/arpl/p3/addons/ax88179_178a/v1000-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/ax88179_178a/v1000-4.4.180.tgz
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -23,7 +23,3 @@ available-for:
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
purley-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -23,7 +23,3 @@ available-for:
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
purley-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
files/board/arpl/p3/addons/megaraid_sas/apollolake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/megaraid_sas/apollolake-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/megaraid_sas/broadwell-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/megaraid_sas/broadwell-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/megaraid_sas/broadwellnk-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/megaraid_sas/broadwellnk-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/megaraid_sas/bromolow-3.10.108.tgz
Normal file
BIN
files/board/arpl/p3/addons/megaraid_sas/bromolow-3.10.108.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/megaraid_sas/denverton-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/megaraid_sas/denverton-4.4.180.tgz
Normal file
Binary file not shown.
BIN
files/board/arpl/p3/addons/megaraid_sas/geminilake-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/megaraid_sas/geminilake-4.4.180.tgz
Normal file
Binary file not shown.
25
files/board/arpl/p3/addons/megaraid_sas/manifest.yml
Normal file
25
files/board/arpl/p3/addons/megaraid_sas/manifest.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
version: 1
|
||||
name: megaraid_sas
|
||||
description: "Driver for Avago MegaRAID SAS adapter"
|
||||
available-for:
|
||||
bromolow-3.10.108:
|
||||
install-script: &script "install.sh"
|
||||
modules: true
|
||||
apollolake-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
broadwell-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
broadwellnk-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
denverton-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
geminilake-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
v1000-4.4.180:
|
||||
install-script: *script
|
||||
modules: true
|
||||
BIN
files/board/arpl/p3/addons/megaraid_sas/v1000-4.4.180.tgz
Normal file
BIN
files/board/arpl/p3/addons/megaraid_sas/v1000-4.4.180.tgz
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user