|
Packit |
577717 |
#!/bin/sh
|
|
Packit |
577717 |
# $Id: update-kernel,v 1.9.2.7 2010/07/01 17:22:27 mikpe Exp $
|
|
Packit |
577717 |
# usage:
|
|
Packit |
577717 |
# cd ${kernelsrcdir}
|
|
Packit |
577717 |
# ${perfctrsrcdir}/update-kernel
|
|
Packit |
577717 |
|
|
Packit |
577717 |
perfctr=
|
|
Packit |
577717 |
patch=
|
|
Packit |
577717 |
patchtype=
|
|
Packit |
577717 |
nopatch=
|
|
Packit |
577717 |
dryrun=
|
|
Packit |
577717 |
sym=
|
|
Packit |
577717 |
backup=
|
|
Packit |
577717 |
maybe_redhat=
|
|
Packit |
577717 |
maybe_suse=
|
|
Packit |
577717 |
VERSION=
|
|
Packit |
577717 |
PATCHLEVEL=
|
|
Packit |
577717 |
SUBLEVEL=
|
|
Packit |
577717 |
EXTRAVERSION=
|
|
Packit |
577717 |
kernel=
|
|
Packit |
577717 |
|
|
Packit |
577717 |
usage() {
|
|
Packit |
577717 |
echo 'Usage: cd ${kernelsrcdir}; ${perfctrsrcdir}/update-kernel [options]'
|
|
Packit |
577717 |
echo 'Available options:'
|
|
Packit |
577717 |
echo '--patch=version force use of patch for particular kernel version'
|
|
Packit |
577717 |
echo '-p version ditto'
|
|
Packit |
577717 |
echo '--nopatch do not apply patch, only install new files'
|
|
Packit |
577717 |
echo '-n ditto'
|
|
Packit |
577717 |
echo '--test apply the patch but do not change any files'
|
|
Packit |
577717 |
echo '-t ditto'
|
|
Packit |
577717 |
exit 1
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
get_perfctr_srcdir() {
|
|
Packit |
577717 |
# XXX: use dirname instead?
|
|
Packit |
577717 |
perfctr=`echo $0 | sed 's+/update-kernel$++'`
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
get_arch() {
|
|
Packit |
577717 |
if [ -z "$ARCH" ]; then
|
|
Packit |
577717 |
OLDARCH=`uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/`
|
|
Packit |
577717 |
ARCH=`echo $OLDARCH | sed -e s/i386/x86/ -e s/x86_64/x86/ -e s/ppc.*/powerpc/`
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
get_options() {
|
|
Packit |
577717 |
while [ $# -gt 0 ]; do
|
|
Packit |
577717 |
case "$1" in
|
|
Packit |
577717 |
--patch=*)
|
|
Packit |
577717 |
patch=`echo "$1" | sed s/--patch=//`
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
-p)
|
|
Packit |
577717 |
shift
|
|
Packit |
577717 |
if [ $# -eq 0 ]; then
|
|
Packit |
577717 |
echo Error: option "'-p'" requires an argument
|
|
Packit |
577717 |
usage
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
patch="$1"
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
--nopatch|-n)
|
|
Packit |
577717 |
nopatch=1
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
--test|-t)
|
|
Packit |
577717 |
dryrun="--dry-run"
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
--sym)
|
|
Packit |
577717 |
# not for general use
|
|
Packit |
577717 |
sym=1
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
--backup)
|
|
Packit |
577717 |
# not for general use
|
|
Packit |
577717 |
backup=1
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
*)
|
|
Packit |
577717 |
echo Error: unknown option "$1"
|
|
Packit |
577717 |
usage
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
esac
|
|
Packit |
577717 |
shift
|
|
Packit |
577717 |
done
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
check_pwd_is_kernel_srcdir() {
|
|
Packit |
577717 |
if [ ! -f drivers/Makefile -o \( ! -f "arch/$ARCH/kernel/Makefile" -a ! -f "arch/$OLDARCH/kernel/Makefile" \) ]; then
|
|
Packit |
577717 |
echo "Error: `pwd` does not appear to be the top-level kernel source directory"
|
|
Packit |
577717 |
usage
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
check_kernel_srcdir_is_clean() {
|
|
Packit |
577717 |
if [ -f System.map -o -f .version ]; then
|
|
Packit |
577717 |
echo 'Error: kernel source is not clean; please do a "make mrproper"'
|
|
Packit |
577717 |
exit 1
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
get_makefile_variable() {
|
|
Packit |
577717 |
eval `grep "^$1 *=" Makefile | head -n 1 | sed 's/ *= */=/'`
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
get_extra_version() {
|
|
Packit |
577717 |
EXTRAVERSION=`grep "^EXTRAVERSION *=" Makefile | head -n 1 | sed 's/ *= */=/'`
|
|
Packit |
577717 |
case "$EXTRAVERSION" in
|
|
Packit |
577717 |
'EXTRAVERSION=-$(shell echo $(CONFIG_RELEASE)-$(CONFIG_CFGNAME))')
|
|
Packit |
577717 |
maybe_suse=1
|
|
Packit |
577717 |
EXTRAVERSION='EXTRAVERSION=-$(shell echo $(CONFIG_RELEASE))'
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
esac
|
|
Packit |
577717 |
MKF=`cat <
|
|
Packit |
577717 |
-include .config
|
|
Packit |
577717 |
$EXTRAVERSION
|
|
Packit |
577717 |
default:
|
|
Packit |
577717 |
@echo EXTRAVERSION='\\$(EXTRAVERSION)'
|
|
Packit |
577717 |
EOF`
|
|
Packit |
577717 |
eval `echo "$MKF" | make -f -`
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
get_kernel_version() {
|
|
Packit |
577717 |
get_makefile_variable VERSION
|
|
Packit |
577717 |
get_makefile_variable PATCHLEVEL
|
|
Packit |
577717 |
get_makefile_variable SUBLEVEL
|
|
Packit |
577717 |
get_extra_version
|
|
Packit |
577717 |
case "$EXTRAVERSION" in
|
|
Packit |
577717 |
*custom)
|
|
Packit |
577717 |
maybe_redhat=1
|
|
Packit |
577717 |
EXTRAVERSION=`echo $EXTRAVERSION | sed 's/\(.*\)custom/\1/'`
|
|
Packit |
577717 |
;;
|
|
Packit |
577717 |
esac
|
|
Packit |
577717 |
kernel="$VERSION.$PATCHLEVEL.$SUBLEVEL$EXTRAVERSION"
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
check_given_patch() {
|
|
Packit |
577717 |
if [ ! -f "$perfctr/patches/patch-kernel-$patch" ]; then
|
|
Packit |
577717 |
alias=`grep ^$patch/ $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
|
|
Packit |
577717 |
if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
|
|
Packit |
577717 |
patch="$alias"
|
|
Packit |
577717 |
echo Using patch "$alias" for kernel "$kernel"
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
echo Error: no patch for user-specified version "$patch" found
|
|
Packit |
577717 |
echo See "$perfctr/patches/" for supported kernel versions
|
|
Packit |
577717 |
exit 1
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
patchtype="(forced, kernel is $kernel)"
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
try_standard() {
|
|
Packit |
577717 |
if [ -f "$perfctr/patches/patch-kernel-$kernel" ]; then
|
|
Packit |
577717 |
patch="$kernel"
|
|
Packit |
577717 |
echo Found patch for kernel "$kernel"
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
alias=`grep ^$kernel/ $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
|
|
Packit |
577717 |
if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
|
|
Packit |
577717 |
patch="$alias"
|
|
Packit |
577717 |
echo Using patch "$alias" for kernel "$kernel"
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
try_redhat() {
|
|
Packit |
577717 |
if [ -f /etc/redhat-release ]; then
|
|
Packit |
577717 |
maybe_redhat=1
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
if [ -n "$EXTRAVERSION" -a -n "$maybe_redhat" ]; then
|
|
Packit |
577717 |
if [ -f "$perfctr/patches/patch-kernel-$kernel-redhat" ]; then
|
|
Packit |
577717 |
patch="$kernel-redhat"
|
|
Packit |
577717 |
echo Found patch for RedHat kernel "$kernel"
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
alias=`grep ^$kernel-redhat $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
|
|
Packit |
577717 |
if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
|
|
Packit |
577717 |
patch="$alias"
|
|
Packit |
577717 |
echo Using patch "$alias" for RedHat kernel "$kernel"
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
try_suse() {
|
|
Packit |
577717 |
if [ -n "$EXTRAVERSION" -a -n "$maybe_suse" ]; then
|
|
Packit |
577717 |
if [ -f "$perfctr/patches/patch-kernel-$kernel-suse" ]; then
|
|
Packit |
577717 |
patch="$kernel-suse"
|
|
Packit |
577717 |
echo Found patch for SuSE kernel "$kernel"
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
alias=`grep ^$kernel-suse $perfctr/patches/aliases | awk -F/ '{ print $2 }'`
|
|
Packit |
577717 |
if [ -n "$alias" -a -f "$perfctr/patches/patch-kernel-$alias" ]; then
|
|
Packit |
577717 |
patch="$alias"
|
|
Packit |
577717 |
echo Using patch "$alias" for SuSE kernel "$kernel"
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
deduce_patch() {
|
|
Packit |
577717 |
try_standard
|
|
Packit |
577717 |
if [ -z "$patch" ]; then
|
|
Packit |
577717 |
try_redhat
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
if [ -z "$patch" ]; then
|
|
Packit |
577717 |
try_suse
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
if [ -z "$patch" ]; then
|
|
Packit |
577717 |
echo Error: no suitable patch found for kernel "$kernel"
|
|
Packit |
577717 |
echo See "$perfctr/patches/" for supported kernel versions
|
|
Packit |
577717 |
exit 1
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
patchtype="(auto-detected)"
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
identify_patch() {
|
|
Packit |
577717 |
if [ -n "$patch" ]; then
|
|
Packit |
577717 |
check_given_patch
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
deduce_patch
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
apply_patch() {
|
|
Packit |
577717 |
echo
|
|
Packit |
577717 |
echo Applying kernel source patch for "$patch" "$patchtype"
|
|
Packit |
577717 |
echo
|
|
Packit |
577717 |
bVt=
|
|
Packit |
577717 |
if [ "$backup" ]; then
|
|
Packit |
577717 |
bVt="-bVt"
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
patch $dryrun $bVt -p1 < "$perfctr/patches/patch-kernel-$patch"
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
install_file() {
|
|
Packit |
577717 |
if [ -n "$sym" ]; then
|
|
Packit |
577717 |
echo ln -sf ${perfctr}/$1/$2 $3/
|
|
Packit |
577717 |
if [ -z "$dryrun" ]; then
|
|
Packit |
577717 |
ln -sf ${perfctr}/$1/$2 $3/
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
echo tar -C "${perfctr}/$1/" --exclude CVS -cf - $2 '|' tar -C $3/ -xf -
|
|
Packit |
577717 |
if [ -z "$dryrun" ]; then
|
|
Packit |
577717 |
tar -C "${perfctr}/$1/" --exclude CVS -cf - $2 | tar -C $3/ -xf -
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
install_files() {
|
|
Packit |
577717 |
echo
|
|
Packit |
577717 |
echo Installing new kernel source files
|
|
Packit |
577717 |
echo
|
|
Packit |
577717 |
if [ -d arch/x86/include/asm ]; then
|
|
Packit |
577717 |
install_file linux/include/asm-x86 perfctr.h arch/x86/include/asm
|
|
Packit |
577717 |
elif [ -d include/asm-x86 ]; then
|
|
Packit |
577717 |
install_file linux/include/asm-x86 perfctr.h include/asm-x86
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
install_file linux/include/asm-x86 perfctr.h include/asm-i386
|
|
Packit |
577717 |
install_file linux/include/asm-x86 perfctr.h include/asm-x86_64
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
if [ -d arch/powerpc/include/asm ]; then
|
|
Packit |
577717 |
install_file linux/include/asm-powerpc perfctr.h arch/powerpc/include/asm
|
|
Packit |
577717 |
elif [ -d include/asm-powerpc ]; then
|
|
Packit |
577717 |
install_file linux/include/asm-powerpc perfctr.h include/asm-powerpc
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
install_file linux/include/asm-powerpc perfctr.h include/asm-ppc
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
if [ -d arch/arm/include/asm ]; then
|
|
Packit |
577717 |
install_file linux/include/asm-arm perfctr.h arch/arm/include/asm
|
|
Packit |
577717 |
else
|
|
Packit |
577717 |
install_file linux/include/asm-arm perfctr.h include/asm-arm
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
install_file linux/include/linux perfctr.h include/linux
|
|
Packit |
577717 |
install_file linux/drivers perfctr drivers
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
get_perfctr_srcdir
|
|
Packit |
577717 |
get_arch
|
|
Packit |
577717 |
get_options "$@"
|
|
Packit |
577717 |
check_pwd_is_kernel_srcdir
|
|
Packit |
577717 |
check_kernel_srcdir_is_clean
|
|
Packit |
577717 |
get_kernel_version
|
|
Packit |
577717 |
if [ -z "$nopatch" ]; then
|
|
Packit |
577717 |
identify_patch
|
|
Packit |
577717 |
apply_patch
|
|
Packit |
577717 |
fi
|
|
Packit |
577717 |
install_files
|