From ecb5c8c971ba51936ae376119435c5934e69b12b Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C5=81ukasz=20Stelmach?= Date: Thu, 5 Mar 2020 17:27:55 +0100 Subject: [PATCH] WIP: Use kexec to boot Tizen MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Initial kboot ramdisk. Signed-off-by: Łukasz Stelmach --- CMakeLists.txt | 2 +- packaging/initrd-recovery.spec | 1 + src/initrd-recovery/00-initrd-recovery.list.in | 3 ++ src/initrd-recovery/init | 52 ++++++++++++++++---------- src/initrd-recovery/normal-init | 28 ++++++++++++++ 5 files changed, 66 insertions(+), 20 deletions(-) create mode 100755 src/initrd-recovery/normal-init diff --git a/CMakeLists.txt b/CMakeLists.txt index 501926e..dd24847 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(initrd-recovery) # Initrd-recovery -INSTALL(FILES ${INITRD_RECOVERY_SRC_DIR}/init DESTINATION ${INITRD_RECOVERY_LIBEXEC_DIR}) +INSTALL(FILES ${INITRD_RECOVERY_SRC_DIR}/init ${INITRD_RECOVERY_SRC_DIR}/normal-init DESTINATION ${INITRD_RECOVERY_LIBEXEC_DIR}) CONFIGURE_FILE(${INITRD_RECOVERY_SRC_DIR}/mkinitrd-recovery.sh.in ${INITRD_RECOVERY_SRC_DIR}/mkinitrd-recovery.sh diff --git a/packaging/initrd-recovery.spec b/packaging/initrd-recovery.spec index b7c152f..156fffd 100644 --- a/packaging/initrd-recovery.spec +++ b/packaging/initrd-recovery.spec @@ -61,6 +61,7 @@ rm -rf %{_datadir}/initrd-recovery %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 diff --git a/src/initrd-recovery/00-initrd-recovery.list.in b/src/initrd-recovery/00-initrd-recovery.list.in index 21a03e9..48ce971 100644 --- a/src/initrd-recovery/00-initrd-recovery.list.in +++ b/src/initrd-recovery/00-initrd-recovery.list.in @@ -1,7 +1,9 @@ # ---- Target contents ----------------------------------------------------- # MVWITHLIBS=" @INITRD_RECOVERY_LIBEXEC_DIR@/init +@INITRD_RECOVERY_LIBEXEC_DIR@/normal-init @INITRD_RECOVERY_LIBEXEC_DIR@/minireboot +/usr/sbin/kexec " WITHLIBS=" @@ -19,6 +21,7 @@ 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 " diff --git a/src/initrd-recovery/init b/src/initrd-recovery/init index 7c6cf17..cf3e42d 100755 --- a/src/initrd-recovery/init +++ b/src/initrd-recovery/init @@ -5,6 +5,13 @@ export PATH=/usr/bin:/bin:/usr/sbin:/sbin 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 @@ -17,10 +24,11 @@ UMOUNT="/bin/umount" 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 @@ -34,7 +42,13 @@ mount_partitions() { #------------------------------------------------ # 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} @@ -47,6 +61,8 @@ mount_inform() { #------------------------------------------------ do_reboot() { echo "Reboot" + "$UMOUNT" "$INFORM_PATH" + "$UMOUNT" "$BOOT_PATH" "$SYNC" "$REBOOT" while [ 1 ] @@ -61,29 +77,27 @@ do_reboot() { #------------------------------------------------ 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