ui_print("");
ui_print("Boot /sdcard/boot.img");
ui_print("");
show_progress(1.0, 0);

ui_print("Create mount and sh symlink.");
run_program("/sbin/ln",       "-s", "/sbin/mount",       "/tmp/mount");
run_program("/system/bin/ln", "-s", "/system/bin/mount", "/tmp/mount");
run_program("/sbin/ln",       "-s", "/sbin/sh",          "/tmp/sh");
run_program("/system/bin/ln", "-s", "/system/bin/sh",    "/tmp/sh");
set_progress(0.1);

ui_print("Remount partitions read-only.");
run_program("/tmp/mount", "-ro", "remount", "", "/system");
run_program("/tmp/mount", "-ro", "remount", "", "/data");
run_program("/tmp/mount", "-ro", "remount", "", "/cache");
set_progress(0.3);

ui_print("(Re)mount /sdcard read-only.");
run_program("/tmp/mount", "-ro", "remount", "", "/sdcard");
run_program("/tmp/mount", "-rt", "vfat", "/dev/block/mmcblk1p1", "/sdcard");
set_progress(0.4);

ui_print("Unpack unpackbootimg and kexec.");
package_extract_file("unpackbootimg",   "/tmp/unpackbootimg");
package_extract_file("kexec",           "/tmp/kexec");
package_extract_file("kexec_append.sh", "/tmp/kexec_append.sh");
set_perm(0, 0, 0755, "/tmp/unpackbootimg");
set_perm(0, 0, 0755, "/tmp/kexec");
set_perm(0, 0, 0755, "/tmp/kexec_append.sh");
set_progress(0.6);

ui_print("Unpack boot.img.");
run_program("/tmp/unpackbootimg", "-i", "/sdcard/boot.img", "-o", "/tmp");
set_progress(0.7);

ui_print("Load boot.img-zImage with boot.img-ramdisk.gz.");
run_program("/tmp/sh", "/tmp/kexec_append.sh", "--load-hardboot",
            "--mem-min=0xa0000000", "--initrd=/tmp/boot.img-ramdisk.gz",
            "/tmp/boot.img-zImage");
set_progress(0.9);

ui_print("Sync.");
run_program("/sbin/sync");
run_program("/system/bin/sync");
set_progress(1.0);

ui_print("Reboot into zImage.");
run_program("/tmp/kexec", "-e");
