%license LICENSE
%{initrd_recovery_install_dropin_dir}/00-initrd-recovery.list
%attr(0775,root,root)%{initrd_recovery_libexec_dir}/init
+%attr(0775,root,root)%{initrd_recovery_libexec_dir}/normal-init
%attr(0775,root,root)%{initrd_recovery_libexec_dir}/mkinitrd-recovery.sh
%attr(0775,root,root)%{initrd_recovery_libexec_dir}/minireboot
# ---- Target contents ----------------------------------------------------- #
MVWITHLIBS="
@INITRD_RECOVERY_LIBEXEC_DIR@/init
+@INITRD_RECOVERY_LIBEXEC_DIR@/normal-init
@INITRD_RECOVERY_LIBEXEC_DIR@/minireboot
+/usr/sbin/kexec
"
WITHLIBS="
SYMLINKS="
/bin/sh:bash
/sbin/init:@INITRD_RECOVERY_LIBEXEC_DIR@/init
+/sbin/normal-init:@INITRD_RECOVERY_LIBEXEC_DIR@/normal-init
/sbin/minireboot:@INITRD_RECOVERY_LIBEXEC_DIR@/minireboot
/sbin/reboot:@INITRD_RECOVERY_LIBEXEC_DIR@/minireboot
"
FAKE_ROOT=/system
FAKE_ROOT_RO=/system-ro
INFORM_PATH=/mnt/inform
+BOOT_PATH=/boot
+REBOOT_PARAM_PATH=${INFORM_PATH}/reboot-param.bin
+
+reboot_upgrade_val=upgr
+reboot_recovery_val=rcvr
+reboot_nodef_val=ndef
+reboot_download_val=dwnl
STATUS_DIR=${FAKE_ROOT}/opt/data/recovery
STATUS_FILE=${STATUS_DIR}/RW.STATUS
REBOOT="/sbin/reboot"
BLKID="/usr/sbin/blkid"
+
#------------------------------------------------
# mount_partitions
#------------------------------------------------
-mount_partitions() {
+mount_apifs() {
"$MOUNT" -t proc none /proc
"$MOUNT" -t sysfs none /sys
"$MOUNT" -t smackfs smackfs /smack
#------------------------------------------------
# mount_inform
#------------------------------------------------
-mount_inform() {
+mount_partitions() {
+ PART_BOOT=$("$BLKID" -L "BOOT" -o device)
+ if [ "z$PART_BOOT" != "z" ]; then
+ "$MKDIR" -p ${BOOT_PATH}
+ "$MOUNT" -t vfat ${PART_BOOT} ${BOOT_PATH}
+ fi
+
PART_INFORM=$("$BLKID" -L "inform" -o device)
if [ "z$PART_INFORM" != "z" ]; then
"$MKDIR" -p ${INFORM_PATH}
#------------------------------------------------
do_reboot() {
echo "Reboot"
+ "$UMOUNT" "$INFORM_PATH"
+ "$UMOUNT" "$BOOT_PATH"
"$SYNC"
"$REBOOT"
while [ 1 ]
#------------------------------------------------
echo "You entered into /sbin/init on initrd"
+mount_apifs
mount_partitions
-mount_inform
cd /
-# Manually parse /proc/cmdline to avoid additional tools on image
-read cmdline </proc/cmdline
-echo "Kernel command line: $cmdline"
-set -- $cmdline
-while [ $# -gt 0 ]; do
- key="${1%%=*}"
- if [ "$key" = "bootmode" ]; then
- BOOT_MODE="${1#*=}"
- break;
- fi
- shift
-done
+BOOT_MODE=normal
-if [ "z$BOOT_MODE" = "z" ]; then
- echo "BOOT_MODE was NOT defined!!"
- echo "Do reboot!!"
- do_reboot
+# Logic from boot.scr
+if [ -f "$REBOOT_PARAM_PATH" ]; then
+ REBOOT_PARAM="$(cat $REBOOT_PARAM_PATH)"
+ if [ "$REBOOT_PARAM" = "$reboot_upgrade_val" ]; then
+ BOOT_MODE=fota
+ elif [ "$REBOOT_PARAM" = "$reboot_recovery_val" ]; then
+ BOOT_MODE=recovery
+ elif [ "$REBOOT_PARAM" = "$reboot_download_val" ]; then
+ BOOT_MODE=flash
+ elif [ "$REBOOT_PARAM" = "$reboot_nodef_val" ]; then
+ echo "This reboot parameter is not supported..."
+ fi
fi
+
echo "BOOTMODE is ${BOOT_MODE}"
if [ -f /sbin/${BOOT_MODE}-init ]; then
--- /dev/null
+#!/bin/sh
+export PATH=/usr/bin:/bin:/usr/sbin:/sbin
+
+while read -t3 -s -n1 -p "Press any key to enter shell..." key; do
+ echo
+ exec /bin/bash
+done;
+
+set -x
+INFORM_PATH=/mnt/inform
+BOOT_PATH=/boot
+REBOOT_PARAM_PATH=${INFORM_PATH}/reboot-param.bin
+
+BLKID="/usr/sbin/blkid"
+KEXEC="/usr/sbin/kexec"
+
+CMDLINE="$(cat /boot/cmdline.txt)"
+PART_RAMDISK=$("$BLKID" -L "ramdisk" -o device)
+
+blkid
+echo PART_RAMDISK=$("$BLKID" -L "ramdisk" -o device)
+
+echo "Booting Tizen"
+"$KEXEC" --load /boot/zImage \
+ --append="$CMDLINE bootmode=ramdisk" \
+ --ramdisk="$PART_RAMDISK" \
+ --kexec-syscall
+"$KEXEC" -e