Android 4.1.1 Jelly Bean v 1.3.5 Ultimate !

  • 252 Antworten
  • Letztes Antwortdatum
@tekilakos:

Ich meine ja noch immer das es NICHT daran liegt das wir vorher Jelly Bean v1.1.0 / v1.2.0 druff hatten - dann müssten ALLE das Problem haben und nicht nur einzelne.

Nach etwas Nachdenken (das konstante "imaginäre SD Karte" von Dir) ... kann es sein das es an der vold.fstab liegt?

Die /system/etc/vold.fstab sieht/sah im Stock ROM so aus:

Code:
## Vold 2.0 Generic fstab
## - San Mehat (san@android.com)
## 

#######################
## Regular device mount
##
## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...> 
## label        - Label for the volume
## mount_point  - Where the volume will be mounted
## part         - Partition # (1 based), or 'auto' for first usable partition.
## <sysfs_path> - List of sysfs paths to source devices
######################

#wmt sd
dev_mount sdcard /mnt/sdcard auto /devices/platform/sdmmc.0
#dev_mount sdcard /mnt/sdcard auto /devices/platform/sdmmc1.0
#dev_mount sdcard /mnt/sdcard auto /devices/platform/sdmmc2.0

#wmt usb
dev_mount udisk            /mnt/udisk auto /devices/pci0000:00/0000:00
dev_mount udisk_boot_udisk /mnt/udisk auto /devices/pci0000:00/0000:00:04.0/usb1/1-1
dev_mount udisk_boot_udisk /mnt/udisk auto /devices/pci0000:00/0000:00:04.0/usb1/1-2
dev_mount udisk_boot_udisk /mnt/udisk auto /devices/pci0000:00/0000:00:04.0/usb1/1-3

#wmt localdisk
dev_mount localdisk            /mnt/internal auto /devices/virtual/mtd/mtd13/mtdblock13
dev_mount udisk_boot_localdisk /mnt/local auto /devices/pci0000:00/0000:00:04.0/usb1/1-4

Anmerkung: Ich habe die auskommentierten Zeilen der Beispiele, unterhalb der wiedergegebenen Blöcke, weg genommen damit es besser zu lesen und Vergleichen ist.

Die /system/etc/vold.fstab im Jelly Bean v1.3.5 sieht so aus:
Code:
## Vold 2.0 Generic fstab
## - San Mehat (san@android.com)
## 

#######################
## Regular device mount
##
## Format: dev_mount <label> <mount_point> <part> <sysfs_path1...> 
## label        - Label for the volume
## mount_point  - Where the volume will be mounted
## part         - Partition # (1 based), or 'auto' for first usable partition.
## <sysfs_path> - List of sysfs paths to source devices
######################

#wmt sd
dev_mount sdcard /mnt/sdcard auto /devices/platform/sdmmc.0
#dev_mount sdcard /mnt/sdcard auto /devices/platform/sdmmc1.0
#dev_mount sdcard /mnt/sdcard auto /devices/platform/sdmmc2.0

#wmt usb
dev_mount udisk            /mnt/udisk auto /devices/pci0000:00/0000:00
dev_mount udisk_boot_udisk /mnt/udisk auto /devices/pci0000:00/0000:00:04.0/usb1/1-1
dev_mount udisk_boot_udisk /mnt/udisk auto /devices/pci0000:00/0000:00:04.0/usb1/1-2
dev_mount udisk_boot_udisk /mnt/udisk auto /devices/pci0000:00/0000:00:04.0/usb1/1-3

#wmt localdisk
#dev_mount localdisk            /mnt/internal auto /devices/virtual/mtd/mtd13/mtdblock13
#dev_mount udisk_boot_localdisk /mnt/local auto /devices/pci0000:00/0000:00:04.0/usb1/1-4

Siehst Du was ich sehe?

Genau, die beiden Zeilen unter "#wmt localdisk" sind AUSKOMMENTIERT, im Stock ROM aber vorhanden für das lustige /mnt/internal und /mnt/local

Nimm mal die beiden "#" vor den Zeilen weg damit der Block so aussieht:

Code:
#wmt localdisk
dev_mount localdisk            /mnt/internal auto /devices/virtual/mtd/mtd13/mtdblock13
dev_mount udisk_boot_localdisk /mnt/local auto /devices/pci0000:00/0000:00:04.0/usb1/1-4

Um es "funktioniert's mit Flashen dann problemlos" zu Testen müsstest Du, oder svenu, das android4.1.tar umändern und eine vold.fstab einsetzen wo die beiden Zeilen nicht kommentiert sind, oder die Datei über das Installer-Konstrukt nach /system/etc unterjubeln.

P.S.: Das ist jetzt nicht eine MaPan "Eigenheit" ... das ist/war auch im Eken android4.1.tgz genau so.

Jetzt kannste ja mal testen ob das Dein spezielles Problem mit der "imaginären SD" löst oder eher nicht.

EDIT: Auch wenn es noch immer nicht "Einsinkt" für was das wirklich gut sein soll, jetzt verstehe ich zumindest den "Konstrukt".

Das /mnt/local mounted den "mtdblock13" über das "uboot_boot_localdisk" (da muss es einen uboot Parameter für geben da es über diesen "pseudo Namen" referenziert wird). Das /mnt/internal bindet sich dann den mtdblock13 über das virtuelle Device an den zuvor gemounteten block. Der Sinn dahinter will mir absolut nicht Verständlich werden, zumal es von "oben" gesehen absolut keinen Sinn ergibt; das könnte Sinn ergeben wenn wir den ROM Source sehen würden ("von unten" gesehen) - den es aber nicht gibt, und der Kernel Source offeriert da leider auch keine "Erklärung" was der tiefere Sinn sein könnte.

Legen wir's also mal für's erste unter "Zen und die Art der unmöglichen Mounts" ab bis wir evtl. mehr durch experimentieren rausgefunden haben.

EDIT2: Gerade vergessen ... ich hab noch was rausgefunden ...

Vergleich der dmesg logs von Dir gegen meines zeigt EINEN Unterschied auf: Wir haben unterschiedliche NAND Chips. Du hast einen Hynix NAND Chip, bei mir steckt ein Samsung NAND Chip drinnen. Das einzig direkt vergleichbare ist das unabhängig vom Hersteller des NAND die Qualität irgendwo bei 3. Wahl+ liegen dürfte ... bei Dir meldet der Treiber für den NAND 2 defekte Speicherzellen, bei mir sind's 4.

Ansonsten sind die von den div. Treibern gemeldeten Chip Revisionen gleich - wenn Du einen Unterschied in der Hardware zugrunde legen willst, dann ist das gerade auf den Hersteller des NAND zusammengeschrumpft.
 
Zuletzt bearbeitet:
das mit der vold.fstab im Stock ROM es sieht auch bei allen Eken W10 ICS 4.0 gleich

und ab der JB4.1.1 v110 war ja die erste Eken JB soft
ist es in der vold.fstab auskommentiert habe mal alle die ich im pc habe angeschaut
vold.fstab Stock ROM = Eken ICS4.0.x alle Versionen
vold.fstab auskommentiert = Eken JB4.1.1 alle versionen
 
Das ist absicht b.jay im fspatch ordner wird deutlich warum

"#no single partition for Local, it is only a folder named "media" in Data partition
mkdir -p ${instenv_fs_localdisk}
info 0 " Create some special folders"
mkdir -p ${instenv_fs_localdisk}/Data
mkdir -p ${instenv_fs_localdisk}/Music
mkdir -p ${instenv_fs_localdisk}/Pictures
mkdir -p ${instenv_fs_localdisk}/Video

if [ -d $local_path/localdisk ]; then
info 1 " Copying localdisk folder.."
/bin/cp -aR $local_path/localdisk/. ${instenv_fs_localdisk}
fi

chmod 775 -R ${instenv_fs_localdisk}
chown 1023:1023 -R ${instenv_fs_localdisk}
chown 0:0 ${instenv_fs_localdisk}/testcdc
chmod 744 ${instenv_fs_localdisk}/testcdc


würde sagen wenn man das tap mit 4.11 anschliest sieht man auch nur den
inhalt der virtuelle "localdisk" sprich mit Pc kommste nicht meher ins

"upper" verzeichnis damit da kein Blödsinn wenn jemand seine
musik draufschaufelt. lösch mal /.restore/ brauch ich eh nicht

ausserdem wird localdisk der gesamtspeicher abzüglich des systems

dann angezeigt das sind localdisk 2,89 GB die über bleiben.

wobei der boot beim flashen ja nix mit dem system was dann läuft zu tun hat.

