Closed Dylan-Slogrove closed 1 month ago
This was an interesting one. I've been looking into this the past couple hours.
Over the years, Google has used some different partition layouts on Pixel devices. I drew a diagram to illustrate the problem:
Prior to the Pixel 3, devices had separate partitions for everything. The OTAs contained individual images that were directly flashed to the partitions.
After the Pixel 3, devices have a single super
partition and dynamic partitions are created inside. When installing an OTA, Android will create the necessary dynamic partitions and then directly flash them using the individual images in the OTA.
However, with the Pixel 3, the device initially shipped with separate partitions and Google later switched to using dynamic partitions in an Android update. Since repartition a device is very risky, they instead took the existing separate system
and vendor
partitions and treat them as a combined "fake" super
partition. They call this layout "retrofitted dynamic partitions".
Since the OTAs distributed on Google's website are full OTAs, they need to work in every scenario. They need to be installable no matter if the device previously had the old or new partition layout. To handle that, instead of shipping individual images in the OTA, Google is shipping raw partition images to convert the device to the new "retrofitted" layout.
The error you get when running avbroot is a result of this. Unfortunately, I don't think it's feasible for me to add support for these Pixel 3 OTAs. avbroot is very much designed for "normal" OTAs that contain individual images. It would take a significant amount of work to support Pixel 3 OTAs.
Image obtained from here, last sargo build as per https://developers.google.com/android/ota#sargo
Using
avbroot-3.1.1-x86_64-unknown-linux-gnu
Log:
Unfortunately the log doesn't give me anything further to investigate myself