#!/bin/bash # (C) 2001 - ATI Technologies # installation script for the Linux kernel modules repository # ============================================================== # misc initialized values (not customizeable) exit_val=1 # default values for all customizeable values (will remain here permanently) #BEGIN-DEFAULT module=fglrx OS_MOD=/lib/modules #END-DEFAULT # customized values (this section gets filled in by the installer) #BEGIN-CUSTOM #END-CUSTOM # vendor options CHECK_P3=0 # check if there was a custom specific values during install start if [ -f /etc/ati/inst_path_default -a -f /etc/ati/inst_path_override ]; then . /etc/ati/inst_path_default . /etc/ati/inst_path_override if [ -n "${ATI_KERN_MOD}" ]; then module=`basename ${ATI_KERN_MOD}` OS_MOD=`dirname ${ATI_KERN_MOD}` fi fi # ============================================================== # check if we are running as root with typical login shell paths if [ `id -u` -ne 0 ] then echo "You must be logged in as root to run this script." exit 1 fi which depmod >/dev/null 2>&1 if [ $? -ne 0 ]; then # echo "(completing current path to be a root path)" # echo "" PATH=/usr/local/sbin:/usr/sbin:/sbin:${PATH} which depmod >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "You arent running in a 'login shell'." echo "Please login directly from a console" echo "or use 'su -l' to get the same result." exit 1 fi fi # ============================================================== #BEGIN-MAIN # central script code if [ $CHECK_P3 -ne 0 ] then # determine platform name for which to load the module if [ ! -e $XF_BIN/cpu_check ] then echo "required driver component \"cpu_check\" is missing." echo "symlink creation failed." exit 1 fi fi if [ $CHECK_P3 -ne 0 ] then $XF_BIN/cpu_check >/dev/null case "$?" in 0) iii= ;; 1) iii= ;; 2) iii=.iii ;; 3) iii= ;; 4) iii= ;; 5) iii=.iii ;; 6) iii=.iii ;; *) iii= ;; esac else iii= fi OsName="`uname -r`" OsRelease=$OsName SMP=0 # break down OsRelease string into its components major=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\1"/p` minor=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\2"/p` patch=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\3"/p` extra=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\4"/p` # determine which install system we do use # note: we do not support development kernel series like the 2.5.xx tree if [ $major -gt 2 ]; then kernel_is_26x=1 else if [ $major -eq 2 ]; then if [ $minor -gt 5 ]; then kernel_is_26x=1 else kernel_is_26x=0 fi else kernel_is_26x=0 fi fi if [ $kernel_is_26x -eq 1 ]; then kmod_extension=.ko else kmod_extension=.o fi if [ -f ${module}.${OsRelease}${iii}${kmod_extension} ] then # we already have a module with an exactly matching name. # therefore we dont need any further name manipulation. # its up to Red Hat, SuSE and the user to name its kernels unique. dummy=0 else if [ `echo $OsName | grep -c smp` -gt 0 ] then SMP=1 OsRelease=`echo $OsRelease | sed -e 's/-smp//g' ` OsRelease=`echo $OsRelease | sed -e 's/\.smp/\./g' ` OsRelease=`echo $OsRelease | sed -e 's/smp//g' ` fi if [ `echo $OsName | grep -c SMP` -gt 0 ] then SMP=1 OsRelease=`echo $OsRelease | sed -e 's/-SMP//g' ` OsRelease=`echo $OsRelease | sed -e 's/\.SMP//g' ` OsRelease=`echo $OsRelease | sed -e 's/SMP//g' ` fi OsVersion="`uname -v`" if [ `echo $OsVersion | grep -c smp` -gt 0 ] then SMP=1 OsRelease=`echo $OsRelease | sed -e 's/-smp//g' ` OsRelease=`echo $OsRelease | sed -e 's/\.smp/\./g' ` OsRelease=`echo $OsRelease | sed -e 's/smp//g' ` fi if [ `echo $OsVersion | grep -c SMP` -gt 0 ] then SMP=1 OsRelease=`echo $OsRelease | sed -e 's/-SMP//g' ` OsRelease=`echo $OsRelease | sed -e 's/\.SMP//g' ` OsRelease=`echo $OsRelease | sed -e 's/SMP//g' ` fi if [ -e /proc/ksyms ] then if [ `fgrep smp /proc/ksyms -c` -gt 10 ] then SMP=1 fi fi if [ -e /proc/kallsyms ] then if [ `fgrep smp /proc/kallsyms -c` -gt 10 ] then SMP=1 fi fi fi # break down OsRelease string into its components major=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\1"/p` minor=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\2"/p` patch=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\3"/p` extra=`echo $OsRelease | sed -n -e s/"^\([[:digit:]]*\)\.\([[:digit:]]*\)\.\([[:digit:]]*\)\(.*\)"/"\\4"/p` # determine which install system we do use # note: we do not support development kernel series like the 2.5.xx tree if [ $major -gt 2 ]; then kernel_is_26x=1 else if [ $major -eq 2 ]; then if [ $minor -gt 5 ]; then kernel_is_26x=1 else kernel_is_26x=0 fi else kernel_is_26x=0 fi fi if [ $kernel_is_26x -eq 1 ]; then kmod_extension=.ko else kmod_extension=.o fi ModuleDir=. if [ $SMP = 1 ] then ModuleName=${module}.${OsRelease}${iii}-SMP${kmod_extension} else ModuleName=${module}.${OsRelease}${iii}${kmod_extension} fi ModuleFQN=${ModuleDir}/${ModuleName} AliasFQN=${ModuleDir}/${module}${kmod_extension} if [ "$2" = "verbose" ] then echo ModuleFQN=$ModuleFQN echo AliasFQN=$AliasFQN fi ModuleLogDir=$OS_MOD/$module if [ $SMP = 1 ] then ModuleLogName=make.${OsRelease}${iii}-SMP.log else ModuleLogName=make.${OsRelease}${iii}.log fi ModuleLogFQN=${ModuleLogDir}/${ModuleLogName} if [ "$2" = "verbose" ] then echo ModuleLogFQN=$ModuleLogFQN fi TargetDir=${OS_MOD}/${OsName}/video NonTarDir=${OS_MOD}/${OsName}/kernel/drivers/char/drm if [ $major -gt 2 ] then TargetDir=${OS_MOD}/${OsName}/kernel/drivers/char/drm NonTarDir=${OS_MOD}/${OsName}/video else if [ $major -eq 2 ] then if [ $minor -ge 4 ] then TargetDir=${OS_MOD}/${OsName}/kernel/drivers/char/drm NonTarDir=${OS_MOD}/${OsName}/video fi fi fi # if there is a customized path for the kernel module, use that instead if [ -n "${ATI_KERN_INST}" ]; then TargetDir=${ATI_KERN_INST} fi TargetName=${module}${kmod_extension} TargetFQN=${TargetDir}/${TargetName} NonTarFQN=${NonTarDir}/${TargetName} if [ "$2" = "verbose" ] then echo TargetFQN=$TargetFQN fi # check for presence of module in determined path if [ -f "$ModuleFQN" ] then if [ -e "$TargetFQN" ] then rm -f $TargetFQN fi if [ -e "$NonTarFQN" ] then rm -f $NonTarFQN fi # module is present at determined location if [ "$2" = "verbose" ] then # be verbose about build origin of that module if [ -e "$ModuleLogFQN" ] then echo "kernel module was compiled by the FGL Module Generator" uname_module=`fgrep "uname -a =" $ModuleLogFQN | cut -d'=' -f2` uname_a=`uname -a` if [ "$uname_a" = "$uname_module" ] then echo "kernel module matches current kernel exactly" else # this exact module was built against a different kernel echo "kernel module is only a rough match to kernel" fi else echo "kernel module was provided by hardware vendor, OEM or Linux distribution." fi fi # create symlink now if [ "$2" = "verbose" ] then echo "** ln -s $ModuleFQN $TargetFQN" echo "- creating symlink" fi rm -f $AliasFQN >/dev/null ln -s $ModuleFQN $AliasFQN /sbin/rmmod ${module} >/dev/null 2>/dev/null mkdir -p $TargetDir rm -f $TargetFQN >/dev/null cp $AliasFQN $TargetFQN exit_val=$? if [ $exit_val -eq 0 ] then # recreate dependencies now if [ "$2" = "verbose" ] then echo "** depmod" else echo "- recreating module dependency list" fi depmod exit_val=$? fi if [ $exit_val -eq 0 ] then # recreate dependencies now if [ "$2" = "verbose" ] then echo "** modprobe" else echo "- trying a sample load of the kernel modules" fi modprobe $module exit_val=$? if [ $exit_val -eq 0 ] then rmmod $module fi fi else # special module not present, advice administrator to build his module echo "*** WARNING ***" echo "Tailored kernel module for $module not present in your system." echo "You must go to ${OS_MOD}/${module}/build_mod subdir" echo "and execute './make.sh' to build a fully customed kernel module." echo "Afterwards go to ${OS_MOD}/${module} and run './make_install.sh'" echo "in order to install the module into your kernel's module repository." echo "(see readme.txt for more details.)" echo "" echo "As of now you can still run your XServer in 2D, but hardware accelerated" echo "OpenGL will not work and 2D graphics will lack performance." echo "" # indicate fault exit_val=1 fi #END-MAIN # ============================================================== if [ $exit_val -eq 0 ] then echo "done." else echo "failed." fi exit $exit_val