Code:
# bspinst_api.sh
#
# Linux BSP installer drawing API for WonderMedia ARM SoC.
#
# Written by Vincent Chen <vincentchen@wondermedia.com.tw>
#
# Copyright 2008-2009 WonderMedia Corporation. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
#    this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright notice,
#    this list of conditions and the following disclaimer in the documentation
#    and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY WONDERMEDIA CORPORATION ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL WONDERMEDIA CORPORATION OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
# THE POSSIBILITY OF SUCH DAMAGE.


install_critical_error=0

# wmt_fdisk - fdisk TF/UDisk
# @patition_cfg in shell script
# @dev_name of TF/UDisk
wmt_fdisk ()
{
    local partition_cmd=$1
    local dev_name=$2

    local t=5
    while [ $t -gt 0 ]; do
        if [ -e $dev_name ]; then
            break;
        else
            info 0 "[WMT] waiting for root device($dev_name) ..."
            if [ $t -eq 1 ]; then
                info 1 "Error: Root device($dev_name) not found, upgrading stopped!"
                return 1
            else
                sleep 1
                let "t = t - 1"
            fi
        fi
    done
    
    info 1 "Fdisk root device($dev_name) ..."
    killall udevd
    sleep 5

    if [ $instenv_bootdev == "TF" ]; then
        #Jody: does it need 'p' here?
        umount ${dev_name}p*
        ${partition_cmd} | fdisk $dev_name

        #Jody: if system don't create dev-nod for new MMC partition, we do it
        #mknod "${dev_name}p1" b 179 1
        #mknod "${dev_name}p2" b 179 2
        #mknod "${dev_name}p3" b 179 3
        #mknod "${dev_name}p5" b 179 5
        #mknod "${dev_name}p6" b 179 6
        #mknod "${dev_name}p7" b 179 7
    elif [ $instenv_bootdev == "UDISK" ]; then
        umount ${dev_name}*
        ${partition_cmd} | fdisk $dev_name
    fi
    
    return 0
}

unmount_all ()
{
    cd /
    sync
    if [ $instenv_bootdev != "NAND" ]; then
        /bin/umount $MOUNT_BOOT
    fi
    
    /bin/umount $instenv_fs_data    2>/dev/null
    /bin/umount $instenv_fs_system    2>/dev/null

    cd $instenv_top_dir     #restore our current dir.
}

# Quiet - do command in silence
# @command
Quiet ()
{
    $@ 2>/dev/null >/dev/null
#    $@

    return $?
}



# get_mtd - get mtd device by name
# @name
get_mtd ()
{
    desc=`echo $1 | sed 's/\ /\\\ /g'`
    cat /proc/mtd | grep "\"$desc\"" | cut -d: -f1 | sed 's/mtd/\/dev\/mtd/g'
}

# get_mtdblock - get mtdblock device by name
# @name
get_mtdblock ()
{
    get_mtd "$1" | sed 's/mtd/mtdblock/g'
}

# get_mtd_len - get mtd length by name
# @name
get_mtd_len ()
{
    tmp=`cat /proc/mtd |grep "\"$1\""| cut -d\  -f 2`
    len=`printf "0x%x" 0x$tmp`

    echo $len
}

# sf_inst - copy from a file onto SPI flash
# @name
# @file
#
# The default search path is the current folder
# if $src_dir is invalid.
sf_inst ()
{
    local name=$1
    local file=$2
    local mtd=

    mtd=`get_mtd "$name"`

    if [ -z "$mtd" ]; then
        info 1 "Error: No MTD partition called $name."
        return 1
    fi

    if [ -e "$file" ]; then
        printf "Update %s to %s ... " $file $mtd
        Quiet flash_erase $mtd 0 0
        if [ -e /usr/sbin/flashcp ]; then
            Quiet flashcp $file $mtd
        else
            cat $file > $mtd
        fi
        printf "done\n"
    else
        info 1 "Error: not found $file, skip update $name."
    fi
}

# nand_erase: erase nand partition
# @discription of nand partition
# 
nand_erase ()
{
    local name=$1
    local mtd=

    mtd=`get_mtd "$name"`

    if [ -z "$mtd" ]; then
        info 1 "No MTD partition called $name."
        return 1
    fi

    if [ ! -e "$mtd" ]; then
        return 2
    fi
    
    info 0 "flash eraseall $mtd ... "
    Quiet flash_erase $mtd 0 0
    info 0 "flash eraseall done, ret $?"
    return 0
}

# nand_inst - copy from a file onto Nand flash
# @name
# @file
#
# The default search path is the current folder
# if $src_dir is invalid.
nand_inst ()
{
    local name=$1
    local file=$2
    local mtd=`get_mtd "$name"`

    if [ -z "$mtd" ]; then
        info 1 "Error: No MTD partition called $name."
        return 1
    fi

    if [ ! -e "$file" ]; then
        return 2
    fi

    printf "Update %s to %s ... " $file $mtd
    nand_erase $name
    nandwrite -p $mtd $file
    printf "done\n"
    
    return 0
}



get_mtd_offset ()
{
    mtdlist=`cat /proc/wmt_mtd|cut -d\  -f2,3|tr \  @|sed 's/"//g'`

    flg_error="error"
    offset=$flg_error
    for i in $mtdlist; do
        mtd=`echo $i|cut -d@ -f2`
        if [ "$mtd" == "$1" ]; then
            offset=`echo $i|cut -d@ -f1`
            break;
        fi
    done
    
    if [ "$offset" == $flg_error ]; then
        echo "[WMT] *E* Failed to get offset of $1"
    else
        echo "0x$offset"
    fi
}


# get_mtd_num
# 
# get the mtd number by mtdblock's name
#
get_mtd_num()
{
    mtd_block=`get_mtdblock "$1"`
    mtd_num=`echo ${mtd_block##*mtdblock}`
    echo $mtd_num
}

# generate a random MAC address
# random_mac
#
# Usage:
#     random_mac
random_mac ()
{
    local name=ethaddr
    local random=`head -200 /dev/urandom | cksum | cut -f1 -d" "`

    local a1=`echo $random | cut -c1-2`
    local a2=`echo $random | cut -c3-4`
    local a3=`echo $random | cut -c5-6`
    
    setenv $name 00:40:63:$a1:$a2:$a3
    info 1 "Random Mac address : 00:40:63:$a1:$a2:$a3"
}

# restore_env
# @@ uboot environment variable name
# Restore some uboot environment variables
# Usage:
#     restore_env foo bar
restore_env()
{
    for name in $@; do 

        local value=`wmtenv get $name`
        local ret=`echo $value | grep failed`
    
        if [ "$value" = "" ] || [ -n "$ret" ]; then
            info 0 "restore $name not found."
        else 
            info 0  "restore_env: $name=$value"
            setenv $name $value
        fi
    done
}

# do_setenv
# @uboot_env    U-boot script in plain text format
# @mtd        MTD device used by U-Boot env.
# @flag        active flag
#
# Save uboot environment variables from u-boot plain text script
#
# Usage:
#     do_setenv /mnt/mmcblk0p1/env/uboot_env_sf /dev/mtd3 1
do_setenv ()
{
    local infile=$1
    local mtd=$2
    local flag=$3

    local crc32=installer/bin/crc32
    local outfile=/tmp/uboot_env.raw
    local tmpfile=/tmp/uboot_env.tmp

    dd if=/dev/zero of=${outfile} bs=1k count=64

    dos2unix -u ${infile}

    cat ${infile} | \
    tr '\n' '~' | sed 's/\\~//g' | tr '~' '\n' | \
    sed 's/\ \+/ /g' | \
    grep setenv | sed 's/setenv //' | sed 's/ /=/' | \
    sed 's/\\;/;/g' | tr "\n" "\0" > ${tmpfile}

    dd if=${tmpfile} of=${outfile} bs=1 seek=5 count=65531 conv=notrunc

    $crc32 -s 5 -x 1 ${outfile}
    $crc32 -s 5 -r ${outfile} > ${tmpfile}
    printf "\x${flag}" >> ${tmpfile}
    dd if=${tmpfile} of=${outfile} bs=1 seek=0 count=5 conv=notrunc

    flash_erase $mtd 0 0
    cat ${outfile} > $mtd

    #mv ${tmpfile} ${tmpfile}.${flag}
    #cp ${outfile} ${outfile}.${flag}
    rm ${tmpfile} ${outfile}
}



#
# Add additional uboot environment variables
#
# Usage:
#     env_addon outfile
env_addon()
{         
    info 0 "Adding additionl uboot env..."

    local value=`wmtenv get wmt.ethaddr.persist`
    
    if [ "$value" = "1" ]; then
        restore_env wmt.ethaddr.persist ethaddr
        info 1 "Don't change mac address"
    else 
        info 0 "No mac address customization"
        random_mac
    fi
    restore_env serialnum androidboot.serialno pcba.serialno
    restore_env wmt.btaddr.persist btaddr
}

