#!/bin/sh # # YAFFS: Yet another FFS. A NAND-flash specific file system. # # Copyright (C) 2002-2006 Aleph One Ltd. # # Created by Charles Manning # # 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