1#!/bin/sh 2# 3# YAFFS: Yet another FFS. A NAND-flash specific file system. 4# 5# Copyright (C) 2002 Aleph One Ltd. 6# 7# Created by Charles Manning <charles@aleph1.co.uk> 8# 9# This program is free software; you can redistribute it and/or modify 10# it under the terms of the GNU General Public License version 2 as 11# published by the Free Software Foundation. 12# 13# Patch YAFFS into the kernel 14# 15# args: kpath : Full path to kernel sources to be patched 16# 17# Somewhat "inspired by" the mtd patchin script 18# 19# $Id: patch-ker.sh,v 1.1 2005/07/31 09:04:13 marty Exp $ 20 21VERSION=0 22PATCHLEVEL=0 23SUBLEVEL=0 24LINUXDIR=$1 25 26# To be a Linux directory, it must have a Makefile 27 28 29# Display usage of this script 30usage () { 31 echo "usage: $0 kernelpath" 32 exit 1 33} 34 35 36 37if [ -z $LINUXDIR ] 38then 39 usage; 40fi 41 42# Check if kerneldir contains a Makefile 43if [ ! -f $LINUXDIR/Makefile ] 44then 45 echo "Directory $LINUXDIR does not exist or is not a kernel source directory"; 46 exit 1; 47fi 48 49# Get kernel version 50VERSION=`grep -s VERSION <$LINUXDIR/Makefile | head -n 1 | sed s/'VERSION = '//` 51PATCHLEVEL=`grep -s PATCHLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'PATCHLEVEL = '//` 52SUBLEVEL=`grep -s SUBLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'SUBLEVEL = '//` 53 54# Can we handle this version? 55if [ $VERSION -ne 2 -o $PATCHLEVEL -lt 6 ] 56then 57 echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x or higher" 58 exit 1; 59fi 60 61 62KCONFIG=$LINUXDIR/fs/Kconfig 63KCONFIGOLD=$LINUXDIR/fs/Kconfig.pre.yaffs 64YAFFS_PATCHED_STRING=`grep -s yaffs <$KCONFIG | head -n 1` 65 66MAKEFILE=$LINUXDIR/fs/Makefile 67MAKEFILEOLD=$LINUXDIR/fs/Makefile.pre.yaffs 68 69if [ ! -z "$YAFFS_PATCHED_STRING" ] 70then 71 YAFFS_PATCHED=0 72 echo "$KCONFIG already mentions YAFFS, so we will not change it" 73else 74 # Change the fs/Kconfig file 75 # Save the old Kconfig 76 # Copy all stuff up to JFFS 77 # Insert some YAFFS stuff 78 # Copy all the rest of the stuff 79 80 YAFFS_PATCHED=1 81 echo "Updating $KCONFIG" 82 mv -f $KCONFIG $KCONFIGOLD 83 sed -n -e "/JFFS/,99999 ! p" $KCONFIGOLD >$KCONFIG 84 echo "">>$KCONFIG 85 echo "# Patched by YAFFS" >>$KCONFIG 86 echo "source \"fs/yaffs2/Kconfig\"">>$KCONFIG 87 echo "">>$KCONFIG 88 sed -n -e "/JFFS/,99999 p" $KCONFIGOLD >>$KCONFIG 89 90 # now do fs/Makefile -- simply add the target at the end 91 echo "Updating $MAKEFILE" 92 cp -f $MAKEFILE $MAKEFILEOLD 93 echo "">>$MAKEFILE 94 echo "# Patched by YAFFS" >>$MAKEFILE 95 echo "obj-\$(CONFIG_YAFFS_FS) += yaffs2/" >>$MAKEFILE 96 97fi 98 99YAFFSDIR=$LINUXDIR/fs/yaffs2 100 101if [ -e $YAFFSDIR ] 102then 103 echo "$YAFFSDIR exists, not patching" 104else 105 mkdir $LINUXDIR/fs/yaffs2 106 cp Makefile.kernel $LINUXDIR/fs/yaffs2/Makefile 107 cp Kconfig $LINUXDIR/fs/yaffs2 108 cp *.c *.h $LINUXDIR/fs/yaffs2 109fi 110