Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- #
- # This is a main init script for Z
- #
- # (C) 2005 Samsung Electronics
- #
- # $Log: rc,v $
- # Revision 1.12 2006/05/30 07:59:41 hcyun
- # add dosfsck to correct filesystem corruption due to power off during metadata update
- #
- # Revision 1.11 2006/04/19 07:26:43 hcyun
- # - set hidden on System/System.ver
- #
- # Revision 1.10 2006/03/23 14:05:54 hcyun
- # - support seperate MLC/SLC kernel image.
- # - support upgrade from phase1 + SLC
- # - add fixup script execution for future upgrade handling
- # - handle 7.5MB /ufdrawc limit due to 4GB with pre 2.0 partition table bug
- # now Oasis image must be named as "Oasis-big.cramfs"
- # - firmware version update without modifying country code of /mnt/app/System.ver
- #
- # Revision 1.9 2006/03/06 10:43:44 biglow
- # - add detecting s/w version
- #
- # Revision 1.8 2006/02/22 12:43:45 hcyun
- # reset db after the reformatting due to FAT corruption.
- #
- # Revision 1.7 2006/02/13 10:02:54 hcyun
- # handle mount error
- #
- # - hcyun
- #
- # Revision 1.6 2006/01/16 13:22:48 hcyun
- # retry to write cramfs
- #
- # Revision 1.5 2006/01/15 08:20:54 hcyun
- # handle install fail case
- #
- # Revision 1.4 2005/12/29 11:43:28 hcyun
- # leave System.ver untouched in /mnt/usb
- #
- # Revision 1.3 2005/12/26 06:41:34 hcyun
- # safe System.ver update.
- #
- # Revision 1.2 2005/12/22 12:37:09 hcyun
- # add hostname
- #
- # Revision 1.1 2005/12/22 05:50:18 hcyun
- # Moved from images directory.
- #
- err_msg()
- {
- echo "ERROR $*"
- exit 1
- }
- err_install()
- {
- echo "ERROR $*"
- killall -9 install-scr.sh
- rm -f z5-fw.dat fw.tar.gz
- rm -f Oasis.cramfs Oasis.tar.gz Media.tar.gz System.ver
- rm -f zImage Image rootfs.cramfs nandboot.sb
- sync
- # TODO. display firmware upgrade failure.
- /z-proj/bin/recovery /share/install-fail.fb
- echo ">> Reset the system"
- reboot
- echo "main 0" > /proc/powerctl
- }
- handle_noformat_ufda()
- {
- echo "mount failed"
- echo "Unmounting previous mounts"
- umount /mnt/app
- echo "Now re-format the /dev/ufda"
- ffdisk /dev/ufda -a
- fformat -f12 -c 16 /dev/ufda1 || \
- fformat -f12 -c 32 /dev/ufda1 || \
- fformat -f16 -c 8 /dev/ufda1 || err_msg "Can't format /dev/ufda1"
- mount /mnt/app
- if mount -t cramfs /dev/ufdrawc /Oasis; then
- if [ -f "/Oasis/OasisData.tar.gz" ]; then
- echo "copy OasisData"
- cat /Oasis/OasisData.tar.gz | ( cd /mnt/app ; tar zxvf - )
- fi
- umount /Oasis
- fi
- }
- handle_noformat_ufdb()
- {
- echo "mount failed"
- echo "Unmounting previous mounts"
- umount /mnt/usb
- echo "Now re-format the /dev/ufdb"
- ffdisk /dev/ufdb -a
- fformat -f32 -c 32 /dev/ufdb1 || \
- fformat -f16 -c 32 /dev/ufdb1 || err_msg "Can't format /dev/ufdb1"
- mount /mnt/usb
- if mount -t cramfs /dev/ufdrawc /Oasis; then
- echo "Copy wallpapers"
- (cd /Oasis/usr/Oasis/DataTemplate; tar cf - . ) | ( cd /mnt/usb; tar xvf - )
- (cd /Oasis/usr/Oasis; bin/resetdb.sh )
- umount /Oasis
- fi
- }
- # procedure start downloading
- handle_nofw()
- {
- echo "[handle_nofw]: Unable to find a firmware"
- umount /mnt/app
- umount /mnt/usb
- # /dev/ufda2 must be formatted.
- # TODO : error handling if /dev/ufda1 is not formatted"
- echo ">> Now ready to connect UMS"
- echo "usbcontrol 1" > /proc/gadget_udc
- insmod g_file_storage file=/dev/ufdb
- echo ">> download firmware to the UMS"
- echo "after downlod is finished.. !!reboot the target!!"
- echo "it will install new firmware automatically"
- echo
- echo ">> Start recovery"
- /z-proj/bin/recovery /share/recovery.fb
- echo ">> Unloading UMS driver"
- rmmod g_file_storage
- sync
- echo ">> Reset the system"
- echo "main 0" > /proc/powerctl
- }
- handle_cramfs()
- {
- image=$1
- dev=$2
- echo "Error on installing cramfs $image on $dev. Try again"
- dd if=$image of=$dev bs=2048 || err_msg "Fail again -_-"
- sync
- }
- # this is fix for 4GB SLC, phase 1.
- fixup_oasis()
- {
- echo "[fixup_oasis]: Found an uninstalled Oasis cramfs image"
- cd /mnt/usb
- echo "Install UI application (bigger than 7.5MB)"
- dd if=Oasis-big.cramfs of=/dev/ufdrawc bs=2048 || handle_cramfs Oasis-big.cramfs /dev/ufdrawc
- rm -f Oasis-big.cramfs
- sync
- }
- # temporary procedure to install correct kernel in case of installed
- # rc script do not distinguish MLC/SLC installation.
- # when this is kicked in, we can assume new rc script is running.
- # !! IMPORTANT !! require reboot
- fixup_kernel()
- {
- echo "[fixup_kernel]: Found an uninstalled kernel image"
- cd /mnt/usb
- # TODO : display temporary kernel update notice
- echo "refresh 0" > /proc/lfbctrl
- cat /share/install.fb > /dev/fb0
- if [ ! -f "/proc/z5-hw" ]; then
- # this must be a phase1 firmware with SLC attached.
- echo "phase1 firmware with SLC"
- dd if=Image-SLC of=/dev/ufdrawa bs=2048 || handle_cramfs Image-SLC /dev/ufdrawa
- else
- echo "[ERROR] Not a phase1 with SLC?"
- cat /share/install-fail.fb > /dev/fb0
- fi
- echo "Removing fixup kernel images"
- rm -f Image-SLC Image-MLC
- sync
- echo "Reboot the system"
- reboot
- }
- # temporary procedure for initial product without fw version update capability
- update_fwver()
- {
- echo "[update_fwver]: Found firmware update"
- # TODO :
- update_version `cat /mnt/usb/z5-fw.ver` /mnt/app/System.ver
- [ ! -d "/mnt/usb/System" ] && mkdir -p /mnt/usb/System
- cp /mnt/app/System.ver /mnt/usb/System/System.ver
- chmod 1555 /mnt/usb/System
- chmod 1555 /mnt/usb/System/System.ver
- rm -f /mnt/usb/z5-fw.ver
- rm -f /mnt/usb/System.ver
- sync
- }
- # procedure to install new firmware image..
- install_newfw()
- {
- echo "[install_newfw]: Found a new firmware "
- cd /mnt/usb
- echo "refresh 0" > /proc/lfbctrl
- /z-proj/bin/install-scr.sh & # spinning update screen.
- echo ">> Start firmware installation"
- echo "Decrypting firmware"
- if ! z5decrypt z5-fw.dat fw.tar.gz z5-fw.ver; then
- err_install "Decryption failed"
- fi
- echo "Decompressing firmware"
- if ! tar zxvf fw.tar.gz ; then
- err_install "Corrupted firmware"
- fi
- echo "Removing decrypted firmware Image"
- rm -f fw.tar.gz
- if [ -f "z5_fixup.sh" ]; then
- echo "Found a fixup script... run it first"
- sh z5-fixup.sh
- rm -f z5-fixup.sh
- sync
- fi
- if [ ! -f "/mnt/app/System.ver" ]; then
- echo "Initial System.ver installation to /mnt/app"
- mv System.ver /mnt/app
- sync
- fi
- if [ -f "Media.tar.gz" ]; then
- echo "Installing Media Files"
- cat Media.tar.gz | (cd /mnt/usb; tar zxvf - )
- rm -f Media.tar.gz
- sync
- fi
- if [ -f "Oasis.cramfs" ]; then
- echo "Install UI application"
- dd if=Oasis.cramfs of=/dev/ufdrawc bs=2048 || handle_cramfs Oasis.cramfs /dev/ufdrawc
- rm -f Oasis.cramfs
- sync
- fi
- if [ -f "Oasis-big.cramfs" ]; then
- echo "Install UI application (bigger than 7.5MB)"
- dd if=Oasis-big.cramfs of=/dev/ufdrawc bs=2048 || handle_cramfs Oasis-big.cramfs /dev/ufdrawc
- rm -f Oasis-big.cramfs
- sync
- fi
- if [ -f "Oasis.tar.gz" ]; then
- echo "Installing OasisData (or Devel version of Oasis)"
- if [ -d "/mnt/app/usr/Oasis" ]; then
- echo "Removing previously installed Oasis"
- rm -rf /mnt/app/usr/Oasis
- rm -f /mnt/app/start.sh
- fi
- cat Oasis.tar.gz | (cd /mnt/app; tar zxvf - )
- rm -f Oasis.tar.gz
- sync
- fi
- if [ -f "zImage" ]; then
- echo "Installing zImage"
- dd if=zImage of=/dev/ufdrawa bs=2048 || handle_cramfs zImage /dev/ufdrawa
- rm -f zImage
- sync
- fi
- if [ -f "Image" ]; then
- echo "Installing Image"
- dd if=Image of=/dev/ufdrawa bs=2048 || handle_cramfs Image /dev/ufdrawa
- rm -f Image
- sync
- fi
- if [ -f "Image-SLC" -o -f "Image-MLC" ]; then
- if grep "SLC" /proc/z5-hw ; then
- echo "SLC flash is connected"
- dd if=Image-SLC of=/dev/ufdrawa bs=2048 || handle_cramfs Image-SLC /dev/ufdrawa
- elif grep "MLC" /proc/z5-hw ; then
- echo "MLC flash is connected"
- dd if=Image-MLC of=/dev/ufdrawa bs=2048 || handle_cramfs Image-MLC /dev/ufdrawa
- else
- echo "[ERROR] Incorrect z5-hw info.."
- fi
- echo "Removing fixup kernel images"
- rm -f Image-SLC Image-MLC
- sync
- fi
- if [ -f "nandboot.sb" ]; then
- echo "Installing bootloader"
- nsect=`ls -l nandboot.sb | awk '{ print $5 }'`
- echo "bootloader num sectors : $nsect"
- dd if=nandboot.sb of=/dev/misc/sram
- echo "$nsect" > /proc/lld/nandsb
- rm -f nandboot.sb
- sync
- fi
- if [ -f "rootfs.cramfs" ]; then
- echo "Install cramfs"
- dd if=rootfs.cramfs of=/dev/ufdrawb bs=2048 || handle_cramfs rootfs.cramfs /dev/ufdrawb
- rm -f rootfs.cramfs
- fi
- echo "Removing encrypted firmware Image"
- rm -f z5-fw.dat
- sync
- echo ">>> Firmware Installation was successful"
- echo ">>> Reset the system"
- /sbin/reboot
- echo "reboot is not working.. force power off"
- echo "main 0" > /proc/powerctl # should not reach here
- }
- export PATH=$PATH:/z-proj/bin
- mount -t proc none /proc
- mount -t tmpfs none /mnt/tmp
- /z-proj/bin/dosfsck -a /dev/ufda1
- mount /mnt/app \
- || handle_noformat_ufda \
- && echo "mount /dev/ufda1 is successful"
- mount /mnt/usb \
- || handle_noformat_ufdb \
- && echo "mount /dev/ufdb1 is successful"
- [ -f "/mnt/usb/z5-fw.dat" ] && install_newfw
- # Ugly fix for initial product (SLC with pre 2.0 firmware ) - require reboot
- [ -f "/mnt/usb/Image-SLC" ] && fixup_kernel
- # Ugly for for initial product (4GB SLC with pre 2.0 firmware)
- [ -f "/mnt/usb/Oasis-big.cramfs" ] && fixup_oasis
- [ -f "/mnt/usb/z5-fw.ver" ] && update_fwver
- # read S/W version information
- cat /mnt/app/System.ver > /proc/z5-ver
- # RFS Oasis (only for development)
- if [ -f "/mnt/app/start.sh" ]; then
- echo "[DEVEL] RFS /dev/ufda1 contain oasis distribution"
- echo "[DEVEL] Starting main UI"
- /mnt/app/start.sh
- exit
- fi
- # CRAMFS Oasis (for production)
- mount -t cramfs /dev/ufdrawc /Oasis \
- || handle_nofw
- [ -f "/Oasis/start.sh" ] \
- || handle_nofw
- echo "Start main UI"
- /Oasis/start.sh
- hostname "Z5"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement