d536c3e203
DKMS (Dynamic Kernel Module Support) [1] provides a mechanism where kernel modules can be automatically updated when a new kernel is booted. This is a simple helper script to automate the process of adding dahdi-linux to the local DKMS system. [1] http://linux.dell.com/dkms/ Signed-off-by: Shaun Ruffell <sruffell@digium.com> Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
124 lines
4.3 KiB
Bash
Executable File
124 lines
4.3 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
DKMS=$(which dkms)
|
|
|
|
usage() {
|
|
echo "$(basename $0): Helper functions for DKMS (Dynamic Kernel Module Support)"
|
|
echo "Usage: $0 [add|remove|generate_conf]"
|
|
echo "Options:"
|
|
echo " remove -a : Remove all versions of DAHDI for all kernels."
|
|
echo ""
|
|
echo "Examples:"
|
|
echo ""
|
|
echo " build_tools/dkms-helper add"
|
|
echo " Installs the current version of DAHDI into the DKMS system."
|
|
echo ""
|
|
echo " build_tools/dkms-helper remove"
|
|
echo " Removes the current version of DAHDI from all kernels."
|
|
echo ""
|
|
echo " build_tools/dkms-helper generate_conf > dkms.conf"
|
|
echo " Create a dkms.conf based on the currently compiled kernel"
|
|
echo " modules. This is also done as part of add and is not"
|
|
echo " normally needed as a separate step."
|
|
echo ""
|
|
echo "NOTE: Because firmware files could be different between different"
|
|
echo "versions of DAHDI, and the firmware files are installed into the common"
|
|
echo "/lib/firmware directory, you should remove a given version of DAHDI from all"
|
|
echo "kernels before installing a new version of DAHDI to avoid potential"
|
|
echo "conflicts."
|
|
echo ""
|
|
}
|
|
|
|
generate_configuration() {
|
|
echo 'PACKAGE_NAME="dahdi-linux"'
|
|
echo "PACKAGE_VERSION=\"$(build_tools/make_version .)\""
|
|
echo 'MAKE="make KSRC=/lib/modules/${kernelver}/build"'
|
|
echo 'CLEAN="make clean"'
|
|
echo 'AUTOINSTALL="yes"'
|
|
let "module_number=0" || true
|
|
for file in $(find ./ -type f -name "*.ko"); do
|
|
MODULE_LOCATION=$(dirname $file | cut -d\/ -f 2-)
|
|
echo "BUILT_MODULE_NAME[$module_number]=\"$(basename $file .ko)\""
|
|
echo "BUILT_MODULE_LOCATION[$module_number]=\"$MODULE_LOCATION\""
|
|
echo "DEST_MODULE_LOCATION[$module_number]=\"/kernel/dahdi/$(echo $MODULE_LOCATION | cut -d\/ -f 3-)\""
|
|
let "module_number=${module_number}+1" || true
|
|
done
|
|
if [ $module_number -eq 0 ]; then
|
|
echo "WARNING: You should build the modules before generating a config." >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
add() {
|
|
GIT=$(which git)
|
|
VERSION="$(build_tools/make_version .)"
|
|
if [ $(id -u) != "0" ]; then
|
|
echo "You must run $0 as root."
|
|
exit 1
|
|
fi
|
|
echo "Building for version ${VERSION}"
|
|
make > /dev/null
|
|
echo "Copying to /usr/src/dahdi-linux-${VERSION}"
|
|
if [ ! -d /usr/src/dahdi-linux-${VERSION} ]; then
|
|
if [ -d .git ]; then
|
|
${GIT} checkout-index -a --prefix=/usr/src/dahdi-linux-${VERSION}/
|
|
else
|
|
cp -f -r * /usr/src/dahdi-linux-${VERSION}/
|
|
fi
|
|
fi
|
|
make -C /usr/src/dahdi-linux-${VERSION} install-firmware firmware-loaders
|
|
build_tools/dkms-helper generate_conf > /usr/src/dahdi-linux-${VERSION}/dkms.conf
|
|
echo $VERSION > /usr/src/dahdi-linux-${VERSION}/.version
|
|
${DKMS} add -m dahdi-linux -v ${VERSION}
|
|
${DKMS} build -m dahdi-linux -v ${VERSION}
|
|
${DKMS} install --force -m dahdi-linux -v ${VERSION}
|
|
}
|
|
|
|
remove() {
|
|
if [ $(id -u) != "0" ]; then
|
|
echo "You must run $0 as root."
|
|
exit 1
|
|
fi
|
|
REMOVE_ALL=false
|
|
shift
|
|
while getopts "a" opt; do
|
|
case $opt in
|
|
a) REMOVE_ALL=true ;;
|
|
*) echo "Unknown option to remove" ; exit 1;;
|
|
esac
|
|
done
|
|
if [ $REMOVE_ALL == true ]; then
|
|
# Remove all installed dahdi versions for all kernels.
|
|
for version in $(${DKMS} status -m dahdi-linux | cut -d, -f 2 | sed -e "s/^\s\+//"); do
|
|
echo "Removing version ${version}"
|
|
${DKMS} remove -m dahdi-linux -v ${version} --all
|
|
rm -f -r /usr/src/dahdi-linux-${version}
|
|
done
|
|
else
|
|
# Just remove the version for the current tree.
|
|
GIT=$(which git)
|
|
VERSION="$(build_tools/make_version .)"
|
|
${DKMS} remove -m dahdi-linux -v ${VERSION} --all
|
|
if [ -e /usr/src/dahdi-linux-${VERSION}/dkms.conf ]; then
|
|
rm -f -r /usr/src/dahdi-linux-${VERSION}
|
|
else
|
|
echo "/usr/src/dahdi-linux-${VERSION} not a dkms dir?"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Run the command...
|
|
shift $(($OPTIND-1))
|
|
COMMAND=$1
|
|
case $COMMAND in
|
|
add) add $*; exit $? ;;
|
|
remove) remove $* ; exit $? ;;
|
|
generate_conf) generate_configuration; exit $? ;;
|
|
*) echo "unknown command $0" ; usage; exit 1;;
|
|
esac
|
|
|
|
exit 0
|