procd: firstboot nand/ubi takeover support

it is now possible to flash a initramfs kernel and a sysupgrade tar file inside the ubi partition. on first boot, the takeover script will find the tar file, extract and finally sysupgrade it. this allows us to flash owrt/ubi images in a 2 phase setup using ODM webuis that are not ubi aware. this is needed by some mediatek and brokencom devices.

Signed-off-by: John Crispin <blogic@openwrt.org>

SVN-Revision: 43505
lede-17.01
John Crispin 2014-12-03 14:32:32 +00:00
parent 1e8a83e553
commit 68909fb081
2 changed files with 31 additions and 0 deletions

View File

@ -43,6 +43,13 @@ define Package/procd-nand
TITLE:=OpenWrt sysupgrade nand helper TITLE:=OpenWrt sysupgrade nand helper
endef endef
define Package/procd-nand-firstboot
SECTION:=utils
CATEGORY:=Utilities
DEPENDS:=procd-nand
TITLE:=OpenWrt firstboot nand helper
endef
define Package/procd/config define Package/procd/config
menu "Configuration" menu "Configuration"
depends on PACKAGE_procd depends on PACKAGE_procd
@ -85,5 +92,12 @@ define Package/procd-nand/install
$(INSTALL_DATA) ./files/nand.sh $(1)/lib/upgrade/ $(INSTALL_DATA) ./files/nand.sh $(1)/lib/upgrade/
endef endef
define Package/procd-nand-firstboot/install
$(INSTALL_DIR) $(1)/lib/preinit
$(INSTALL_DATA) ./files/nand-preinit.sh $(1)/lib/preinit/60-nand-firstboot.sh
endef
$(eval $(call BuildPackage,procd)) $(eval $(call BuildPackage,procd))
$(eval $(call BuildPackage,procd-nand)) $(eval $(call BuildPackage,procd-nand))
$(eval $(call BuildPackage,procd-nand-firstboot))

View File

@ -0,0 +1,17 @@
#!/bin/sh
# Copyright (C) 2014 OpenWrt.org
nand_takeover() {
. /lib/upgrade/nand.sh
mtd=$(find_mtd_index "$CI_UBIPART")
local file_type="$(identify $2)"
mtd -l 400 dump /dev/mtd$mtd > /tmp/takeover.hdr
MAGIC=$(dd if=/tmp/takeover.hdr bs=1 skip=261 count=5 2> /dev/null)
SIZE=$(printf "%d" 0x$(dd if=/tmp/takeover.hdr bs=4 count=1 2> /dev/null | hexdump -v -n 4 -e '1/1 "%02x"'))
[ "$MAGIC" = "ustar" ] && {
mtd -l $((SIZE + 4)) dump /dev/mtd$mtd | dd bs=1 skip=4 of=/tmp/sysupgrade.tar
nand_do_upgrade_stage2 /tmp/sysupgrade.tar
}
}
boot_hook_add initramfs nand_takeover