#
# set uboot environment variables from u-boot plain text script
inst_env ()
{
    info 1 "Installing U-Boot env. cfg. to SF."

    #clean it to remove duplicated items
    wmtclean /tmp/setenv.out > /tmp/setenv.clean

    #DEBUG
    Quiet cp /tmp/setenv.out debug/setenv.out
    Quiet cp /tmp/setenv.clean debug/setenv.clean
    
    mtd_name="u-boot env. cfg. 1-SF"
    mtd=`get_mtd "${mtd_name}"`

    if [ ! -z "${mtd}" ]; then
        do_setenv /tmp/setenv.clean ${mtd} 1
    else
        info 1 "No MTD partition called ${mtd_name}."
        install_critical_error=1
        return 1
    fi

    mtd_name="u-boot env. cfg. 2-SF"
    mtd=`get_mtd "${mtd_name}"`

    if [ ! -z "${mtd}" ]; then
        do_setenv /tmp/setenv.clean ${mtd} 0
    else
        info 0 "No MTD partition called ${mtd_name}."
    fi
}


#
# PLEASE DON'T MODIFY FUNCTIONS ABOVE THIS LINE.
# THOSE FUNCTIONS ARE THE HEART OF BSPINST2.
#
inst_wload()
{
    local wload_name=$instenv_wload

    local mtd_wload=`get_mtd "w-load-SF"`
        
    if [ -z "$instenv_wload" ]; then
        local wload_updateid=`strings ${mtd_wload}  | grep "UPDATEID_"` 
        info 0 "Select w-load according to $wload_updateid ..."
        if [ -z "$wload_updateid" ]; then
            info 0 "[WMT] old w-load in board, need to update, use default w-load."
            wload_name=firmware/w-load.bin
        else
            if [ "$wload_updateid" == "UPDATEID_DDR3_800M_800M_32bit_4_512MB" ]; then
                wload_name="*_DDR3_5_3_2_4_512MB"
            elif [ "$wload_updateid" == "UPDATEID_DDR3_800M_800M_16bit_2_256MB" ]; then
                wload_name="*_DDR3_5_3_1_2_256MB"
            else
                wload_name=`echo $wload_updateid | sed 's/UPDATEID/*/g'`
            fi
    
            info 0 wload_wild_name=$wload_name    
            wload_name=`find firmware -name ${wload_name}.bin`
            info 1 "Auto probe wload_name=$wload_name"
        fi
    fi

    if [ -z "$wload_name" ]; then
        info 1 "Error: No wload file defined. Abort!"
        install_critical_error=1
        return 1
    fi

    if [ ! -f "$wload_name" ]; then
        info 1 "Error: can not find wload: $wload_name. Abort!"
        install_critical_error=1
        return 1
    fi

 
    local buildno_board=`strings ${mtd_wload} | grep "BUILDID_"` 
    local buildno_file=`strings ${wload_name} | grep "BUILDID_"` 

    if [ -z "$buildno_file" ]; then
        info 1 "Error: wload:$wload_name invalid, Abort!"
        install_critical_error=1
        return 1
    fi
    
    info 0 "wload BUILDID board: $buildno_board"
    info 0 "wload BUILDID file : $buildno_file"

    cat ${mtd_wload} > /tmp/board.wload
    local wsize=`stat -c%s $wload_name`

    dd if=/tmp/board.wload of=/tmp/board.wload2 bs=$wsize count=1

    if diff --brief /tmp/board.wload2 $wload_name; then
        info 1 "Skipped same $wload_name."
    else
        info 1 "Installing $wload_name..."
        sf_inst "w-load-SF" "$wload_name"
    fi

    Quiet cp /tmp/board.wload debug/board.wload
    Quiet cp /tmp/board.wload2 debug/board.wload2
    rm /tmp/board.wload /tmp/board.wload2
    return 0
}

inst_uboot()
{
    if [ ! -f "$instenv_uboot" ]; then
        info 1 "Uboot:$instenv_uboot not found, Abort!"
        install_critical_error=1
        return 1
    else
        info 0 "Uboot = $instenv_uboot"
    fi
    
    local uboot_buildno_file=`strings $instenv_uboot  | grep "BUILDID_"` 
    if [ -z "$uboot_buildno_file" ] ; then
        info 1 "Error: $instenv_uboot is invalida, Abort!"
        install_critical_error=1
        return 1
    fi

    local mtd_uboot=`get_mtd "u-boot-SF"`
    local uboot_buildno_board=`strings ${mtd_uboot}  | grep "BUILDID_"` 

    info 0 "uboot BUILDID board: $uboot_buildno_board"
    info 0 "uboot BUILDID file : $uboot_buildno_file"

    if [ "$uboot_buildno_file" \> "$uboot_buildno_board" ]; then
        info 1 "Installing $instenv_uboot..."
        sf_inst "u-boot-SF" "$instenv_uboot"
    else
        info 1 "Skipped same u-boot file."
    fi
}


update_logo()
{
    info 1 "Installing u-boot logo to NAND..."
    
    local name="${BLK_NAND_LOGO}"
    local logo_dir="$instenv_logo_path"
    local mtd=
    
    mtd=`get_mtd "$name"`

    if [ -z "$mtd" ]; then
        info 1 "No MTD partition called $name."
        install_critical_error=1
        return 1
    fi

    if [ ! -e "$mtd" ]; then
        info 1 "No MTD partition called $mtd."
        install_critical_error=1
        return 2
    fi

    info 1 "Erasing LOGO partition(Nand)..."
    nand_erase $name
    
    if [ -f $instenv_uboot_logo/u-boot-logo.data ]; then
        nandwrite -p $mtd $instenv_uboot_logo/u-boot-logo.data
        info 0 "update $instenv_uboot_logo/u-boot-logo.data ret $?"
    else
        info 0 "Skip $instenv_uboot_logo/u-boot-logo.data"
    fi

    if [ -f $instenv_uboot_logo/charge_anim.data ]; then
        #use customize logo first
        nandwrite -p -s $UBOOT_CHARGE_LOG_OFFSET  $mtd $instenv_uboot_logo/charge_anim.data
        info 0 "update $instenv_uboot_logo/charge_anim.data ret $?"
    elif [ -f $logo_dir/charge_anim.data ]; then
        #no customize logo, use default logo
        nandwrite -p -s $UBOOT_CHARGE_LOG_OFFSET  $mtd $logo_dir/charge_anim.data
        info 0 "update $logo_dir/charge_anim.data ret $?"
    else
        info 0 "Skip $logo_dir/charge_anim.data"
    fi
        
    return 0
}

check_ramdisk ()
{
    local org_path="firmware"
    local new_path="/tmp"
    local ramdisk_path="/tmp/new_ramdisk"
    local ret_path=
    
    if [ $instenv_bootdev == "TF" ] || [ "$instenv_ddrsize" == "1024MB" ]; then
        rm -rf $ramdisk_path
        mkdir -p $ramdisk_path
        cp firmware/ramdisk.img $new_path/ramdisk.gz 
        gunzip $new_path/ramdisk.gz 
        cd $ramdisk_path
        cpio -idm <$new_path/ramdisk 
        if [ $instenv_bootdev == "TF" ]; then
            #modify device of partiton for TF
            sed -i 's/mount yaffs2 mtd@system \/system ro remount/mount ext4 \/dev\/block\/mmcblk1p2 \/system ro remount/g' init.rc
            sed -i 's/mount yaffs2 mtd@system \/system/wait \/dev\/block\/mmcblk1p2\n wait \/dev\/block\/mmcblk1p5\n wait \/dev\/block\/mmcblk1p6\n mount ext4 \/dev\/block\/mmcblk1p2 \/system/g' init.rc
            sed -i 's/mount yaffs2 mtd@data \/data nosuid nodev/mount ext4 \/dev\/block\/mmcblk1p5 \/data/g' init.rc
            sed -i 's/mount yaffs2 mtd@cache \/cache nosuid nodev/mount ext4 \/dev\/block\/mmcblk1p6 \/cache/g' init.rc
        fi
        if [ "$instenv_ddrsize" == "1024MB" ]; then
            #modify ump_memory_size from 96MB to 128MB for 1GB DDR
            sed -i 's/ump_memory_size=100663296/ump_memory_size=134217728/g' init.rc
        fi
        #make new ramdisk after modification
        rm $new_path/ramdisk
        find . | cpio -o -H newc | gzip > $new_path/ramdisk.gz
        cd $new_path
        mv ramdisk.gz ramdisk.img
        
        cp $instenv_top_dir/firmware/ramdisk-recovery.img $new_path/
        #modify recovery.fstab in ramdisk-recovery for TF
        if [ $instenv_bootdev == "TF" ]; then
            rm -rf $ramdisk_path
            mkdir -p $ramdisk_path
            mv $new_path/ramdisk-recovery.img $new_path/ramdisk-recovery.gz 
            gunzip $new_path/ramdisk-recovery.gz 
            cd $ramdisk_path
            cpio -idm <$new_path/ramdisk-recovery 
            sed -i 's/yaffs2       system/ext4       \/dev\/block\/mmcblk1p2/g' etc/recovery.fstab
            sed -i 's/yaffs2       data/ext4       \/dev\/block\/mmcblk1p5/g' etc/recovery.fstab
            sed -i 's/yaffs2       cache/ext4       \/dev\/block\/mmcblk1p6/g' etc/recovery.fstab
            sed -i 's/mtd          misc/emmc       \/dev\/block\/mmcblk1p7/g' etc/recovery.fstab
            
            #make new ramdisk-recovery after modification
            rm $new_path/ramdisk-recovery
            find . | cpio -o -H newc | gzip > $new_path/ramdisk-recovery.gz
            cd $new_path
            mv ramdisk-recovery.gz ramdisk-recovery.img
        fi
        rm -rf $ramdisk_path
        
        cd $instenv_top_dir

        ret_path=$new_path
    else
        ret_path=$org_path
    fi

    echo "$ret_path"
}

get_ramdisk_path ()
{
    local ret_path="firmware/$1.img"
    
    if [ $instenv_bootdev == "TF" ] || [ "$instenv_ddrsize" == "1024MB" ]; then        
        
        local boot_dev=
        if [ $instenv_bootdev == "TF" ] ; then
              boot_dev="TF"
        fi
        
        local ram_size=
        if [ "$instenv_ddrsize" == "1024MB" ] ; then
              ram_size="1024M"        
        fi
        
        if [ ! -f firmware/$1-$boot_dev$ram_size.img ]; then
            info 1 "Error: no firmware/$1-$boot_dev$ram_size.img found, your may need to run prepare_android_rootfs.sh again"
            install_critical_error=1
            return 1
        fi
        ret_path="firmware/$1-$boot_dev$ram_size.img"       
    fi

    echo "$ret_path"
}

get_recovery_path()
{
    local ret_path="firmware/$1.img"
    
    if [ $instenv_bootdev == "TF" ] ; then        
                        
        if [ ! -f firmware/$1-$instenv_bootdev.img ]; then
            info 1 "Error: no firmware/$1-$instenv_bootdev.img found, your may need to run prepare_android_rootfs.sh again"
            install_critical_error=1
            return 1                        
        fi
        ret_path="firmware/$1-$instenv_bootdev.img"       
    fi

    echo "$ret_path"
}

inst_logo_bootimg()
{
    if [ ! -f "$instenv_kernel" ]; then
        info 1 "Error: can not find kernel: $instenv_kernel. Abort!"
        install_critical_error=1
        return 1
    fi

    #check if need to modify ramdisk.img/ramdisk-recovery.img
    #local ramdisk_path=`check_ramdisk`
    local ramdisk_path=`get_ramdisk_path "ramdisk"`
    info 0 "ramdisk_path = $ramdisk_path, kernel = $instenv_kernel"
    #mkbootimg --kernel $instenv_kernel --ramdisk $ramdisk_path/ramdisk.img -o /tmp/boot.img
    mkbootimg --kernel $instenv_kernel --ramdisk $ramdisk_path -o /tmp/boot.img
    if [ $? -ne 0 ] ; then
        info 1  "Error: failed to make boot.img! Abort!"
        install_critical_error=1
        return 1
    fi
    local recovery_path=`get_recovery_path "ramdisk-recovery"`
    #mkbootimg --kernel $instenv_kernel --ramdisk $ramdisk_path/ramdisk-recovery.img -o /tmp/recovery.img
    mkbootimg --kernel $instenv_kernel --ramdisk $recovery_path -o /tmp/recovery.img
    if [ $? -ne 0 ] ; then
        info 1  "Error: failed to make recovery.img! Abort!"
        install_critical_error=1
        return 1
    fi

    if [ $instenv_bootdev == "NAND" ]; then
        local mtd=`get_mtd "${BLK_NAND_LOGO}"`
        if [ "$mtd" == "" ] ; then
            info 1 "Error: Cannot find ${BLK_NAND_LOGO} partition in NAND, Abort!"
            install_critical_error=1
            return 1
        fi

        #disable garbage collection of yaffs2, or it will be too slow for ESLC(only for Hynix nand)
        sync
        echo 0 >  /sys/module/yaffs/parameters/yaffs_bg_enable
        info 1 "Installing boot.img to NAND..."
        nand_inst "${BLK_NAND_BOOT}" /tmp/boot.img
        setenv boot-img-len `ls /tmp/boot.img -al | sed 's/ \+/ /g' | cut -d' ' -f5`
        inc_ratio 5

        info 1 "Installing recovery.img to NAND..."
        nand_inst "${BLK_NAND_RECOV}" /tmp/recovery.img
        setenv recov-img-len `ls /tmp/recovery.img -al | sed 's/ \+/ /g' | cut -d' ' -f5`        
        inc_ratio 5

        update_logo
        #enable garbage collection of yaffs2
        echo 1 >  /sys/module/yaffs/parameters/yaffs_bg_enable
    elif [ $instenv_bootdev == "TF" ] || [ $instenv_bootdev == "UDISK" ]; then
        local mtd_kernel=
        if [ $instenv_bootdev == "TF" ]; then
            info 1 "Prepare kernel partition(TF)..."
            mtd_kernel=/dev/mmcblk1p1
        elif [ $instenv_bootdev == "UDISK" ]; then
            info 1 "Prepare kernel partition(UDISK)..."
            mtd_kernel=/dev/sda1
        fi

        umount ${mtd_kernel}
        mkdosfs ${mtd_kernel}
        if [ $? -ne 0 ] ; then
            info 1  "Error: failed to format kernel partition! Abort!"
            install_critical_error=1
            return 1
        fi

        /bin/mkdir -p $MOUNT_BOOT
        mount ${mtd_kernel} $MOUNT_BOOT
        if [ $? -ne 0 ] ; then
            info 1 "Error: failed to mount kernel partition. Abort!"
            install_critical_error=1
            return 1
        fi
        info 1 "Installing boot.img/recovery.img/logo ..."
        /bin/cp -af /tmp/boot.img $MOUNT_BOOT
        /bin/cp -af /tmp/recovery.img $MOUNT_BOOT
        /bin/cp -af $instenv_uboot_logo/u-boot-logo.data $MOUNT_BOOT
        if [ -f $instenv_uboot_logo/charge_anim.data ]; then
            #use customize logo first
            /bin/cp -af $instenv_uboot_logo/charge_anim.data $MOUNT_BOOT            
        else
            #use default logo
            /bin/cp -af $instenv_logo_path/charge_anim.data $MOUNT_BOOT            
        fi

    else
        info 1 "Error: unknown root device:$instenv_bootdev! Abort!"
        install_critical_error=1
        return 1
    fi

    #cp logo data to system/.restore folder for OTA package's tool
    mkdir -p ${instenv_fs_system}/.restore
    Quiet cp $instenv_uboot_logo/u-boot-logo.data  ${instenv_fs_system}/.restore/  
    if [ -f $instenv_uboot_logo/charge_anim.data ]; then
        #use customize logo first
        Quiet cp $instenv_uboot_logo/charge_anim.data ${instenv_fs_system}/.restore/
    else
        #use default logo
        Quiet cp $instenv_logo_path/charge_anim.data ${instenv_fs_system}/.restore/
    fi
}


format_disk()
{
    if [ $instenv_bootdev == "TF" ]; then
        if [ -e "installer/bin/partition.sh" ]; then
            wmt_fdisk "installer/bin/partition.sh" "/dev/mmcblk1"
        else
            info 1 "Partition file not found, upgrading stopped!"
            return 1
        fi
    elif [ $instenv_bootdev == "UDISK" ]; then
        if [ -e "installer/bin/partition.sh" ]; then
            wmt_fdisk "installer/bin/partition.sh" "/dev/sda"
        else
            info 1 "Partition file not found, upgrading stopped!"
            return 1
        fi
    fi
    
    return $?
}


