aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare
diff options
context:
space:
mode:
authorStefan Agner <stefan@agner.ch>2023-06-30 11:52:37 +0200
committerDavid Bauer <mail@david-bauer.net>2023-08-22 13:39:57 +0200
commit16aecc12c23235a38e7e09d45b2ceea6fd54a147 (patch)
tree1a44b834d633b7af49ddfbb7c401e54b5a38c81f /target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare
parent99d9519bacb5e7013271358e0d5358c196507040 (diff)
downloadupstream-16aecc12c23235a38e7e09d45b2ceea6fd54a147.tar.gz
upstream-16aecc12c23235a38e7e09d45b2ceea6fd54a147.tar.bz2
upstream-16aecc12c23235a38e7e09d45b2ceea6fd54a147.zip
mediatek: filogic: wax220: support factory image
Enable building a factory image which can be flashed through the OEM firmware's web interface. It seems that the web interface requires a minimum file size of 10MiB, otherwise it will not accept the image. The update image is a regular sysupgrade tarball packed in a Netgear encrypted image. The Netgear encrypted image is the same as used in WAX202 or WAX206, including the encryption keys and IV. This adds a script which creates the rootfs_data volume on first startup. This is required since the OEM firmware's sysupgrade scripts do not create such a paritition. Note that any script ordered after 70_initramfs_test will not get executed on initramfs. Hence this new script 75_rootfs_prepare won't create the rootfs_data volume when using the recovery initramfs. Also, this deletes the kernel_backup and rootfs_backup volumes in case we have to create the rootfs_data volumes. This makes sure that OpenWrt is the actual backup firmware instead of the stock firmware. References in WAX220 GPL source: https://www.downloads.netgear.com/files/GPL/WAX220-V1.0.2.8-gpl-src.tar.gz * package/base-files/files/lib/upgrade/nand.sh:186 Creation of rootfs_data is disabled * Uboot-upstream/board/mediatek/common/ubi_helper.c Automatic creation of UBI backup volumes Signed-off-by: Stefan Agner <stefan@agner.ch> (cherry picked from commit fa9d977f979461628161085dcd0e9dd8b9e2c66b)
Diffstat (limited to 'target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare')
-rw-r--r--target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare35
1 files changed, 35 insertions, 0 deletions
diff --git a/target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare b/target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare
new file mode 100644
index 0000000000..0a32073e0b
--- /dev/null
+++ b/target/linux/mediatek/filogic/base-files/lib/preinit/75_rootfs_prepare
@@ -0,0 +1,35 @@
+# SPDX-License-Identifier: GPL-2.0-or-later OR BSD-2-Clause
+
+rootfs_create() {
+ local blocks
+
+ blocks=$(cat /sys/class/ubi/ubi0/avail_eraseblocks)
+ [ -z "$blocks" ] && {
+ echo "Failed to read amount of available erase blocks" >&2
+ return
+ }
+
+ # Delete after getting available blocks: Make sure enough space is
+ # left to recreate these volumes.
+ ubirmvol /dev/ubi0 -N kernel_backup
+ ubirmvol /dev/ubi0 -N rootfs_backup
+
+ # Use 90% of remaining flash size for "rootfs_data"
+ ubimkvol /dev/ubi0 -n 20 -N rootfs_data --lebs $((blocks / 100 * 90))
+ mknod -m 0600 /dev/ubi0_20 c 250 21
+}
+
+rootfs_prepare() {
+ case $(board_name) in
+ netgear,wax220)
+ if ! ubinfo /dev/ubi0 -N rootfs_data &>/dev/null; then
+ echo "Creating \"rootfs_data\" UBI volume"
+ rootfs_create
+ fi
+ ;;
+ *)
+ ;;
+ esac
+}
+
+boot_hook_add preinit_main rootfs_prepare