138 lines
2.8 KiB
Bash
Executable File
138 lines
2.8 KiB
Bash
Executable File
#!/system/bin/sh
|
|
|
|
SETPROP=/system/bin/setprop
|
|
GETPROP=/system/bin/getprop
|
|
BUSYBOX=/system/bin/busybox
|
|
CFGPATH="/data/media/0/iso.cfg"
|
|
ECHO="/system/bin/log -t ISOSH"
|
|
|
|
|
|
#define defalut loop device
|
|
loopdevice="/dev/block/loop7"
|
|
|
|
#check /mnt/iso
|
|
checkdevicebusy() {
|
|
local number=`lsof|grep /mnt/iso | $BUSYBOX wc -l`
|
|
$ECHO "checkdevicebusy(): $number"
|
|
return $number
|
|
}
|
|
|
|
#get free loop device for iso
|
|
getfreeloop() {
|
|
$ECHO "getfreeloop in***********"
|
|
local loop=0
|
|
while [ $loop -le 7 ]
|
|
do
|
|
local device="/dev/block/loop$loop"
|
|
local status=`$BUSYBOX losetup $device`
|
|
$ECHO "getfreeloop $device : $status"
|
|
if [ "$status" = "" ] ; then
|
|
$ECHO "getfreeloop origin:$loopdevice<---target:$device"
|
|
loopdevice=$device
|
|
return
|
|
fi
|
|
loop=$(( $loop + 1 ))
|
|
done
|
|
}
|
|
|
|
releaseLoop() {
|
|
local devicename=`$GETPROP "sys.video.loop" ""`
|
|
local status=`$BUSYBOX losetup $devicename`
|
|
if [ "$status" != "" ] ; then
|
|
$ECHO "releaseLoop $devicename"
|
|
Unmount $devicename
|
|
fi
|
|
}
|
|
|
|
getFreeLoopDevice() {
|
|
local devicename=`$BUSYBOX losetup -f`
|
|
$ECHO "getFreeLoopDevice: $devicename"
|
|
local loop=0
|
|
while [ $loop -le 7 ]
|
|
do
|
|
local device="/dev/loop$loop"
|
|
if [ "$devicename" = "$device" ] ; then
|
|
loopdevice="/dev/block/loop$loop"
|
|
$ECHO "getFreeLoopDevice: $loopdevice"
|
|
return
|
|
fi
|
|
loop=$(( $loop + 1 ))
|
|
done
|
|
}
|
|
|
|
Mount() {
|
|
$ECHO "Mount"
|
|
$ECHO "Mount(): loop:$1"
|
|
$ECHO "Mount(): path:$2"
|
|
|
|
$BUSYBOX losetup $1 "$2"
|
|
if [ "$?" != 0 ] ; then
|
|
$ECHO "$BUSYBOX losetup $1 $2 fail, result = $?"
|
|
return
|
|
fi
|
|
$BUSYBOX mount -t udf $1 /mnt/iso
|
|
if [ "$?" != 0 ] ; then
|
|
$ECHO "$BUSYBOX mount -t udf $1 /mnt/iso fail, result = $?"
|
|
return
|
|
fi
|
|
|
|
$SETPROP "sys.video.loop" "$loopdevice"
|
|
exit 0
|
|
}
|
|
|
|
Unmount() {
|
|
local devicename=`$GETPROP sys.video.loop`
|
|
$ECHO "unmount:$devicename"
|
|
$BUSYBOX losetup -d $devicename
|
|
if [ "$?" != 0 ] ; then
|
|
$ECHO "$BUSYBOX losetup -d $devicename fail, result $?"
|
|
return
|
|
fi
|
|
$SETPROP "sys.video.loop" ""
|
|
usleep 100
|
|
$BUSYBOX umount -l /mnt/iso
|
|
if [ "$?" != 0 ] ; then
|
|
$ECHO "$BUSYBOX umount -l /mnt/iso fail, result $?"
|
|
return
|
|
fi
|
|
}
|
|
|
|
ReadCfg() {
|
|
$ECHO "ReadCfg"
|
|
$ECHO "ReadCfg CFG PATH: $CFGPATH"
|
|
while read LINE;
|
|
do
|
|
$ECHO "LINE: $LINE"
|
|
local prefix=`echo $LINE|cut -d ':' -f 1`
|
|
local tmp=`echo $LINE|cut -d ':' -f 2`
|
|
$ECHO "prefix: $prefix"
|
|
$ECHO "tmp: $tmp"
|
|
if [ $prefix == "method" ]; then
|
|
METHOD=$tmp
|
|
$ECHO "METHOD: $tmp"
|
|
elif [ $prefix == "path" ]; then
|
|
PATH=$tmp
|
|
$ECHO "PATH: $PATH"
|
|
fi
|
|
done < $CFGPATH
|
|
if [ "$?" != 0 ] ; then
|
|
$ECHO "ReadCfg fail , result $?"
|
|
return
|
|
fi
|
|
}
|
|
|
|
ReadCfg
|
|
$ECHO "METHOD111 : $METHOD"
|
|
if [ $METHOD == "mount" ]; then
|
|
checkdevicebusy
|
|
releaseLoop
|
|
getfreeloop
|
|
$ECHO "PATH111 : $PATH"
|
|
Mount $loopdevice "$PATH"
|
|
elif [ $METHOD == "unmount" ]; then
|
|
$ECHO "unmount"
|
|
Unmount
|
|
elif [ $METHOD == "reset" ]; then
|
|
$BUSYBOX pkill mediaserver
|
|
fi
|