inst_systemdata()
{
    local mnt_system=$instenv_fs_system
    local mnt_data=$instenv_fs_data

    local mtd_system=
    local mtd_data=
    local mtd_cache=

    local prev_ratio=$CompleteRatio
    local _ratio=
    local ret=

    #mount /android/data , /android/system
    if [ $instenv_bootdev == "NAND" ]; then
        mtd_system=`get_mtdblock "${BLK_NAND_SYS}"`
        mtd_data=`get_mtdblock "${BLK_NAND_ANDROIDDATA}"`

        info 1 "Erasing System partition(Nand)..."
        umount ${mtd_system} 2>/dev/null
        nand_erase ${BLK_NAND_SYS}
        if [ $? -ne 0 ] ; then
            info 1 "Error: Failed to format FileSystem partition(NAND)..."
            install_critical_error=1
            return 1
        fi
        
        info 1 "Erasing Data partition(Nand)..."
        umount ${mtd_data} 2>/dev/null
        nand_erase "${BLK_NAND_ANDROIDDATA}"

        info 1 "Erasing Cache/misc partition(Nand)..."
        nand_erase "${BLK_NAND_MISC}"
        nand_erase "${BLK_NAND_ANDROIDCACHE}"
        
        mount -t yaffs2 -o rw $mtd_system $mnt_system
        mount -t yaffs2 -o rw $mtd_data $mnt_data
    elif [ $instenv_bootdev == "TF" ] || [ $instenv_bootdev == "UDISK" ]; then
        format_disk
        if [ $? -ne 0 ] ; then
            info 1 "Error: in format_disk($instenv_bootdev)"
            install_critical_error=1
            return 1
        fi
        if [ $instenv_bootdev == "TF" ]; then
            mtd_system=/dev/mmcblk1p2
            mtd_data=/dev/mmcblk1p7
            mtd_cache=/dev/mmcblk1p5
        elif [ $instenv_bootdev == "UDISK" ]; then
            mtd_system=/dev/sda2
            mtd_data=/dev/sda7
            mtd_cache=/dev/sda5
        fi

        info 1 "Erasing System partition..."
        umount ${mtd_system}
        mke2fs -T ext4 ${mtd_system}

        info 1 "Erasing Data partition..."
        umount ${mtd_data}
        mke2fs -T ext4 ${mtd_data}
        if [ $? -ne 0 ] ; then
            info 1 "Error: Failed to format FileSystem partition!"
            install_critical_error=1
            return 1
        fi

        info 1 "Erasing Cache partition..."
        umount ${mtd_cache}
        mke2fs -T ext4 ${mtd_cache}
        
        mount -t ext4 ${mtd_system} ${mnt_system}
        mount -t ext4 ${mtd_data} ${mnt_data}
    else
        info 1 "Error: Unknown root device!"
        install_critical_error=1
        return 1
    fi
    
    if [ $? -ne 0 ] ; then
        info 1 "Error: system/data partition init error!"
        install_critical_error=1
        return 1
    fi

    export is_data_mounted=`mount | grep \/data`
    export is_sys_mounted=`mount | grep \/system`

    #install all *.tgz in firmware folder
    info 1 "Installing tgz packages..."
    pkgtotal=`ls -1 firmware/*.tgz | wc -l`
    pkgcount=0
    for f in `ls -1 firmware/*.tgz` ; do
        let 'pkgcount = pkgcount + 1'
        _ratio=`expr $prev_ratio + \( 45 - $prev_ratio \) \* $pkgcount / $pkgtotal`
        ratio $_ratio
        info 1 "    $f"
        info 0 "Install $f ($pkgcount / $pkgtotal)"
        tar zxf $f -C ${instenv_fs_root} >/dev/null
    done

    #install all *.tar in firmware folder
    info 1 "Installing tar packages..."
    pkgtotal=`ls -1 firmware/*.tar | wc -l`
    pkgcount=0
    for f in `ls -1 firmware/*.tar` ; do
        let 'pkgcount = pkgcount + 1'
        _ratio=`expr $prev_ratio + \( 45 - $prev_ratio \) \* $pkgcount / $pkgtotal`
        ratio $_ratio
        info 1 "    $f"
        info 0 "Install $f ($pkgcount / $pkgtotal)"
        tar xf $f -C ${instenv_fs_root} >/dev/null
    done
    
    
    # set all ko files as rw-r-r permission
    find ${instenv_fs_system}/modules -type f | xargs chmod 644

    #make backup dir for factory restore, all pre-install data/app will be backup in this folder
    mkdir -p ${instenv_fs_system}/.restore/data_app
    mkdir -p ${instenv_fs_data}/app

    #backup .fwc and modules.xml
    cp -v config/+*.fwc ${instenv_fs_system}/wmtapp/
    cp -v config/modules.xml ${instenv_fs_system}/wmtapp/
    
    sync
    
    return 0
}

# this function only format and mount localdisk
# demo file will be copied by hook in fs_patch
inst_localdisk()
{
    #no single partition for Local, it is only a folder named ""in Data partition
    return 0
}


#
# change special case after some installation steps are done.
# wload is updated so we can know ddr_size
# and uboot-env is not installed so we can setenv.
#
process_special()
{
   if [ $instenv_bootdev == "NAND" ]; then
        setenv boot-NAND_mtd `get_mtdblock ${BLK_NAND_BOOT}`
        setenv boot-NAND_ofs `get_mtd_offset ${BLK_NAND_BOOT}`
        setenv boot-NAND_len `get_mtd_len ${BLK_NAND_BOOT}`
    
        setenv recov-NAND_mtd `get_mtdblock ${BLK_NAND_RECOV}`
        setenv recov-NAND_ofs `get_mtd_offset ${BLK_NAND_RECOV}`
        setenv recov-NAND_len `get_mtd_len ${BLK_NAND_RECOV}`
    
        setenv misc-NAND_mtd `get_mtdblock ${BLK_NAND_MISC}`
        setenv misc-NAND_ofs `get_mtd_offset ${BLK_NAND_MISC}`
        setenv misc-NAND_len `get_mtd_len ${BLK_NAND_MISC}`
    
        setenv filesystem-NAND_mtd `get_mtdblock ${BLK_NAND_SYS}`
        setenv filesystem-NAND_ofs `get_mtd_offset ${BLK_NAND_SYS}`
        setenv filesystem-NAND_len `get_mtd_len ${BLK_NAND_SYS}`
    
        local uboot_logo_ofs=`get_mtd_offset ${BLK_NAND_LOGO}`
        local temp2=$(( $uboot_logo_ofs + $UBOOT_CHARGE_LOG_OFFSET )) 
        local uboot_logo_charge_anim_ofs=`printf "0x%x" $temp2`
    
        setenv wmt.nfc.mtd.u-boot-logo `printf "0x%x" $uboot_logo_ofs`
        setenv wmt.nfc.mtd.u-boot-chganim `printf "0x%x" $uboot_logo_charge_anim_ofs`
        #setenv ubi-mtd-num `get_mtd_num ${BLK_NAND_LOCALDISK}`
    elif [ $instenv_bootdev == "TF" ]; then
        info 0 "Aready modified uboot env of logocmd/ota_normal/ota_recovery for TF in modules.xml"
        setenv misc-TF_part 1:6
    elif [ $instenv_bootdev == "UDISK" ]; then
        info 0 "Aready modified uboot env of logocmd/ota_normal/ota_recovery for UDISK in modules.xml"
    else
        info 1 "Error: unkown root device:$instenv_bootdev"
    fi

    setenv wmt.boot.dev $instenv_bootdev


    ##determine mem-size
    local mtd_wload=`get_mtd "w-load-SF"`
    local wload_updateid=`strings ${mtd_wload}  | grep "UPDATEID_"` 
    local ddr_size=`echo ${wload_updateid} | cut -d_ -f7`
    instenv_ddrsize=$ddr_size
    info 0 "[WMT] wload_updateid: $wload_updateid, ddr_size = $ddr_size"
    if [ "$ddr_size" == "512MB" ]; then
        info 0 "[WMT] set memtotal for 512DDR."
        setenv memtotal 447M
    elif [ "$ddr_size" == "256MB" ]; then
        info 0 "[WMT] set memtotal for 256DDR."
        setenv memtotal 196M
    elif [ "$ddr_size" == "1024MB" ]; then
        info 0 "[WMT] set memtotal/mbsize for 1024DDR."
        setenv memtotal 828M
        setenv mbsize 76M
    else
        info 1 "Error: can not determine ddrsize($ddr_size), Abort!"
        install_critical_error=1
        return 1
    fi

    if [ -n "$special_memtotal" ]; then
        info 1 "[WMT] set special memtotal for $instenv_model_no."
        setenv memtotal $special_memtotal
    fi

    if [ -n "$special_mbsize" ]; then
        info 1 "[WMT] set special mbsize for $instenv_model_no."
        setenv memtotal $special_mbsize
    fi
    
    return 0
}


export_instenv()
{
    printf "\n\n=======export below instenv_ values to script=======\n"
    for i in $@; do
        export $i
        echo `export | grep $i=`
    done
}


