diff options
Diffstat (limited to 'fs/yaffs2/patch-ker.sh')
| -rwxr-xr-x | fs/yaffs2/patch-ker.sh | 121 | 
1 files changed, 121 insertions, 0 deletions
| diff --git a/fs/yaffs2/patch-ker.sh b/fs/yaffs2/patch-ker.sh new file mode 100755 index 000000000..173d1ce8b --- /dev/null +++ b/fs/yaffs2/patch-ker.sh @@ -0,0 +1,121 @@ +#!/bin/sh +# +# YAFFS: Yet another FFS. A NAND-flash specific file system. +# +# Copyright (C) 2002-2006 Aleph One Ltd. +#  +# Created by Charles Manning <charles@aleph1.co.uk> +#  +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# Patch YAFFS into the kernel +# +#  args:  kpath  : Full path to kernel sources to be patched +# +#  Somewhat "inspired by" the mtd patchin script +# +#  $Id: patch-ker.sh,v 1.3 2007/07/25 01:04:38 charles Exp $ + +VERSION=0 +PATCHLEVEL=0 +SUBLEVEL=0 +COPYORLINK=$1 +LINUXDIR=$2 + +# To be a Linux directory, it must have a Makefile + + +# Display usage of this script +usage () { +	echo "usage:  $0  c/l kernelpath" +	echo " if c/l is c, then copy. If l then link" +	exit 1 +} + + + +if [ -z $LINUXDIR ] +then +    usage; +fi + +if [ $COPYORLINK = l ]; then +   CPY="ln -s" +elif [ $COPYORLINK = c ]; then +   CPY="cp" +else +   echo "unknown copy or link type" +   usage; +fi + + +# Check if kerneldir contains a Makefile +if [ ! -f $LINUXDIR/Makefile ]  +then  +	echo "Directory $LINUXDIR does not exist or is not a kernel source directory"; +	exit 1; +fi + +# Get kernel version +VERSION=`grep -s VERSION <$LINUXDIR/Makefile | head -n 1 | sed s/'VERSION = '//` +PATCHLEVEL=`grep -s PATCHLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'PATCHLEVEL = '//` +SUBLEVEL=`grep -s SUBLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'SUBLEVEL = '//` + +# Can we handle this version? +if [ $VERSION -ne 2  -o $PATCHLEVEL -lt 6  ] +then  +	echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x or higher" +	exit 1; +fi + + +KCONFIG=$LINUXDIR/fs/Kconfig +KCONFIGOLD=$LINUXDIR/fs/Kconfig.pre.yaffs +YAFFS_PATCHED_STRING=`grep -s yaffs <$KCONFIG | head -n 1` + +MAKEFILE=$LINUXDIR/fs/Makefile +MAKEFILEOLD=$LINUXDIR/fs/Makefile.pre.yaffs + +if [ ! -z "$YAFFS_PATCHED_STRING" ] +then +    YAFFS_PATCHED=0 +    echo "$KCONFIG already mentions YAFFS, so we will not change it" +else +   # Change the fs/Kconfig file +   # Save the old Kconfig +   # Copy all stuff up to JFFS +   # Insert some YAFFS stuff +   # Copy all the rest of the stuff + +    YAFFS_PATCHED=1 +    echo "Updating $KCONFIG" +    mv -f $KCONFIG  $KCONFIGOLD +    sed -n -e "/JFFS/,99999 ! p" $KCONFIGOLD >$KCONFIG +    echo "">>$KCONFIG +    echo "# Patched by YAFFS" >>$KCONFIG +    echo "source \"fs/yaffs2/Kconfig\"">>$KCONFIG +    echo "">>$KCONFIG +    sed -n -e "/JFFS/,99999 p" $KCONFIGOLD >>$KCONFIG + +   # now do fs/Makefile -- simply add the target at the end +    echo "Updating $MAKEFILE" +    cp -f $MAKEFILE $MAKEFILEOLD +    echo "">>$MAKEFILE +    echo "# Patched by YAFFS" >>$MAKEFILE +    echo "obj-\$(CONFIG_YAFFS_FS)		+= yaffs2/" >>$MAKEFILE + +fi + +YAFFSDIR=$LINUXDIR/fs/yaffs2 + +if [ -e $YAFFSDIR ] +then +   echo "$YAFFSDIR exists, not patching" +else +   mkdir $LINUXDIR/fs/yaffs2 +   $CPY  $PWD/Makefile.kernel $LINUXDIR/fs/yaffs2/Makefile +   $CPY $PWD/Kconfig $LINUXDIR/fs/yaffs2 +   $CPY $PWD/*.c $PWD/*.h  $LINUXDIR/fs/yaffs2 +fi |