3 # YAFFS: Yet another FFS. A NAND-flash specific file system.
5 # Copyright (C) 2002-2010 Aleph One Ltd.
7 # Created by Charles Manning <charles@aleph1.co.uk>
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.
13 # Patch YAFFS into the kernel
15 # args: l/c : link or copy
16 # kpath : Full path to kernel sources to be patched
18 # Somewhat "inspired by" the mtd patchin script
28 # To be a Linux directory, it must have a Makefile
31 # Display usage of this script
33 echo "usage: $0 c/l m/s kernelpath"
34 echo " if c/l is c, then copy. If l then link"
35 echo " if m/s is m, then use multi version code. If s then use single version code"
46 if [ $COPYORLINK = l ]; then
48 elif [ $COPYORLINK = c ]; then
51 echo "unknown copy or link type"
55 if [ $MULTIORSINGLE = m ]; then
56 VFSGLUE="yaffs_vfs_multi.c"
57 elif [ $MULTIORSINGLE = s ]; then
60 echo "unknown multi/single version selection"
65 # Check if kerneldir contains a Makefile
66 if [ ! -f $LINUXDIR/Makefile ]
68 echo "Directory $LINUXDIR does not exist or is not a kernel source directory";
73 VERSION=`grep -s VERSION <$LINUXDIR/Makefile | head -n 1 | sed s/'VERSION = '//`
74 PATCHLEVEL=`grep -s PATCHLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'PATCHLEVEL = '//`
75 SUBLEVEL=`grep -s SUBLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'SUBLEVEL = '//`
77 # Can we handle this version?
78 if [ $VERSION -ne 2 -o $PATCHLEVEL -lt 6 ]
80 echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x or higher"
85 KCONFIG=$LINUXDIR/fs/Kconfig
86 KCONFIGOLD=$LINUXDIR/fs/Kconfig.pre.yaffs
87 YAFFS_PATCHED_STRING=`grep -s yaffs <$KCONFIG | head -n 1`
89 MAKEFILE=$LINUXDIR/fs/Makefile
90 MAKEFILEOLD=$LINUXDIR/fs/Makefile.pre.yaffs
92 if [ ! -z "$YAFFS_PATCHED_STRING" ]
95 echo "$KCONFIG already mentions YAFFS, so we will not change it"
97 # Change the fs/Kconfig file
98 # Save the old Kconfig
99 # Copy all stuff up to JFFS
100 # Insert some YAFFS stuff
101 # Copy all the rest of the stuff
104 echo "Updating $KCONFIG"
105 mv -f $KCONFIG $KCONFIGOLD
106 sed -n -e "/[Jj][Ff][Ff][Ss]/,99999 ! p" $KCONFIGOLD >$KCONFIG
108 echo "# Patched by YAFFS" >>$KCONFIG
109 echo "source \"fs/yaffs2/Kconfig\"">>$KCONFIG
111 sed -n -e "/[Jj][Ff][Ff][Ss]/,99999 p" $KCONFIGOLD >>$KCONFIG
113 # now do fs/Makefile -- simply add the target at the end
114 echo "Updating $MAKEFILE"
115 cp -f $MAKEFILE $MAKEFILEOLD
117 echo "# Patched by YAFFS" >>$MAKEFILE
118 echo "obj-\$(CONFIG_YAFFS_FS) += yaffs2/" >>$MAKEFILE
122 YAFFSDIR=$LINUXDIR/fs/yaffs2
126 echo "$YAFFSDIR exists, not patching."
127 echo "If you want to replace what is already there then delete $YAFFSDIR"
128 echo " eg. \"rm -rf $YAFFSDIR\" "
130 mkdir $LINUXDIR/fs/yaffs2
131 $CPY $PWD/Makefile.kernel $LINUXDIR/fs/yaffs2/Makefile
132 $CPY $PWD/Kconfig $LINUXDIR/fs/yaffs2
133 $CPY $PWD/*.c $PWD/*.h $LINUXDIR/fs/yaffs2
134 rm $LINUXDIR/fs/yaffs2/yaffs_vfs.c $LINUXDIR/fs/yaffs2/yaffs_vfs_multi.c
135 $CPY $PWD/$VFSGLUE $LINUXDIR/fs/yaffs2/yaffs_vfs_glue.c