#
# find the activated fwc file, set the basename to $instenv_model_no
# also get the $instenv_bootdev
#
find_activated_fwc()
{
    instenv_model_no=""
    local fwc=""
    for i in `ls -1 config/+*.fwc`; do
        if [ "$fwc" == "" ]; then
            fwc=$i
        else
            info 1 "Error: more than one .fwc marked as activated. Abort!"
            install_critical_error=1
            return 1
        fi
    done

    if [ "$fwc" == "" ]; then
        info 1 "Error: no .fwc marked as activated. Abort!"
        install_critical_error=1
        return 1
    else
        #remove prefix "config/+" and stufix ".fwc"
        local len=${#fwc} 
        let len=$len-12
        instenv_model_no="${fwc:8:$len}"

        #search search like <BOOTDEV name="TF" />  or <BOOTDEV name="NAND" />
        local temp
        temp=`grep "<BOOTDEV" $fwc`
        if [ $? -ne 0 ]; then
            instenv_bootdev="NAND"
        else
            instenv_bootdev=`echo $temp | cut  -d\" -f2`
        fi


        if [ $instenv_bootdev == "TF" ]; then
            :
        elif [ $instenv_bootdev == "NAND" ]; then
            :
        else
            install_critical_error=1
            info 1 "Error: unknown boot device: $instenv_bootdev. Abort!"
            return 1
        fi
                    
        return 0
    fi
}


process_fwc()
{
    local fwc_file=$1
    
    # parse fwc file and generate a sh script file then run it.
    if ! xml2sh config/modules.xml $fwc_file > /tmp/fwc.sh; then
        info 1 "File $fwc_file can not be parsed. Abort!"
        install_critical_error=1
        return 1
    fi

    chmod +x /tmp/fwc.sh
    #DEBUG
    Quiet cp /tmp/fwc.sh debug/fwc.sh

    export setprop_file=/tmp/setprop.out      #used by setprop 
    export setenv_file=/tmp/setenv.out        #used by setenv 
    rm -f /tmp/setprop.out /tmp/setenv.out

    #export below env for /tmp/fwc.sh script
    export_instenv instenv_xres instenv_yres \
        instenv_fs_root instenv_fs_system instenv_fs_data instenv_fs_localdisk  \
        instenv_model_no

    printf "\n\n=======Execute fwc script file start...=======\n\n"
    . /tmp/fwc.sh
    printf "\n=======Execute fwc script file done,ret $?=======\n"

    setenv wmt.model.no $instenv_model_no
    
    cd $instenv_top_dir #cd to instenv_top_dir again to prevent /tmp/fwc.sh changed cur dir.

    #update prop file
    printf "\n\n####### below is from $instenv_fs_system/default.prop #######\n" > /tmp/setprop.tmp
    cat $instenv_fs_system/default.prop >> /tmp/setprop.tmp
    #append version info
    printf "\n\n####### from firmware/VERSION #######\n" >> /tmp/setprop.tmp
    cat firmware/VERSION >> /tmp/setprop.tmp
    if [ -f /tmp/setprop.out ]; then
        printf "\n\n####### below is from fwc.sh file #######\n" >> /tmp/setprop.tmp
        cat /tmp/setprop.out >> /tmp/setprop.tmp
    fi
    mv /tmp/setprop.tmp /tmp/setprop.out    # now /tmp/setprop.out contains all setprop result

    #update env file
    printf "\n\n####### below is from config/uboot_env #######\n" >> /tmp/setenv.tmp
    cat config/uboot_env >> /tmp/setenv.tmp
    printf "\n\n####### below is from fwc.sh file #######\n" >> /tmp/setenv.tmp
    cat /tmp/setenv.out >> /tmp/setenv.tmp
    mv /tmp/setenv.tmp /tmp/setenv.out      # now /tmp/setenv.out contains all setenv result

    
    printf "\n\n####### below is from env_addon #######\n" >> /tmp/setenv.out
    env_addon

    inc_ratio 5

    sync
    ### run wmtinst_??_* script to get more setenv/setprop command
    ### or even copy more files to device file system. we don't konw exactly.

    printf "\n\n####### below is from wmtinst_hook script files #######\n" >> /tmp/setenv.out
    printf "\n\n####### below is from wmtinst_hook script files #######\n" >> /tmp/setprop.out
    source $instenv_top_dir/installer/bin/bspinst_addons.sh
    inc_ratio 5

    #clean setprop result and replace /system/default.prop
    info 0 "clean /tmp/setprop.out to /tmp/cleanprop"

    wmtclean /tmp/setprop.out > /tmp/default.prop

    #DEBUG
    Quiet cp /tmp/setprop.out  debug/setprop.out
    Quiet cp /tmp/default.prop debug/setprop.clean

    cp /tmp/default.prop $instenv_fs_system/default.prop
    chmod g-w,o-w $instenv_fs_system/default.prop
    chmod g-w,o-w $instenv_fs_system/build.prop
    sync

    return 0
}


#
# $1: module name, for example "wload"
# $2: inc progress, for example 5
# if $install_modules contains $1, exec inst_$1 command, for example inst_wload
try_install()
{
    local module=$1             # 
    local progress=$2
    local run_cmd=inst_$1       # run "inst_wload" command

    if [ $install_critical_error -eq 1 ];then
        return 1
    fi

    for i in $install_modules; do
        if [ "$i" == "$module" ]; then
            inc_ratio $progress
            $run_cmd
            return $?
        fi
    done
    info 1 "Skipped $module installation."
    inc_ratio $progress
    return 0
}

# install_end
install_end ()
{
    if [ $install_critical_error -eq 1 ];then
        return 1
    fi

    #remove customer key information
    /bin/rm -rf ${instenv_fs_system}/.restore/wmtpref

    local sys_inst_end="${instenv_fs_system}/.restore/sys_partition_end.sh"
    if [  -f $sys_inst_end ]; then
        chmod +x ${sys_inst_end}
        ${sys_inst_end} ${instenv_fs_system} ${instenv_fs_data}
    fi

    inc_ratio 1
    return 0
}

#
# do_install
#
do_install ()
{
    local fwc_file

    if ! find_activated_fwc; then
        return 1
    fi
    
    info 1 "Model:$instenv_model_no,BootDev:$instenv_bootdev"

    mkdir -p $instenv_fs_system
    mkdir -p $instenv_fs_data
    mkdir -p $instenv_fs_localdisk
 
    # run inst_systemdata function if $install_modules contains "systemdata", 
    try_install "systemdata" 0

    if [ $install_critical_error -eq 1 ];then
        return 1
    fi
    fwc_file="config/+"$instenv_model_no".fwc"
    process_fwc "$fwc_file"
    
    try_install "wload" 5
    try_install "uboot" 5

    if [ $install_critical_error -eq 1 ];then
        return 1
    else
        process_special
    fi
    #Must do this after process_special
    try_install "logo_bootimg" 5
    #Must install uboot-env at last
    try_install "env"   5
    ratio 90

    #do some misc task at installer end
    install_end

    sync
    return 0
}


Das ist der flash selbst
 
svenu schrieb:
Das ist absicht b.jay im fspatch ordner wird deutlich warum

War/Ist mir klar das mtdblock13 (/mnt/local) in den mtdblock10 (/data) "eingelinked" ist ... sprich: das sich /mnt/local und /data bis zu einem gewissen Grad den Speicherplatz teilen. Hatte ich ja schon in einem komplett anderen anderen Thread ausgeführt.

Die Idee die auskommentierten Zeilen mal testweise mal reinzunehmen basiert auf tekilakos' konstantem "imaginäre SD". Diese nicht existente "SD" (die Apps die "fehlen" werden im App Manager, laut Screenshots, mit dem "SD" Icon angezeigt) kann in dem Fall nur das non-existente /mnt/internal sein.

Wie komme ich darauf? Nun, im Stock ROM waren/sind die WMT Apps, und noch ein paar andere wie z.B. der "Stock Browser", im /mnt/internal/.SYSTEM/APP abgelegt und konnten via dem App Manager sogar deinstalliert werden. Damit ist die diese lustige /mnt/local <-> /mnt/internal "Schleife" sowas ähnliches wie: /mnt/local ist die eigentliche "Interne SD" während /mnt/internal sowas ähnliches wie ein auf die "Interne SD gelinktes pseudo 'Zusätzliche Apps auf SD'" ist so das dort APKs abgelegt werden können die de-installiert werden können und sich trotzdem über das lustige Konstrukt als "System App" ausgeben (ich weiß, liest sich ziemlich Verwirrend).

Da bei mir die Installation von Deinem JB 1.3.5 korrekt abläuft, aber bei tekilakos, und nunmehr auch bei einem zweiten Anwender nicht so funktioniert wie bei Dir oder mir - die Hardware kann's nicht sein (wenn wir mal eine bei Seite lassen das es evtl. die SD selbst sein könnte die nicht so wirklich mit dem Tablet will - wir wissen ja das einige Karten dem 10d "unsympatisch" sind). Wie gesagt - dmesg Vergleich zeigt nur das der einzige Unterschied, zumindest zwischen tekilakos' 10d und dem Brett das neben mir liegt, der Hersteller des NAND Chip ist.

Das Einsetzen der beiden Zeilen in der vold.fstab sollte also die /mnt/internal Schleife wiederherstellen ... wobei sich die Frage stellt ob das .SYSTEM/APP da auch wieder erscheint - oder nicht. Was kann dabei passieren? Gar nichts (die beiden vold.fstab Zeilen sind unter Jelly Bean nutzlos), Bootloop (die Zeilen verwirren das System und es kommt nicht hoch -> reflash) oder "Problem gelöst".

War nur eine Idee um festzumachen ob daß das "die Apps fehlen dauernd und sind als auf einer "Imaginären SD" installiert gelisted" lösen würde.


Ich hab da momentan so ein ähnliches Problem mit dem AOSP Compile an dem ich noch rumforsche ... die echte mSD bzw. ein USB Stick / eine USB Festplatte wird zwar erkannt aber beim Zugriff darauf wird es sofort unmounted - da ist irgendwas im ROM über Kreuz mit der Datenträgerverwaltung des Kernel.

Das ist aber nur eine von ungefähr noch 10 zu lösenden "Baustellen". Neben dem kleinen Problem das mSD/USB bei Zugriff wieder "abfliegt" hab' ich noch ein paar kleine Probleme mit dem Lagesensor (Bildschirmdrehung), der Kamera und Hardwarebeschleunigung (beides: Video und 2D/3D Accel).
 
Zuletzt bearbeitet:
Mhh , warum wird imSkript oben nicht der locale , formatiert da werden nur Ordner gelöscht und der lokale im systemordner , der läuft direkt aus einer ramdisk mit 128
mb. folglich vermute ich im root verzeichnis das dort irgenwas faul ist bei den beiden.
dumm nur laut den skript so wie ich das hin und her da drinn rausles wird das eigentliche
/locale als not falback benutzt so das im gau fall wenigstens sd karte erkant wird.
als hatte tak. soweit recht das zwar nand erasing geschrieben wird, aber
damit / data und / system nur geleert wird.
und im locale muss irgenwas das erstellen des /temp ordners den das skript zum wurstelln
benutzt falsch laufen.
jupp sdcard wird zweimal als ordner gemountet einmal im /
einmal im system/ mnt/ sdcard
diese zeilen im skrip die ausgeklammert sind

der locale wird defakto nicht formatiert, zieh mal nach erasing nand die sd karte raus
das batterieladelogo und systemrestore kommen dann, funtzt klar nicht da / system
geloscht wurde, erasing nand.
Sprich es muss im wurzelverzeichnis was faul sein schreibrechte das kein / temp
ordner erstellt wird und somit nur der ordner android4,1 kopiert wird.
weshalb auch die apps und ich vermutte noch einiges mehr nicht kopiert werden, weil die
ja erst im / temp ordner zusammengewuerfelt werden und von dort dann in system
und Sytem/.restore rein.
kann das wurzelverzeichnis ggf andere rechtevergabe besitzen als es haben sollte?
und somit das patchen nicht funktioniert?
Diese zeilen im flash skript
Code:
Jody: if system don't create dev-nod for new MMC partition, we do it
        #mknod "${dev_name}p1" b 179 1
        #mknod "${dev_name}p2" b 179 2
        #mknod "${dev_name}p3" b 179 3
        #mknod "${dev_name}p5" b 179 5
        #mknod "${dev_name}p6" b 179 6
        #mknod "${dev_name}p7" b 179 7
 
Zuletzt bearbeitet:
svenu schrieb:
Mhh , warum wird imSkript oben nicht der locale , formatiert da werden nur Ordner gelöscht und der lokale im systemordner , der läuft direkt aus einer ramdisk mit 128
mb. folglich vermute ich im root verzeichnis das dort irgenwas faul ist bei den beiden.
dumm nur laut den skript so wie ich das hin und her da drinn rausles wird das eigentliche
/locale als not falback benutzt so das im gau fall wenigstens sd karte erkant wird.
als hatte tak. soweit recht das zwar nand erasing geschrieben wird, aber
damit / data und / system nur geleert wird.

Nope, /system (mtdblock8), /data (mtdblock10) und /cache (mtdblock9) werden formatiert ...

Snippet aus dem Skript das Du oberhalb selbst gepostest hast:
Code:
        info 1 "Erasing System partition..."
        umount ${mtd_system}
        mke2fs -T ext4 ${mtd_system}

        info 1 "Erasing Data partition..."
        umount ${mtd_data}
        mke2fs -T ext4 ${mtd_data}
        if [ $? -ne 0 ] ; then
            info 1 "Error: Failed to format FileSystem partition!"
            install_critical_error=1
            return 1
        fi

        info 1 "Erasing Cache partition..."
        umount ${mtd_cache}
        mke2fs -T ext4 ${mtd_cache}]

