Sort out Linux kernel building with new driver model.
[yaffs2.git] / patch-ker.sh
index 4393e8d01b95cdbe65a4b6d4eb1acb7d330d5497..3da6925fd42163b92c6b26cf4e1a66b397e4accb 100755 (executable)
@@ -53,9 +53,24 @@ else
 fi
 
 if [ $MULTIORSINGLE = m ]; then
-   VFSGLUE="yaffs_vfs_multi.c"
+   VFS_CODE="yaffs_vfs_multi.c"
+   MTD_CODE="yaffs_mtdif_multi.c"
+   YPORTENV="yportenv_multi.h"
+   KCONFIG_SRC="Kconfig_multi"
 elif [ $MULTIORSINGLE = s ]; then
-   VFSGLUE="yaffs_vfs.c"
+   VFS_CODE="yaffs_vfs_single.c"
+   MTD_CODE="yaffs_mtdif_single.c"
+   YPORTENV="yportenv_single.h"
+   KCONFIG_SRC="Kconfig_single"
+
+   echo ""
+   echo "*** Warning ***"
+   echo "You have chosen to use the single kernel variant of the yaffs VFS glue code"
+   echo "that only works with the latest Linux kernel tree. If you are using an older"
+   echo "version of Linux then you probably wanted to use the multi-version variant by"
+   echo "re-running the patch-ker.sh script using m as a the second argument."
+   echo " ie $0 $COPYORLINK m $LINUXDIR"
+   echo ""
 else
    echo "unknown multi/single version selection"
    usage;
@@ -75,7 +90,7 @@ PATCHLEVEL=`grep -s PATCHLEVEL <$LINUXDIR/Makefile | head -n 1 | sed s/'PATCHLEV
 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  ]
+if [ $VERSION$PATCHLEVEL -lt 26  ]
 then
        echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x or higher"
        exit 1;
@@ -104,17 +119,17 @@ else
     echo "Updating $KCONFIG"
     mv -f $KCONFIG  $KCONFIGOLD
     sed -n -e "/[Jj][Ff][Ff][Ss]/,99999 ! p" $KCONFIGOLD >$KCONFIG
-    echo "">>$KCONFIG
-    echo "# Patched by YAFFS" >>$KCONFIG
+    echo "">>$KCONFIG
+    echo "# Patched by YAFFS" >>$KCONFIG
     echo "source \"fs/yaffs2/Kconfig\"">>$KCONFIG
-    echo "">>$KCONFIG
+    echo "">>$KCONFIG
     sed -n -e "/[Jj][Ff][Ff][Ss]/,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 "">>$MAKEFILE
+    echo "# Patched by YAFFS" >>$MAKEFILE
     echo "obj-\$(CONFIG_YAFFS_FS)              += yaffs2/" >>$MAKEFILE
 
 fi
@@ -123,14 +138,19 @@ YAFFSDIR=$LINUXDIR/fs/yaffs2
 
 if [ -e $YAFFSDIR ]
 then
-   echo "$YAFFSDIR exists, not patching."
-   echo "If you want to replace what is already there then delete $YAFFSDIR"
+   echo "$YAFFSDIR exists, so not patching. If you want to replace what is"
+   echo "already there then delete $YAFFSDIR and re-run this script"
    echo " eg.  \"rm -rf $YAFFSDIR\" "
 else
+   rm yaffs*.mod.c 2> /dev/null
    mkdir $LINUXDIR/fs/yaffs2
    $CPY  $PWD/Makefile.kernel $LINUXDIR/fs/yaffs2/Makefile
-   $CPY $PWD/Kconfig $LINUXDIR/fs/yaffs2
+   $CPY $PWD/$KCONFIG_SRC $LINUXDIR/fs/yaffs2/Kconfig
    $CPY $PWD/*.c $PWD/*.h  $LINUXDIR/fs/yaffs2
-   rm $LINUXDIR/fs/yaffs2/yaffs_vfs.c $LINUXDIR/fs/yaffs2/yaffs_vfs_multi.c
-   $CPY $PWD/$VFSGLUE $LINUXDIR/fs/yaffs2/yaffs_vfs_glue.c
+   rm $LINUXDIR/fs/yaffs2/yaffs_vfs*.c $LINUXDIR/fs/yaffs2/yaffs_mtdif*.c
+   rm $LINUXDIR/fs/yaffs2/yportenv*.h
+   rm $LINUXDIR/fs/yaffs2/moduleconfig.h
+   $CPY $PWD/$VFS_CODE $LINUXDIR/fs/yaffs2/yaffs_vfs.c
+   $CPY $PWD/$MTD_CODE $LINUXDIR/fs/yaffs2/yaffs_mtdif.c
+   $CPY $PWD/$YPORTENV $LINUXDIR/fs/yaffs2/yportenv.h
 fi