diff --git a/packages/network/openssh/system.d/sshd.service b/packages/network/openssh/system.d/sshd.service
index 5417e4ae5d0..2dca78a6ae0 100644
--- a/packages/network/openssh/system.d/sshd.service
+++ b/packages/network/openssh/system.d/sshd.service
@@ -3,6 +3,8 @@ Description=OpenSSH server daemon
 After=network.target
 ConditionKernelCommandLine=|ssh
 ConditionPathExists=|/storage/.cache/services/sshd.conf
+# start ssh automatically
+ConditionPathExists=|/usr/sbin/sshd
 
 [Service]
 Restart=on-failure
diff --git a/packages/sysutils/busybox/scripts/init b/packages/sysutils/busybox/scripts/init
index d85392aaf67..eb8aac0de89 100755
--- a/packages/sysutils/busybox/scripts/init
+++ b/packages/sysutils/busybox/scripts/init
@@ -1020,6 +1020,12 @@ check_update() {
   do_reboot
 }
 
+mount_flash_rw() {
+  progress "Mounting flash rw"
+
+  mount_part "$boot" "/flash" "rw,noatime"
+}
+
 do_aml_autoscript() {
   if [ -z "${boot}" ] && [ -z "${disk}" ]; then
     echo "'reboot update' or 'run update' was run"
@@ -1027,7 +1033,14 @@ do_aml_autoscript() {
     # set missing variables not set in this case
     boot="LABEL=COREELEC"
 
-    mount_flash
+    mount_flash_rw
+
+    mkdir -p /flash/midebug
+    echo "flash_mounted" >/flash/midebug/flash_mounted
+
+    fw_printenv >/flash/midebug/printenv3
+    fw_setenv test_env_change 1
+    fw_printenv >/flash/midebug/printenv4
 
     # wait for eMMC
     for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
@@ -1036,14 +1049,27 @@ do_aml_autoscript() {
       usleep 1000000
     done
 
+    ls -al /dev >/flash/midebug/dev_entries
+    ls -al /flash >/flash/midebug/flash_entries
+
+    dd if=/dev/env of=/flash/midebug/dev_env.img
+    mount >/flash/midebug/mounted
+    dmesg >/flash/midebug/dmesg
+    sync
+
     if [ -f /flash/aml_autoscript ] && [ -b /dev/env ]; then
       echo "doing aml_autoscript..."
 
+      echo "doing aml_autoscript..." >/flash/midebug/do_aml
+
       mkdir -p /var/lock
       dd if=/flash/aml_autoscript bs=72 skip=1 status=none | \
         while read line; do
           cmd=$(echo ${line} | sed -n "s|^setenv \(.*\)|fw_setenv \1|gp")
-          [ -n "${cmd}" ] && eval ${cmd}
+          [ -n "${cmd}" ] && eval ${cmd} &>>/flash/midebug/eval_cmds
+          
+          [ -n "${cmd}" ] && echo "${cmd}" >>/flash/midebug/cmds
+          
         done
 
       echo "done..."
@@ -1051,6 +1077,8 @@ do_aml_autoscript() {
       echo "something went wrong"
     fi
 
+    sync
+
     do_reboot
   fi
 }
@@ -1296,16 +1324,34 @@ fi
 
 debug_msg "Unique identifier for this client: ${MACHINE_UID:-NOT AVAILABLE}"
 
+
+midebug_echo() {
+	mount -o remount,rw /flash
+	mkdir -p /flash/midebug
+	echo "$1" >>/flash/midebug/all.txt
+	sync
+	mount -o remount,ro /flash
+}
+
+
 # check if 'reboot update' or 'run update' was run
-do_aml_autoscript
+#do_aml_autoscript
+
+export boot=LABEL=COREELEC
+export disk=LABEL=STORAGE
+
+mount_flash
+fw_printenv >/flash/midebug/printenv1
+fw_setenv bootfromnand 0
+fw_printenv >/flash/midebug/printenv2
+
+midebug_echo "before main boot sequence"
 
 # main boot sequence
 for BOOT_STEP in \
     load_modules \
     check_disks \
     fix_bootlabel \
-    mount_flash \
-    cleanup_flash \
     update_bootmenu \
     mount_sysroot \
     mount_storage \
@@ -1314,12 +1360,15 @@ for BOOT_STEP in \
     check_update \
     prepare_sysroot \
     check_amlogic_dtb; do
+  midebug_echo "do BOOT_STEP: $BOOT_STEP"
   $BOOT_STEP
   [ -n "$DEBUG" ] && break_after $BOOT_STEP
 done
 
 BOOT_STEP=final
 
+midebug_echo "BOOT_STEP: $BOOT_STEP"
+
 # log if booting from usb / removable storage
 STORAGE=$(grep " /sysroot/storage " /proc/mounts | awk '{print $1}' | awk -F '/' '{print $3}')
 FLASH=$(grep " /sysroot/flash " /proc/mounts | awk '{print $1}' | awk -F '/' '{print $3}')
@@ -1385,6 +1434,8 @@ fi
 redirect_output_to_screen
 delete_descriptors
 
+midebug_echo "switch to new sysroot and start real init"
+
 # switch to new sysroot and start real init
 exec /usr/bin/busybox switch_root /sysroot /usr/lib/systemd/systemd $INIT_ARGS $INIT_UNIT
 
diff --git a/projects/Amlogic-ce/devices/Amlogic-no/options b/projects/Amlogic-ce/devices/Amlogic-no/options
index a38df0ae229..b626c0e15a1 100644
--- a/projects/Amlogic-ce/devices/Amlogic-no/options
+++ b/projects/Amlogic-ce/devices/Amlogic-no/options
@@ -149,6 +149,7 @@
 
   # CoreELEC Subdevices
     SUBDEVICES="Khadas_VIM4 Khadas_VIM1S Odroid_C4 Odroid_C5 Odroid_N2 Radxa_Zero Radxa_Zero2 Alta Solitude"
+    SUBDEVICES=""
 
   # TEE supported SoC
     TEE_SOC="S928X A311D2 S905W2 S905X4 S905Y4 S905X5M S905X5 S905A"
diff --git a/projects/Amlogic-ce/packages/aml_recovery/package.mk b/projects/Amlogic-ce/packages/aml_recovery/package.mk
index 3732e38ac5f..c1944b874b0 100644
--- a/projects/Amlogic-ce/packages/aml_recovery/package.mk
+++ b/projects/Amlogic-ce/packages/aml_recovery/package.mk
@@ -64,6 +64,13 @@ make_target() {
   mv -f arch/${TARGET_KERNEL_ARCH}/boot/boot.img arch/${TARGET_KERNEL_ARCH}/boot/${KERNEL_TARGET}
 }
 
+# overwrites above function
+make_target() {
+  # use normal kernel as recovery
+  mkdir -p ${INSTALL}/usr/share/bootloader
+  cp $(get_build_dir linux)/arch/${TARGET_KERNEL_ARCH}/boot/${KERNEL_TARGET} ${INSTALL}/usr/share/bootloader/recovery.img
+}
+
 makeinstall_target() {
   mkdir -p ${INSTALL}/usr/share/bootloader
 
diff --git a/projects/Amlogic-ce/packages/linux/package.mk b/projects/Amlogic-ce/packages/linux/package.mk
index 28d05c6f35e..bb98c37ea30 100644
--- a/projects/Amlogic-ce/packages/linux/package.mk
+++ b/projects/Amlogic-ce/packages/linux/package.mk
@@ -349,6 +363,9 @@ make_target() {
 makeinstall_target() {
   mkdir -p ${INSTALL}/.image
   cp -p arch/${TARGET_KERNEL_ARCH}/boot/${KERNEL_TARGET} System.map .config Module.symvers ${INSTALL}/.image/
+  
+  # copy also as recovery.img
+  cp -p arch/${TARGET_KERNEL_ARCH}/boot/${KERNEL_TARGET} ${INSTALL}/.image/recovery.img
 
   if [ "${BOOTLOADER}" = "u-boot" ]; then
     mkdir -p ${INSTALL}/usr/share/bootloader/device_trees