"info 1", wenn ich mich jetzt nicht ganz irre, sollte der Text sein der in dem etwas größeren Bereich während des Flash durchscrolled ... sollte nicht unten in der "Statuszeile" sein wo am Ende das "Remove SD card to reboot system" steht (kann mich jetzt aber auch Irren und es kann genau umgekehrt sein).

Wie auch immer... die drei Zeilen sollten auf jeden Fall auftauchen wenn Du von SD aus flashed (und auch bei teki irgendwann mal am Bildschirm landen).

Das einzig eigenartige ist eher: Das Script hat explizit "ext4" als Filesystemtyp angegeben ... ein "mount" im laufenden System zeigt aber "yaffs2" als Dateisystem für die drei Partitionen an (yaffs2 = Yet Another Flash FileSystem 2.0).
 
Zuletzt bearbeitet:
habe mit dem Tool von Techknow (HcH TechKnow ToolKit v2.0 22APR2013)
ein paar Analysen gemacht vielleicht bring uns das weiter.
man kann damit auch ein system dump machen.
 

Anhänge

  • analyzer_output.txt
    27,3 KB · Aufrufe: 1.279
  • error_logcat.txt
    262 Bytes · Aufrufe: 165
  • logcat.txt
    14,7 KB · Aufrufe: 1.183
  • wm_analyzer.txt
    863 Bytes · Aufrufe: 232
tekilakos schrieb:
habe mit dem Tool von Techknow (HcH TechKnow ToolKit v2.0 22APR2013)
ein paar Analysen gemacht vielleicht bring uns das weiter.
man kann damit auch ein system dump machen.

Danke, ich schau's mir das später durch.

Ach ja, so am Rande: svenu hat sein JB v1.3.5 doch "debuggable" gemacht (also von vorne herein). Wenn Du das nächste mal flashed, kannst Du ein "adb logcat" vom ersten boot direkt nach dem Flash ziehen)?

Sprich:

- BEVOR Du die SD Karte rausnimmst das USB Kabel mit dem Computer verbinden und ein "adb logcat > ./Downloads/justflashed.log" in der Eingabeaufforderung vorbereiten.

- Die SD entnehmen und "Enter" um das Kommando zu starten
(wird sicher kurz mit "waiting for device" da sitzen bis das Tablet den adbd gestartet hat)

- Solange mit loggen lassen bis Du durch die "Wizards" durch bist (Du brauchst kein WiFi oder Google Konto einrichten, das würde nur unnötig im log auftauchen).

- Danach in die Einstellungen -> Anwendungen und de-installier' mal eine der Apps auf der "imginären SD" damit auch aufgezeichnet ist was der App Manager da eigentlich sieht bzw. was er da eigentlich deinstalliert was gar nicht da ist.

Das ist das einzige das wir bislang noch nicht haben.
 
@b.jey
Dein snippet sagt genau das, den der Mont wird in /system davor gelegt.
All so wird gelöscht /system/data

Der ursprüngliche Beitrag von 14:50 Uhr wurde um 15:32 Uhr ergänzt:

B,jey das Skript formatiert nur da extre umgebogenen systemordner den zuvor im skrip
Und da /nicht gelöscht wird zwecks fallbackfunktion steht da auch das Problem drinn.
Den die Partitionen / bleibt erhalten nur im Ordner mnt/ wird vorher angelegte virtuelle
Partition formatiert und zwar direkt aus deinen codesnipped mntund zwar nur da drinn.
Nicht zwei filesysteme sondern auf filesystem ist Ordner drinn der als partition gegaugelt
Und der Mont un darin ist das system, das aussenrum
Code:
if system don't create dev-nod for new MMC partition, we do it
        #mknod "${dev_name}p1" b 179 1
        #mknod "${dev_name}p2" b 179 2
        #mknod "${dev_name}p3" b 179 3
        #mknod "${dev_name}p5" b 179 5
        #mknod "${dev_name}p6" b 179 6
        #mknod "${dev_name}p7" b 179 7
