111 lines · 2.6 KB · Text
RawDownload
#!/bin/rcrfork n fn fatal{	echo >[1=2] $*	exit fatal} fn verbose{	if(~ $#flagv 1)		echo >[1=2] $*} bind -b '#F' /dev	|| fatal cant bind flash devicecd /dev/flash	|| fatal cant cd to /dev/flash erasesz=`{awk 'NR==2 {sub(/0x0+/, "", $3); print $3}' < flashctl}totsz=4m	# 4mb; adjust to tasteplan9ini=`{pxeof $sysname}kernel=`{ndb/query sys $sysname bootf} flagfmt='v,I,W,K,i plan9ini,k kernel,e erasesz,t totsz'args=''if(! ifs=() eval `{aux/getflags $*}){	aux/usage	exit usage} erasesz	=`{aux/number -f %x $erasesz}	|| exits numtotsz	=`{aux/number -f %x $totsz}	|| exits numblsz=$erasesz eraseblocks=`{echo '	16i 10o	' $erasesz ' sa	' $totsz ' sb 	lb la 1 - + la / 2+	sn 0si 	[100000 la li *+p li 1 + si li ln >y]sy	lyx	' | dc}kblk=`{echo $#eraseblocks 2 - p | dc} if(! test -f $plan9ini>[2=]){	echo >[1=2] plan9.ini $plan9ini not found	exit check}if(! test -f $kernel>[2=]){	echo >[1=2] kernel $kernel not found	exit check}if(~ $#eraseblocks 0 || ~ $"eraseblocks *unimplemented* || test $#eraseblocks -gt 64){	echo >[1=2] wierd number of pages to clear $#pages	exit check} if(~ $#flagW^$#flagI^$#flagK 000 111){	flagW=1; flagI=1; flagK=1}if not{	e=()	if(~ $#flagW 1)		e = ($e $eraseblocks(1)	if(~ $#flagI 1)		e = ($e $eraseblocks(2)	if(~ $#flagK 1)		e = ($e $eraseblocks(3-)} echo erasing $#eraseblocks `{echo 16i $erasesz 400 / p | dc}^k blocksverbose eraseblocks $eraseblocks for(i in $eraseblocks){	verbose erase 0x$i	if(! echo erase 0x$i > flashctl){		echo kwflashprep: erase block 0x$i		exit erase	}} fn kfill {	cat $kernel /dev/zero | dd -quiet 1 -conv sync -bs 8192}fn α {	echo 16 i 10 o $1 $erasesz $2 '*' + p | dc}x=`{echo $kblk sk 16i $erasesz 2000 / lk '*' p|dc} ~ $#flagW 1	&& {auth/wrkey || exit wrkey}~ $#flagI 1	&& {dd -of flash -oseek  9 -count 1	-if $plan9ini	-bs 0x$erasesz -conv sync	|| exit ddini}~ $#flagK 1	&& {dd -of flash -oseek 10 -count $x	-if <{kfill}	-obs 0x$erasesz -ibs 8192	|| exit ddkern}  # double check for ecc errorsdd -if flash -iseek 8 -count $#eraseblocks -bs 0x$erasesz >/dev/null || exit ecc errors echo setenv bootcmd \	''''nand read 0x1000 0x`{α 100000 1} '0x200;' \	nand read 0x800000 0x`{α 100000 2} '0x300000;' go 0x800000'''' {echo add nvram		0x`{α 100000 0} 0x`{α 100000 1}echo add plan9.ini	0x`{α 100000 1} 0x`{α 100000 2}echo add kernel		0x`{α 100000 2} 0x`{echo 16i 10o $totsz $erasesz 2 '*' - 100000 + p|dc}}>flashctl # nvram 	0x00100000 0x00120000 0x00020000 0x00000800# plan9.ini 	0x00120000 0x00140000 0x00020000 0x00000800# kernel 	0x00140000 0x004c0000 0x00020000 0x00000800