#!/bin/bash # # Build script that compiles a DVB driver tarball and slipstreams it into # an matching Debian kernel package. Can compile for non-running kernels. # Configured by variables set in the header section below. # Outputs a kernel package with -dvb added to the package name and # -YYYYMMDD.HHMM added to the version number. # # You'll need a V4L/DVB driver tarball, a linux-image-*.deb package file, # matching linux-headers *installed* # # !!!CAUTION!!! # Always keep another kernel installed for backup, in case of an emergency. # The built kernel package will OVERWRITE its original package on install, # so you might want to install an -486 package for safety if you're modifying # the -686 package. # # Script (c) by Udo Richter , # http://www.udo-richter.de/scripts.en.html#builddvb # Released under the GNU GPL license # Directory name of this script file: DIR="$(dirname "$(readlink -f "$(which "$0")")")" # DVB driver source file: DRIVER="$DIR/v4l-dvb-saa716x-218f3fbbb434.tar.bz2" # Patches to apply to driver: PATCH=( "-p1 -i $DIR/saa716x_ff_demux_tasklet.diff" ) # Kernel release number, eg. uname -r KERNELRELEASE="2.6.32-5-686" # Original kernel package version number: KERNELVERSION="2.6.32-31" # Debian distribution: PLATFORM="i386" # Version number to attach to kernel version: NEWKERNELVERSION="$KERNELVERSION-"$(date +%Y%m%d.%H%M) # Source deb file of matching kernel package DEBSRCKERNEL="${DIR}/linux-image-${KERNELRELEASE}_${KERNELVERSION}_${PLATFORM}.deb" # Target deb file for modified kernel package DEBDSTKERNEL="${DIR}/linux-image-${KERNELRELEASE}-dvb_${NEWKERNELVERSION}_${PLATFORM}.deb" # Paths to kernel source and kernel header, as installed OUTDIR="/lib/modules/${KERNELRELEASE}/build" SRCDIR="/lib/modules/${KERNELRELEASE}/source" # Temporary folder for building and assembling: BUILD="/tmp/dvb-build/$$" # ---------------------------------------- ask-delete-folder() { if [ -d "$1" ] ; then echo -n "Delete folder $1 (y/n)?" read yesno if [ "$yesno" = "y" ] ; then rm -r $1 else exit 1 fi fi } set -e MAKEPARAMS=( KERNELRELEASE="$KERNELRELEASE" OUTDIR="$OUTDIR" SRCDIR="$SRCDIR" DESTDIR="$BUILD/deb" ) ask-delete-folder "$BUILD" # Prepare the driver source mkdir -p "$BUILD/dvb" mkdir -p "$BUILD/deb" cd "$BUILD/dvb" echo "Extracting $DRIVER" tar xf "$DRIVER" --strip-components=1 for ((i=0; i<${#PATCH[@]}; i++)) do echo "Patching ${PATCH[i]}" patch ${PATCH[i]} done # Build the driver make "${MAKEPARAMS[@]}" all # Extract the kernel package and install driver fakeroot dpkg -x "$DEBSRCKERNEL" "$BUILD/deb" fakeroot dpkg -e "$DEBSRCKERNEL" "$BUILD/deb/DEBIAN" fakeroot make "${MAKEPARAMS[@]}" media-install # Files that will be rebuilt on package install: rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.alias" rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.alias.bin" rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.dep" rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.dep.bin" rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.devname" rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.softdep" rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.symbols" rm "$BUILD/deb/lib/modules/${KERNELRELEASE}/modules.symbols.bin" # Modify DEBIAN/control file # old package name: package=`sed -n -e "/^Package: /s/Package: //p" "$BUILD/deb/DEBIAN/control"` # driver source file name: driverfile=$(basename "$DRIVER") sed -e "/^Package:/s/.*/Package: linux-image-$KERNELRELEASE-dvb/" \ -e "/^Version:/s/.*/Version: $NEWKERNELVERSION\\nReplaces: $package/" \ -e "$ a \\ Repacked with DVB drivers from $driverfile\n made with builddvb script from http://www.udo-richter.de/vdr/scripts.html#builddvb" \ -i "$BUILD/deb/DEBIAN/control" # Build new kernel file: fakeroot dpkg -b "$BUILD/deb" "$DEBDSTKERNEL" echo "Kernel package built into $DEBDSTKERNEL" ask-delete-folder "$BUILD"