Und das ist genau was passiert, die Komplette platte wird nicht geputzt
Den dein codesnippet bezieht sich auf zuvor zurechtgebogenen mointpiont im Mnt Ordner.
One disk system in den virtuell das / liegt erzeugt werden.
Und nur die gelaescht werden weil der Grund Putz bei takilos nicht erfolgt,
Sprich # eine der ausklammerungen weg
Den if system do not New MMC ..........we do it.
# entfernen Flaschen dann funtzt auch.
Mnt / darin sind virtuelle devices angelegt worden und nur die flasht bei den beiden das Skript, und /temp wird beim flashvorgang erzeugt wenn dann /wegen irgendwelcher
Rechte nicht erzeugt werden laufen die patches da drinn nicht.
If system do not develover Abteeilung dann Essig mit patches.
 
svenu schrieb:
(...)
Code:
if system don't create dev-nod for new MMC partition, we do it
        #mknod "${dev_name}p1" b 179 1
        #mknod "${dev_name}p2" b 179 2
        #mknod "${dev_name}p3" b 179 3
        #mknod "${dev_name}p5" b 179 5
        #mknod "${dev_name}p6" b 179 6
        #mknod "${dev_name}p7" b 179 7

Falls Du meinst das diese paar Zeilen (wenn auskommentiert) die entsprechenden Partition formatieren oder löschen/anlegen würden, dann irrst Du.

"mknod" (make node) ist das Linux/UNIX commandline Progrämmchen mit dem die device nodes in /dev angelegt werden - das formatiert nichts und das partitioniert nichts.

Wegen "das 'system' und 'data' werden nur gelöscht": wo sind die "rm -r $instenv_fs_<Ziele für system und data>/*" Zeilen - bzw selbiges auch für den cache wenn auch der nur gelöscht wird aber nicht formatiert?

*geht nochmal die ganzen Skripte auf den Kopf stellen in der Mission 'was habe ich bis heute verpasst?'*
 
Code:
 #make backup dir for factory restore, all pre-install data/app will be backup in this folder     mkdir -p ${instenv_fs_system}/.restore/data_app     mkdir -p ${instenv_fs_data}/app
Warum haut das dann nicht hin?

sprich das ganze system wird im /zusaamnegpanscht. dann

nach /sytstem alles reinkopiert

danach das im / gelöscht

warum kkopierts dann die /app nicht in /sytem/app ?

das ist die virtuelle sdcard die den beiden entwichen ist.

/system/app sind die apps die das laufende system benutzt.
/system/.restore/data_app für werksresett

Im / ist der Kernerl das bootlogo und die ladenanimation das ganze wichtige

wird mit den codesnyped dann in /system kopiert/

warum funtz das bei jeden ausser bei den beiden.

es wird von / nach /system/* kopiert

bei den beiden liegts noch im / und wird deshalb vom installer
dann gelöscht .

Was verhintert das umkopierern? P und P1 bezeichnung vertauscht?:confused2::confused2::confused2::confused2::confused2:

Sprich das kopierern könnte dann nicht mit der virtuell disk kominitzierern und dann sagt zwar die com.app das die app in /system/app liegen sollten tuts apper nicht da ggf die beizeichnung der mmc

durch JB 4.1.1 1.1.0 geändert wurde. dann will kopierern von
"/" nach "p" und bei den beiden heist es zufällig P1 und schon hauts nicht mehr hin.
 
Zuletzt bearbeitet:
Apropos "nicht funktionieren" ... ich hab' was gefunden das wirklich nicht mehr geht (im JB 1.3.5)...

Hab' gestern mal den Datenstick (Huawei E156G - ist seit Jelly Bean offiziell in der "dongle support list" mit drinnen) in den USB gepackt und ... nischt.

Der Stick initialisiert, verbindet mit dem Mobilnetz und im Einstellungen -> Mehr... -> 3G mobile networks -> Access Point Names ist leere Hose.

Probiere ich die APN Einstellungen manuell anzulegen: nach "Speichern" ... nix da.

Klar das ein Tapser auf "Data enabled" auch nichts bringt weil keine APN config da ist.

Im logcat ist nur ein Fehler ... in den Zeilen vom usbmodeswitch wird jede Operation jeweils mit einem "connect 3g error" quittiert.

Kann mal jemand gegentesten ob es mit einem anderen Stick funktioniert?

Wenn ja, dann könnte es entweder ein spezifischer Fehler bei Huawei Sticks sein, oder aber die config für genau den E156G ist fehlerhaft.

Hatte im Stock ROM als auch im JB 1.1.0 und 1.3.0 funktioniert.
 
Hab keinen deswegen nix mit testen
 
Ich denke die apps zum konfigurierern ich hab die fehlenden Ordner

mit iengebaut, das sind die Wlan Hotspot tehtering etc pp drinn.

Da haben aps gefehlt. b.jey teste mal die neuer version, auch das

config file war noch faksche zeile drinn.

Mhh hotfix. Neuer version lädt über nacht hoch. morgen früh on.

dann sollte sich bei 3g und wlan hotspeoot einstellen auch was tun.
 
svenu schrieb:
Ich denke die apps zum konfigurierern ich hab die fehlenden Ordner

mit iengebaut, das sind die Wlan Hotspot tehtering etc pp drinn.

Da haben aps gefehlt. b.jey teste mal die neuer version, auch das

config file war noch faksche zeile drinn.

Mhh hotfix. Neuer version lädt über nacht hoch. morgen früh on.

dann sollte sich bei 3g und wlan hotspeoot einstellen auch was tun.

Danke. Ich lad's mal runter und flashe es dann heute Abend ein; habe gerade gut zu tun.

Lasse Dich dann wissen ob der Datenstick wieder kooperiert.

P.S.: WLAN Hotspot habe ich gar nicht getestet - wollte nur mal kurz mobil ins Internet und lief unerwarteterweise gegen die Wand ... kann aber, wenn die Verbindung via Datenstick funktionieren sollte, auch gleich den Hotspot mit testen um zu sehen ob es WiFi->3G weiterleitet.
 
:D hab den fehler liegt am "Toch_Name " im fcw file

da hatte ich anrova drinn stehen, blöd nur das das xml file

das nicht kennt

deshalb wurde das fcw file bearbeitet und die version mit verbesserten fcw.file

lädt gerade hoch.

wer die version vom 13.6 geladen hatt barcht nicht mehr die ganzen mb
ziehen

es reicht das angehänget file zu entpacken und in

firmwareinstall/config reinzukopiern und klar überschreiben
auswählen. und dann den flash ausführen. so sollten

nun werden wirklich die richtigen modules wie auch in 130 geladen

weshalb ich auch divberse Probleme mit Tefonkartensticks damit bhoben haben sollte.

wichtig ist das

diese zeile -> TOUCH name="CTP10.1_FT5406_W10A" />

diese muss so sein da ansonnsten nicht alle modules(Treiber) richtig eingestellt werden das machen die modules.xml im selbigen ordner
(config)
 

Anhänge

  • +Eken_MID10.1_W10A_8235_FT5406-aks.zip
    1,1 KB · Aufrufe: 234
Tolle Arbeit die ihr hier leistet, aber ich denke ich mach was falsch. Bei mir ist das Problem mit der Led nach wie vor hier. Nach rund 30 Minuten lässt es sich dann aus dem standby nicht mehr einschalten und ein neustart ist erforderlich.
Wo hab ich was falsch gemacht beim flashen?
 
Werksresett mal nach dem Flashen, durchführen. Nicht das da noch alte einstellungen rumgeistern.


Ich hab das Tap jetzt 3 Tage am Laden gehabt, da ich das WE nicht da war.

Knopf und Gut. Uptime dementsprechend.

Auch Arnova bzw die ganzen OEM sagen nach Flash ist es Besser einen

Resett durchzuführen, muss nicht aber grad bei solchen Sachen das erste

was man durchführen sollte.
 
Moin also versteh ich das richtig ?? ich hab die version 1.3 und kann ganz normal nach der flash anleitung gehen um die version 1.3.5 Ultimate drauf zu machen ?? klar die daten was drauf sind sind weg ( ist ja net schlimm ) aber sonst funzt das dann ohne probleme ??

Wie macht man denn bei dem Tablet nen Werksresett wenn ich fragen darf ?? mach ich das über die einstellung ?? oder muss ich da ihrend wie in ein Flash menü wie zb beim Samsung Galaxy S2/S3 ??
 

Ähnliche Themen

W
Antworten
4
Aufrufe
6.187
Wildweststeirer
W
M
Antworten
0
Aufrufe
1.178
matze-pe
M
S
Antworten
77
Aufrufe
15.499
TeslorKaalut
T
Zurück
Oben Unten