#! /sbin/sh # # This script patches SunOS 5.8 sun4m kernels to run on # SPARCsystem-600 (note: SuperSPARC or better is required) # # Created by Erik Persson # PATH=/usr/bin:/usr/sbin:/sbin export PATH # # SunOS 5.8 seems to be oblivious of SUNW,SPARCsystem-600 so # 'uname -i' just says "sun4m" - get platform type from prtconf # PLATFORM=`prtconf | head -5 | tail -1` if [ -n "$2" -a -n "$1" ]; then if [ "$1" = "-f" ]; then KERNEL="$2" else echo "Kernel name cannot be supplied without '-f'" exit fi else KERNEL=/platform/sun4m/kernel/unix fi if [ "$PLATFORM" != "SUNW,SPARCsystem-600" -a "$1" != "-f" ]; then echo "This is not a SPARCsystem-600." echo "Kernel will not be patched unless '-f' option is given." exit fi if [ ! -f "$KERNEL" ]; then echo "$KERNEL does not exist. Skipping kernel patch procedure." fi IAM_SS600_ADDR=`echo "startup+0x0,1000?ai" \ | adb "$KERNEL" \ | grep call \ | grep iam_ss600 \ | head -1 \ | awk -F: '{print $1}'` HALT_ADDR=`echo "$IAM_SS600_ADDR,10?ai" \ | adb "$KERNEL" \ | grep call \ | grep halt \ | head -1 \ | awk -F: '{print $1}'` if [ -n "$IAM_SS600_ADDR" -a -n "$HALT_ADDR" ]; then echo "Kernel image: $KERNEL" echo "Found 'call iam_ss600' instruction: $IAM_SS600_ADDR" echo "Found 'call halt' instruction: $HALT_ADDR" echo "Backing up $KERNEL to $KERNEL.orig" cp "$KERNEL" "$KERNEL.orig" echo "Patching halt instruction at $HALT_ADDR in $KERNEL" echo ( echo "$HALT_ADDR?ai" && \ echo "$HALT_ADDR?W 1000000" && \ echo "$HALT_ADDR?ai" && \ echo "$q" ) \ | adb -w "$KERNEL" sync sync sync fi