diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2013-05-03 21:08:42 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2013-05-03 21:08:42 +0400 |
commit | 1058def8e7827e56ce4a70afb4aeacb5dc44148f (patch) | |
tree | 4495d23e7b54ab5700e3839081e797c1eafe0db9 /setup/Linux/oss/scripts/remove_drv.sh | |
download | oss4-upstream/4.2-build2006.tar.gz |
Imported Upstream version 4.2-build2006upstream/4.2-build2006upstream
Diffstat (limited to 'setup/Linux/oss/scripts/remove_drv.sh')
-rw-r--r-- | setup/Linux/oss/scripts/remove_drv.sh | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/setup/Linux/oss/scripts/remove_drv.sh b/setup/Linux/oss/scripts/remove_drv.sh new file mode 100644 index 0000000..55cc1b4 --- /dev/null +++ b/setup/Linux/oss/scripts/remove_drv.sh @@ -0,0 +1,164 @@ +#!/bin/sh +if test -f /etc/oss.conf +then + . /etc/oss.conf +else + OSSLIBDIR=/usr/lib/oss +fi + +# This script wipes out the previously installed sound drivers +# from the system. + +# Backup all kernel sound drivers (ALSA) and remove the kernel/sound +# directory from the system. Untar the backup package to return ALSA +# back in business. + +if test -x /sbin/chkconfig +then + /sbin/chkconfig alsasound off > /dev/null 2>&1 +elif test -x /usr/sbin/update-rc.d +then + /usr/sbin/update-rc.d -f alsa-utils remove > /dev/null 2>&1 +elif test -x /usr/sbin/alsa +then + /usr/sbin/alsa force-unload > /dev/null 2>&1 +fi + +if test -d /lib/modules/`uname -r`/kernel/sound +then + if ! test -f /lib/modules/`uname -r`/sound-preoss.tar.bz2 + then + (cd /lib/modules/`uname -r`; tar cfj /lib/modules/`uname -r`/sound-preoss.tar.bz2 kernel/sound) + fi + + rm -rf /lib/modules/`uname -r`/kernel/sound + depmod -a +fi + +# Kill all applications using ALSA or OSS/Free devices + +# We have to use ugly replacement of fuser since this command got broken +# in some Linux recent distributions. + +KILL=0 + +for n in /proc/[0-9]* +do + PID=`basename $n` + if test "`ls -l $n/fd/* 2>/dev/null|grep /dev/snd` " != " " + then + KILL=1 + fi + + if test "`ls -l $n/fd/* 2>/dev/null|grep /dev/mixer` " != " " + then + KILL=1 + fi +done + +if ! test -d $OSSLIBDIR/save +then + mkdir $OSSLIBDIR/save +fi + +if test "$KILL " = "1 " +then +echo killing + rm -f /dev/mixer.old + mv /dev/mixer /dev/mixer.old 2>/dev/null + #if test -d /dev/snd + #then + #(cd /;tar cfj $OSSLIBDIR/save/alsadevs.tar.bz2 dev/snd) + #fi + + #mv /dev/snd /dev/snd.osssave + #fuser -k -s /dev/mixer.old /dev/snd.osssave/* +fi + +# Remove all loaded ALSA modules +SOUNDDEVS= + +if test -f /dev/mixer.old +then + SOUNDDEVS="$SOUNDDEVS /dev/mixer.old" +fi + +if test -d /dev/snd.osssave +then + SOUNDDEVS="$SOUNDDEVS /dev/snd.osssave/*" +fi + +for timeout in 0 1 2 3 4 5 6 7 8 9 10 11 +do + if test "`cat /proc/modules|grep ^snd_|sed 's/ .*//'` " = " " + then + break + fi + + if test $timeout -gt 10 + then + echo Cannot unload the ALSA modules. Apparently there is some + echo application keeping them busy. + echo Please reboot your system and try to start OSS again. + ps ax + lsmod + cat /proc/devices + cat /proc/interrupts + exit 1 + fi + + if test "$SOUNDDEVS " != " " + then + fuser -s -9 $SOUNDDEVS + else + echo Cannot find any processes using the conflicting sound driver + fi + + for n in `cat /proc/modules|grep ^snd_|sed 's/ .*//'` + do + rmmod $n + #rmmod $n >/dev/null 2>&1 + done + + sleep 1 +done + +rmmod snd > /dev/null 2>&1 + +# Remove soundcore +rmmod soundcore > /dev/null 2>&1 + +rm -f /dev/mixer.old + +if cat /proc/devices|grep -q '^ *14 ' +then + + echo There still appears to be another sound driver hanging around + + lsmod + cat /proc/devices|grep '^ *14 ' + cat /proc/interrupts + + exit 1 +fi + +for n in /dev/sndstat /dev/mixer* /dev/dsp* /dev/midi* /dev/sequencer /dev/music +do + if readlink $n >/dev/null 2>&1 + then # Symbolic link + if readlink $n | grep -q asound + then # Link to ALSA devices + rm -f $n + fi + fi +done + +# Disable automatic startup of ALSA during system bootup + +if test "`ls /etc/rc.d/rc*/*alsasound*` " != " " > /dev/null 2>&1 +then + (cd /;tar cfj $OSSLIBDIR/save/alsarc/tar.bz2 etc/rc.d/rc*/*alsasound*) + rm -f /etc/rc.d/rc*/*alsasound* +fi > /dev/null 2>&1 + +exit 0 |