yaffs Add first cut python browser for yaffs direct
[yaffs2.git] / patch-ker.sh
1 #!/bin/sh
2 #
3 # YAFFS: Yet another FFS. A NAND-flash specific file system.
4 #
5 # Copyright (C) 2002-2010 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:  l/c : link or copy
16 #         kpath  : Full path to kernel sources to be patched
17 #
18 #  Somewhat "inspired by" the mtd patchin script
19 #
20
21 VERSION=0
22 PATCHLEVEL=0
23 SUBLEVEL=0
24 COPYORLINK=$1
25 MULTIORSINGLE=$2
26 LINUXDIR=$3
27
28 # To be a Linux directory, it must have a Makefile
29
30
31 # Display usage of this script
32 usage () {
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"
36         exit 1
37 }
38
39
40
41 if [ -z $LINUXDIR ]
42 then
43     usage;
44 fi
45
46 if [ $COPYORLINK = l ]; then
47    CPY="ln -s"
48 elif [ $COPYORLINK = c ]; then
49    CPY="cp"
50 else
51    echo "unknown copy or link type"
52    usage;
53 fi
54
55 if [ $MULTIORSINGLE = m ]; then
56    VFSGLUE="yaffs_vfs_multi.c"
57 elif [ $MULTIORSINGLE = s ]; then
58    VFSGLUE="yaffs_vfs.c"
59 else
60    echo "unknown multi/single version selection"
61    usage;
62 fi
63
64
65 # Check if kerneldir contains a Makefile
66 if [ ! -f $LINUXDIR/Makefile ]
67 then
68         echo "Directory $LINUXDIR does not exist or is not a kernel source directory";
69         exit 1;
70 fi
71
72 # Get kernel version
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 = '//`
76
77 # Can we handle this version?
78 if [ $VERSION -ne 2  -o $PATCHLEVEL -lt 6  ]
79 then
80         echo "Cannot patch kernel version $VERSION.$PATCHLEVEL.$SUBLEVEL, must be 2.6.x or higher"
81         exit 1;
82 fi
83
84
85 KCONFIG=$LINUXDIR/fs/Kconfig
86 KCONFIGOLD=$LINUXDIR/fs/Kconfig.pre.yaffs
87 YAFFS_PATCHED_STRING=`grep -s yaffs <$KCONFIG | head -n 1`
88
89 MAKEFILE=$LINUXDIR/fs/Makefile
90 MAKEFILEOLD=$LINUXDIR/fs/Makefile.pre.yaffs
91
92 if [ ! -z "$YAFFS_PATCHED_STRING" ]
93 then
94     YAFFS_PATCHED=0
95     echo "$KCONFIG already mentions YAFFS, so we will not change it"
96 else
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
102
103     YAFFS_PATCHED=1
104     echo "Updating $KCONFIG"
105     mv -f $KCONFIG  $KCONFIGOLD
106     sed -n -e "/[Jj][Ff][Ff][Ss]/,99999 ! p" $KCONFIGOLD >$KCONFIG
107     echo "">>$KCONFIG
108     echo "# Patched by YAFFS" >>$KCONFIG
109     echo "source \"fs/yaffs2/Kconfig\"">>$KCONFIG
110     echo "">>$KCONFIG
111     sed -n -e "/[Jj][Ff][Ff][Ss]/,99999 p" $KCONFIGOLD >>$KCONFIG
112
113    # now do fs/Makefile -- simply add the target at the end
114     echo "Updating $MAKEFILE"
115     cp -f $MAKEFILE $MAKEFILEOLD
116     echo "">>$MAKEFILE
117     echo "# Patched by YAFFS" >>$MAKEFILE
118     echo "obj-\$(CONFIG_YAFFS_FS)               += yaffs2/" >>$MAKEFILE
119
120 fi
121
122 YAFFSDIR=$LINUXDIR/fs/yaffs2
123
124 if [ -e $YAFFSDIR ]
125 then
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\" "
129 else
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
136 fi