From efab009a1f8af1352596c9861e42a251f5f11a70 Mon Sep 17 00:00:00 2001 From: Oliver Smith Date: Mon, 10 Jul 2017 20:17:31 +0200 Subject: [PATCH] deviceinfo: add heimdall partitions / make flasher variables optional --- aports/device-samsung-i9070/APKBUILD | 4 +-- aports/device-samsung-i9070/deviceinfo | 4 +++ aports/device-samsung-i9100/APKBUILD | 4 +-- aports/device-samsung-i9100/deviceinfo | 4 +++ aports/heimdall/APKBUILD | 4 +-- aports/heimdall/heimdall_flash_kernel.sh | 31 ++++++++++------- pmb/config/__init__.py | 43 ++++++++++++++++++++++-- pmb/flasher/run.py | 10 ++---- pmb/parse/deviceinfo.py | 7 ++++ 9 files changed, 84 insertions(+), 27 deletions(-) diff --git a/aports/device-samsung-i9070/APKBUILD b/aports/device-samsung-i9070/APKBUILD index 74a00624..a95deed6 100644 --- a/aports/device-samsung-i9070/APKBUILD +++ b/aports/device-samsung-i9070/APKBUILD @@ -1,6 +1,6 @@ pkgname=device-samsung-i9070 pkgver=1 -pkgrel=5 +pkgrel=6 pkgdesc="Samsung Galaxy S Advance" url="https://github.com/postmarketOS" arch="noarch" @@ -32,7 +32,7 @@ package() { "$pkgdir"/etc/modules-load.d/00-${pkgname}.conf } -sha512sums="a76e09953981b0610f42b94acc9b3e2d1dc5a8993b0d4bec32b3704359bba04efbc22576001c7d490234634a8805ac5109d4ab28b5d52a578df1b6dbdaff18c6 deviceinfo +sha512sums="aa23264c03aba01e573bb427f0f14d8b3c5f2cbdc7402ec763aa6da85d9c13d55cc4d596b2df3845c04c1f5784a13aa41bbe0449cbc44483c7cfc165b4c05292 deviceinfo 098187f6ab56d2542f98f1b5fbcf493431f665a4300db05e859357366e39b02a3d508bfd94c1d1bd7c669261e7ef0d4e1aef1fdbb15541fe34f3f48a6caa247f initfs-hook.sh ffa8ba47539f0b4a931c560811d7842c7f5270631066c270322859c1ef77e63fba09a8462c2533bd6d095056b2c7936c2d4fc4e225f3cff45169f121bf93d8ed 90-android.rules 61e8becbf6fa7c1c6c42e481083f5981ae7af33a48cbc53e817d8ac2c6a8e4f67a54b32ae3b8f5f25f7b412165a849dc93a629110dc47b0d16927bf2a12eb7e1 modules-load.conf" diff --git a/aports/device-samsung-i9070/deviceinfo b/aports/device-samsung-i9070/deviceinfo index 033a7de6..df11c4c1 100644 --- a/aports/device-samsung-i9070/deviceinfo +++ b/aports/device-samsung-i9070/deviceinfo @@ -13,3 +13,7 @@ deviceinfo_external_disk="true" deviceinfo_external_disk_install="true" deviceinfo_flash_methods="heimdall" deviceinfo_arch="armhf" + +# Heimdall related +deviceinfo_flash_heimdall_partition_kernel="Kernel" +deviceinfo_flash_heimdall_partition_initfs="Kernel2" diff --git a/aports/device-samsung-i9100/APKBUILD b/aports/device-samsung-i9100/APKBUILD index 1ef1292a..0c8c1bb3 100644 --- a/aports/device-samsung-i9100/APKBUILD +++ b/aports/device-samsung-i9100/APKBUILD @@ -1,6 +1,6 @@ pkgname=device-samsung-i9100 pkgver=1 -pkgrel=4 +pkgrel=5 pkgdesc="Samsung Galaxy SII" url="https://github.com/postmarketOS" arch="noarch" @@ -23,5 +23,5 @@ package() { "$pkgdir"/etc/udev/rules.d/90-android.rules } -sha512sums="9ee793403f5a8789470073cb2be21b6ba12dc021530ca61b0fdc45bb903df020dba4099b93d8c922eb7f91f78888e19ac856c5baaffd23ecd81a2033b3c4ddde deviceinfo +sha512sums="7d57cbeeb4d35c5e3ea865175b781eebf88508893607b1be883c615f56bb69eb73a979d97e698d1938fcc226e3836d1f7210e9d09bad0ad66671cba5faa37cdc deviceinfo 8aead706ddb118a44de7d049f07d10a27e727d17724058d132e4ec4fa73fed29c9ccfe03f02aca459c922ec0fbba24e171fe3c76e33f7c5462631e3dd5506e36 90-android.rules" diff --git a/aports/device-samsung-i9100/deviceinfo b/aports/device-samsung-i9100/deviceinfo index 23416a01..14ba2c06 100644 --- a/aports/device-samsung-i9100/deviceinfo +++ b/aports/device-samsung-i9100/deviceinfo @@ -13,3 +13,7 @@ deviceinfo_external_disk="true" deviceinfo_external_disk_install="true" deviceinfo_flash_methods="heimdall" deviceinfo_arch="armhf" + +# Heimdall related +deviceinfo_flash_heimdall_partition_kernel="KERNEL" +deviceinfo_flash_heimdall_partition_initfs="RECOVERY" diff --git a/aports/heimdall/APKBUILD b/aports/heimdall/APKBUILD index b2f69955..dc0ce7d3 100644 --- a/aports/heimdall/APKBUILD +++ b/aports/heimdall/APKBUILD @@ -1,6 +1,6 @@ pkgname=heimdall pkgver=1.4.2 -pkgrel=1 +pkgrel=2 pkgdesc="Flasher for Samsung Galaxy S devices" url="https://github.com/Benjamin-Dobell/Heimdall" arch="all" @@ -26,5 +26,5 @@ package() { } sha512sums="c554662f9ccb763a8e9867a0c563618879d2533af985d44db3c237d3ee51add44c1681d13b1a83b72b30ba6e5b32d7c2f9c02b31114c67c5fbe01cbb010acfe7 heimdall-1.4.2.tar.gz -a75677d4c5559bf8233a48d1b38bf91e4125717a85e1ea6d283d2d1e052c2a96228818a71f8b90adbda049b6d5b5065f7265ffc2e05cafd2ce9717bfc8ac8716 heimdall_flash_kernel.sh +49573b44c0b6526ec3367d9e0c5fb727f01030f116aaaebe49ae05400923c04ffddd4a688bc15af981f8777ebb0e6b0a818b2b19b7c2917c3ac82a351a85ffa8 heimdall_flash_kernel.sh 45e742bb3a8c8d0bc6806a4e9f860b04f255cad72a8602c04759178284c66e0a90d3ea22249b5fa69de1dd1d6ecd6221adaa63d611aa20d2a54aa20868e86a9f heimdall_wait_for_device.sh" diff --git a/aports/heimdall/heimdall_flash_kernel.sh b/aports/heimdall/heimdall_flash_kernel.sh index 8da05165..d046ae8d 100644 --- a/aports/heimdall/heimdall_flash_kernel.sh +++ b/aports/heimdall/heimdall_flash_kernel.sh @@ -3,31 +3,38 @@ set -e usage() { - echo "Flash an initramfs file to the recovery partition, and flash a kernel." + echo "Flash initramfs and kernel to separate partitions." echo "The kernel needs to have its own minimal initramfs, that loads the" - echo "real initramfs from the recovery partition (\"isorec\")." + echo "real initramfs from the other partition (\"isorec\")." echo "" - echo "Usage: $(basename "$0") " + echo "Usage: $(basename "$0") " exit 1 } # Sanity checks -[ "$#" != 2 ] && usage -INITRAMFS="$1" -KERNEL="$2" -for file in "$INITRAMFS" "$KERNEL"; do +[ "$#" != 4 ] && usage +INITFS="$1" +INITFS_PARTITION="$2" +KERNEL="$3" +KERNEL_PARTITION="$4" +for file in "$INITFS" "$KERNEL"; do [ -e "$file" ] && continue echo "ERROR: File $file does not exist!" exit 1 done -echo "(1/2) flash initramfs to recovery partition (isorec-style)" +echo "(1/2) Flash initramfs to the '$INITFS_PARTITION' partition (isorec-style)" heimdall_wait_for_device.sh -gunzip -c "$INITRAMFS" | lzop > /tmp/initramfs.lzo -heimdall flash --RECOVERY /tmp/initramfs.lzo +gunzip -c "$INITFS" | lzop > /tmp/initramfs.lzo +heimdall flash --"$INITFS_PARTITION" /tmp/initramfs.lzo rm /tmp/initramfs.lzo +# Sleeping is necessary here, because when directly connecting again, the +# flashing of the kernel has always failed (at least on the i9100). +echo "Sleeping for 20 seconds..." sleep 20 -echo "(2/2) flash kernel (hit ^C if you only wanted to flash initramfs)" + +echo "(2/2) Flash kernel to the '$KERNEL_PARTITION' partition" +echo "NOTE: Press ^C if you only wanted to flash the initramfs." heimdall_wait_for_device.sh -heimdall flash --KERNEL "$KERNEL" +heimdall flash --"$KERNEL_PARTITION" "$KERNEL" diff --git a/pmb/config/__init__.py b/pmb/config/__init__.py index 0b333231..7440bc15 100644 --- a/pmb/config/__init__.py +++ b/pmb/config/__init__.py @@ -125,6 +125,11 @@ build_packages = ["abuild", "build-base", "ccache"] # the native chroot and a cross-compiler, without using distcc build_cross_native = ["linux-*"] + +# +# PARSE +# + # Variables in APKBUILD files, that get parsed apkbuild_attributes = { "arch": {"array": True}, @@ -149,6 +154,39 @@ apkbuild_attributes = { "_llvmver": {"array": False}, } +# Variables from deviceinfo. Reference: +deviceinfo_attributes = [ + # device + "format_version", + "name", + "manufacturer", + "date", + "keyboard", + "nonfree", + "dtb", + "modules_initfs", + "external_disk", + "external_disk_install", + "flash_methods", + "arch", + + # flash + "generate_bootimg", + "generate_legacy_uboot_initfs", + "flash_heimdall_partition_initfs", + "flash_heimdall_partition_kernel", + "flash_offset_base", + "flash_offset_kernel", + "flash_offset_ramdisk", + "flash_offset_second", + "flash_offset_tags", + "flash_pagesize", + "kernel_cmdline", + + # weston + "weston_pixman_type", +] + # # INITFS # @@ -201,6 +239,7 @@ $IMAGE: Path to the system partition image $KERNEL_CMDLINE: Kernel commandline Fastboot specific: $OFFSET_KERNEL, $OFFSET_RAMDISK, $OFFSET_TAGS, $PAGE_SIZE +Heimdall specific: $PARTITION_KERNEL, $PARTITION_INITFS """ flashers = { "fastboot": { @@ -228,8 +267,8 @@ flashers = { ["heimdall_wait_for_device.sh"], ["heimdall", "flash", "--SYSTEM", "$IMAGE"]], "flash_kernel": [["heimdall_flash_kernel.sh", - "$BOOT/initramfs-$FLAVOR", - "$BOOT/vmlinuz-$FLAVOR"]] + "$BOOT/initramfs-$FLAVOR", "$PARTITION_INITFS", + "$BOOT/vmlinuz-$FLAVOR", "$PARTITION_KERNEL"]] }, }, } diff --git a/pmb/flasher/run.py b/pmb/flasher/run.py index 286ff91d..37958770 100644 --- a/pmb/flasher/run.py +++ b/pmb/flasher/run.py @@ -30,23 +30,19 @@ def run(args, action, flavor=None): raise RuntimeError("action " + action + " is not" " configured for method " + method + "!") - # Kernel commandline is optional - # Optional variables - cmdline = "" - if "kernel_cmdline" in args.deviceinfo: - cmdline = args.deviceinfo["kernel_cmdline"] - # Variable setup vars = { "$BOOT": "/mnt/rootfs_" + args.device + "/boot", "$FLAVOR": flavor if flavor is not None else "", "$IMAGE": "/home/user/rootfs/" + args.device + ".img", - "$KERNEL_CMDLINE": cmdline, + "$KERNEL_CMDLINE": args.deviceinfo["kernel_cmdline"], "$OFFSET_KERNEL": args.deviceinfo["flash_offset_kernel"], "$OFFSET_RAMDISK": args.deviceinfo["flash_offset_ramdisk"], "$OFFSET_SECOND": args.deviceinfo["flash_offset_second"], "$OFFSET_TAGS": args.deviceinfo["flash_offset_tags"], "$PAGE_SIZE": args.deviceinfo["flash_pagesize"], + "$PARTITION_INITFS": args.deviceinfo["flash_heimdall_partition_initfs"], + "$PARTITION_KERNEL": args.deviceinfo["flash_heimdall_partition_kernel"], } # Run the commands of each action diff --git a/pmb/parse/deviceinfo.py b/pmb/parse/deviceinfo.py index d54fdf46..201d9e53 100644 --- a/pmb/parse/deviceinfo.py +++ b/pmb/parse/deviceinfo.py @@ -18,6 +18,7 @@ along with pmbootstrap. If not, see . """ import logging import os +import pmb.config def deviceinfo(args, device=None): @@ -48,4 +49,10 @@ def deviceinfo(args, device=None): key = split[0][len("deviceinfo_"):] value = split[1].replace("\"", "").replace("\n", "") ret[key] = value + + # Assign empty string as default + for key in pmb.config.deviceinfo_attributes: + if key not in ret: + ret[key] = "" + return ret