]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/zaurus-updater/akita/updater.sh
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / zaurus-updater / akita / updater.sh
1 #!/bin/sh
2
3
4 DATAPATH=$1
5 TMPPATH=/tmp/update
6 TMPDATA=$TMPPATH/tmpdata.bin
7 TMPHEAD=$TMPPATH/tmphead.bin
8
9 WFLG_KERNEL=0
10 WFLG_INITRD=0
11 WFLG_MVERSION=0
12
13 RO_MTD_LINE=`cat /proc/mtd | grep "root" | tail -n 1`
14 if [ "$RO_MTD_LINE" = "" ]; then
15     RO_MTD_LINE=`cat /proc/mtd | grep "\<NAND\>.*\<2\>" | tail -n 1`
16 fi
17 RO_MTD_NO=`echo $RO_MTD_LINE | cut -d: -f1 | cut -dd -f2`
18 RO_MTD_SIZE_HEX=`echo $RO_MTD_LINE | cut -d" " -f2`
19 RO_MTD=/dev/mtd$RO_MTD_NO
20 RO_MTDBLK=/dev/mtdblock$RO_MTD_NO
21 RO_MTD_SIZE=`dc 0x$RO_MTD_SIZE_HEX 1024 /`
22
23 RW_MTD_LINE=`cat /proc/mtd | grep "home" | tail -n 1`
24 if [ "$RW_MTD_LINE" = "" ]; then
25     RW_MTD_LINE=`cat /proc/mtd | grep "\<NAND\>.*\<2\>" | tail -n 1`
26 fi
27 RW_MTD_NO=`echo $RW_MTD_LINE | cut -d: -f1 | cut -dd -f2`
28 RW_MTD_SIZE_HEX=`echo $RW_MTD_LINE | cut -d" " -f2`
29 RW_MTD=/dev/mtd$RW_MTD_NO
30 RW_MTDBLK=/dev/mtdblock$RW_MTD_NO
31 RW_MTD_SIZE=`dc 0x$RW_MTD_SIZE_HEX 1024 /`
32
33 LOGOCAL_MTD=/dev/mtd1
34
35 VERBLOCK=0x48000
36 MVRBLOCK=0x70000
37
38 RESULT=0
39
40 Cleanup(){
41         rm -f $VTMPNAME > /dev/null 2>&1
42         rm -f $MTMPNAME > /dev/null 2>&1
43         rm $CTRLPATH/* > /dev/null 2>&1
44         rm $DATAPATH/* > /dev/null 2>&1
45         exit $1
46 }
47 trap 'Cleanup 1' 1 15
48 trap '' 2 3
49
50
51 ### Check model ###
52 /sbin/writerominfo
53 MODEL=`cat /proc/deviceinfo/product`
54 echo 'MODEL:'$MODEL
55 case "$MODEL" in
56     SL-C700) ;;
57     SL-C750) ;;
58     SL-C760) ;;
59     SL-C860) ;;
60     SL-C1000) ;;
61     SL-B500) ;;
62     SL-5600) ;;
63     *)
64         echo 'ERROR:Invalid model!'
65         echo 'Please reset'
66         while true
67         do
68         done
69         ;;
70 esac
71
72 mkdir -p $TMPPATH > /dev/null 2>&1
73
74 cd $DATAPATH/
75
76 for TARGETFILE in zImage.bin zimage.bin ZIMAGE.BIN initrd.bin INITRD.BIN mversion.bin MVERSION.BIN
77 do
78         if [ -e $TARGETFILE ]
79         then
80                 rm -f $TMPPATH/*.bin > /dev/null 2>&1
81                 DATASIZE=`wc -c $TARGETFILE`
82                 DATASIZE=`echo $DATASIZE | cut -d' ' -f1`
83
84                 #echo $TARGETFILE':'$DATASIZE'bytes'
85                 TARGETTYPE=Invalid
86                 case "$TARGETFILE" in
87                 zImage.bin) TARGETTYPE=Kernel;;
88                 zimage.bin) TARGETTYPE=Kernel;;
89                 ZIMAGE.BIN) TARGETTYPE=Kernel;;
90                 initrd.bin) TARGETTYPE=RoFs;;
91                 INITRD.BIN) TARGETTYPE=RoFs;;
92                 mversion.bin) TARGETTYPE=MasterVer;;
93                 MVERSION.BIN) TARGETTYPE=MasterVer;;
94                 *)
95                         continue
96                         ;;
97                 esac
98
99                 case "$TARGETTYPE" in
100                 Kernel)
101                         if [ $WFLG_KERNEL != 0 ]
102                         then
103                                 continue
104                         fi
105                         WFLG_KERNEL=1
106                         echo 'kernel'
107                         ISLOGICAL=1
108                         MODULEID=5
109                         MODULESIZE=0x13C000
110                         ADDR=`dc 0xE0000`
111                         ISFORMATTED=1
112                         DATAPOS=0
113                         ONESIZE=524288
114                         HDTOP=`expr $DATASIZE - 16`
115                         /sbin/bcut -a $HDTOP -s 16 -o $TMPHEAD $TARGETFILE
116                         ;;
117                 RoFs)
118                         if [ $WFLG_INITRD != 0 ]
119                         then
120                                 continue
121                         fi
122                         WFLG_INITRD=1
123                         echo 'RO file system'
124                         ISLOGICAL=0
125                         MODULEID=6
126                         MODULESIZE=0x1900000
127                         ADDR=0
128                         ISFORMATTED=0
129                         TARGET_MTD=$RO_MTD
130                         DATAPOS=16
131                         ONESIZE=1048576
132                         /sbin/bcut -s 16 -o $TMPHEAD $TARGETFILE
133                         ;;
134                 MasterVer)
135                         if [ $WFLG_MVERSION != 0 ]
136                         then
137                                 continue
138                         fi
139                         WFLG_MVERSION=1
140                         echo 'Master version'
141                         MTMPNAME=$TMPPATH'/mtmp'`date '+%s'`'.tmp'
142                         /sbin/nandlogical $LOGOCAL_MTD READ $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
143                         /sbin/verchg -m $MTMPNAME $TARGETFILE 0 0 > /dev/null 2>&1
144                         /sbin/nandlogical $LOGOCAL_MTD WRITE $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
145                         rm -f $MTMPNAME > /dev/null 2>&1
146                         echo 'Success!'
147                         continue
148                         ;;
149                 *)
150                         continue
151                         ;;
152                 esac
153
154
155                 #format?
156                 if [ $ISFORMATTED = 0 ]
157                 then
158                         echo -n 'Flash erasing...'
159                         /sbin/eraseall $TARGET_MTD 2> /dev/null > /dev/null
160                         #/sbin/eraseall $TARGET_MTD 2
161                         echo 'done'
162                         ISFORMATTED=1
163                 fi
164
165                 echo ''
166                 echo '0%                   100%'
167                 PROGSTEP=`expr $DATASIZE / $ONESIZE + 1`
168                 PROGSTEP=`expr 25 / $PROGSTEP`
169                 if [ $PROGSTEP = 0 ]
170                 then
171                         PROGSTEP=1
172                 fi
173
174                 #00 means header information
175                 VTMPNAME=$TMPPATH'/vtmp'`date '+%s'`'.tmp'
176                 MTMPNAME=$TMPPATH'/mtmp'`date '+%s'`'.tmp'
177                 /sbin/nandlogical $LOGOCAL_MTD READ $VERBLOCK 0x4000 $VTMPNAME > /dev/null 2>&1
178                 /sbin/nandlogical $LOGOCAL_MTD READ $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
179
180                 #echo 'found header'
181                 /sbin/verchg -v $VTMPNAME $TMPHEAD $MODULEID $MODULESIZE > /dev/null 2>&1
182                 /sbin/verchg -m $MTMPNAME $TMPHEAD $MODULEID $MODULESIZE > /dev/null 2>&1
183
184                 if [ "$MODEL" = "SL-C1000" ] && [ $TARGETTYPE = Kernel ]; then 
185                     echo $TARGETFILE':'$DATASIZE'bytes'
186                     echo '                ' > /tmp/data
187                     /sbin/nandlogical $LOGOCAL_MTD WRITE 0x60100 16 /tmp/data > /dev/null 2>&1
188                     /sbin/nandlogical $LOGOCAL_MTD WRITE 0xe0000 $DATASIZE $TARGETFILE > /dev/null 2>&1
189                     /sbin/nandlogical $LOGOCAL_MTD WRITE 0x21bff0 16 /tmp/data > /dev/null 2>&1
190                 #loop
191                 else
192                 while [ $DATAPOS -lt $DATASIZE ]
193                 do
194                         #data create
195                         bcut -a $DATAPOS -s $ONESIZE -o $TMPDATA $TARGETFILE
196                         TMPSIZE=`wc -c $TMPDATA`
197                         TMPSIZE=`echo $TMPSIZE | cut -d' ' -f1`
198                         DATAPOS=`expr $DATAPOS + $TMPSIZE`
199
200                         #handle data file
201                         #echo 'ADDR='$ADDR
202                         #echo 'SIZE='$TMPSIZE
203                         #echo 'TMPDATA='$TMPDATA
204                         if [ $ISLOGICAL = 0 ]
205                         then
206                                 next_addr=`/sbin/nandcp -a $ADDR $TMPDATA $TARGET_MTD  2>/dev/null | fgrep "mtd address" | cut -d- -f2 | cut -d\( -f1`
207                                 if [ "$next_addr" = "" ]; then
208                                         echo "ERROR:flash write"
209                                         rm $TMPDATA > /dev/null 2>&1
210                                         RESULT=3
211                                         break;
212                                 fi
213                                 ADDR=$next_addr
214                         else
215                                 /sbin/nandlogical $LOGOCAL_MTD WRITE $ADDR $DATASIZE $TMPDATA > /dev/null 2>&1
216                                 ADDR=`expr $ADDR + $TMPSIZE`
217                         fi
218
219                         rm $TMPDATA > /dev/null 2>&1
220
221                         #progress
222                         SPNUM=0
223                         while [ $SPNUM -lt $PROGSTEP ]
224                         do
225                                 echo -n '.'
226                                 SPNUM=`expr $SPNUM + 1`
227                         done
228                 done
229
230                 fi
231
232                 echo ''
233
234 #finish
235                 rm -f $TMPPATH/*.bin > /dev/null 2>&1
236
237                 if [ $RESULT = 0 ]
238                 then
239                         /sbin/nandlogical $LOGOCAL_MTD WRITE $VERBLOCK 0x4000 $VTMPNAME > /dev/null 2>&1
240                         /sbin/nandlogical $LOGOCAL_MTD WRITE $MVRBLOCK 0x4000 $MTMPNAME > /dev/null 2>&1
241
242                         rm -f $VTMPNAME > /dev/null 2>&1
243                         rm -f $MTMPNAME > /dev/null 2>&1
244                         echo 'Success!'
245                 else
246                         echo 'Error!'
247                         exit $RESULT
248                 fi
249         fi
250 done
251
252 exit 0