140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#!/bin/sh
240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#
340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# YAFFS: Yet another FFS. A NAND-flash specific file system.
440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#
540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# Copyright (C) 2002 Aleph One Ltd.
640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# 
740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# Created by Charles Manning <charles@aleph1.co.uk>
840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# 
940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# This program is free software; you can redistribute it and/or modify
1040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# it under the terms of the GNU General Public License version 2 as
1140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# published by the Free Software Foundation.
1240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#
1340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# Patch YAFFS into the kernel
1440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#
1540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#  args:  kpath  : Full path to kernel sources to be patched
1640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#
1740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#  Somewhat "inspired by" the mtd patchin script
1840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#
1940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project#  $Id: patch-ker.sh,v 1.1 2005/07/31 09:04:13 marty Exp $
2040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
2140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectVERSION=0
2240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectPATCHLEVEL=0
2340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectSUBLEVEL=0
2440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectLINUXDIR=$1
2540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
2640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# To be a Linux directory, it must have a Makefile
2740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
2840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
2940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# Display usage of this script
3040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectusage () {
3140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	echo "usage:  $0  kernelpath"
3240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	exit 1
3340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project}
3440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
3540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
3640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
3740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectif [ -z $LINUXDIR ]
3840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectthen
3940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    usage;
4040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectfi
4140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
4240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# Check if kerneldir contains a Makefile
4340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectif [ ! -f $LINUXDIR/Makefile ] 
4440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectthen 
4540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	echo "Directory $LINUXDIR does not exist or is not a kernel source directory";
4640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	exit 1;
4740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectfi
4840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
4940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# Get kernel version
5040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectVERSION=`grep -s VERSION <$LINUXDIR/Makefile | head -n 1 | sed s/'VERSION = '//`
5140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectPATCHLEVEL=`grep -s PATCHLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'PATCHLEVEL = '//`
5240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectSUBLEVEL=`grep -s SUBLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'SUBLEVEL = '//`
5340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
5440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project# Can we handle this version?
5540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectif [ $VERSION -ne 2  -o $PATCHLEVEL -lt 6  ]
5640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectthen 
5740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x or higher"
5840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project	exit 1;
5940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectfi
6040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
6140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
6240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectKCONFIG=$LINUXDIR/fs/Kconfig
6340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectKCONFIGOLD=$LINUXDIR/fs/Kconfig.pre.yaffs
6440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectYAFFS_PATCHED_STRING=`grep -s yaffs <$KCONFIG | head -n 1`
6540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
6640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectMAKEFILE=$LINUXDIR/fs/Makefile
6740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectMAKEFILEOLD=$LINUXDIR/fs/Makefile.pre.yaffs
6840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
6940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectif [ ! -z "$YAFFS_PATCHED_STRING" ]
7040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectthen
7140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    YAFFS_PATCHED=0
7240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "$KCONFIG already mentions YAFFS, so we will not change it"
7340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectelse
7440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   # Change the fs/Kconfig file
7540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   # Save the old Kconfig
7640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   # Copy all stuff up to JFFS
7740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   # Insert some YAFFS stuff
7840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   # Copy all the rest of the stuff
7940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
8040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    YAFFS_PATCHED=1
8140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "Updating $KCONFIG"
8240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    mv -f $KCONFIG  $KCONFIGOLD
8340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    sed -n -e "/JFFS/,99999 ! p" $KCONFIGOLD >$KCONFIG
8440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "">>$KCONFIG
8540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "# Patched by YAFFS" >>$KCONFIG
8640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "source \"fs/yaffs2/Kconfig\"">>$KCONFIG
8740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "">>$KCONFIG
8840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    sed -n -e "/JFFS/,99999 p" $KCONFIGOLD >>$KCONFIG
8940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
9040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   # now do fs/Makefile -- simply add the target at the end
9140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "Updating $MAKEFILE"
9240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    cp -f $MAKEFILE $MAKEFILEOLD
9340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "">>$MAKEFILE
9440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "# Patched by YAFFS" >>$MAKEFILE
9540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project    echo "obj-\$(CONFIG_YAFFS_FS)		+= yaffs2/" >>$MAKEFILE
9640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
9740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectfi
9840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
9940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source ProjectYAFFSDIR=$LINUXDIR/fs/yaffs2
10040c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project
10140c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectif [ -e $YAFFSDIR ]
10240c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectthen
10340c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   echo "$YAFFSDIR exists, not patching"
10440c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectelse
10540c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   mkdir $LINUXDIR/fs/yaffs2
10640c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   cp Makefile.kernel $LINUXDIR/fs/yaffs2/Makefile
10740c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   cp Kconfig $LINUXDIR/fs/yaffs2
10840c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Project   cp *.c *.h  $LINUXDIR/fs/yaffs2
10940c4004d07a37a9b140067f893930ce4436b9346The Android Open Source Projectfi
110