Jump to content

Google Pixel (google-pixel): Difference between revisions

From postmarketOS Wiki
Ojbr (talk | contribs)
Serial debugging
Wiktorpyk6 (talk | contribs)
No edit summary
 
(35 intermediate revisions by 8 users not shown)
Line 1: Line 1:
[[Category:Not booting]]
<!--
Will upload this image soon!
| image = File:CHANGE_ME_TO_DEVICE_CODENAME.jpg
| imagecaption = CHANGE_ME
-->
{{Infobox device
{{Infobox device
| manufacturer = Google
| manufacturer = Google
| name = Pixel
| name = Pixel
| codename = sailfish, marlin
| codename = google-pixel
| image = File:Sailfish.jpg
| imagecaption = Google Pixel
| releaseyear = 2016
| releaseyear = 2016
| originalsoftware = Android 7.1 (Nougat)
| originalsoftware = Android
| chipset = Qualcomm MSM8996 Snapdragon 821
| originalversion = 7.1
| cpu = Quad-core (2x2.15 GHz Kryo & 2x1.6 GHz Kryo)
| extendedversion = 10
| chipset = Qualcomm Snapdragon 821 (MSM8996Pro)
| cpu = Quad-core (2x 2.15 GHz Kryo & 2x 1.6 GHz Kryo)
| gpu = Adreno 530
| gpu = Adreno 530
| storage = 32/128GB
| storage = 32/128 GB
| display = 5.0 inch AMOLED capacitive multi-touch screen, 1280x1920
| display = 1080×1920 AMOLED
| memory = 4GB Dual Channel LPDDR4
| memory = 4 GB Dual Channel LPDDR4
| architecture = aarch64
| type = handset
| status_usbnet =
| status_flashing =
| status_touch =
| status_screen =
| status_wifi =
| status_xwayland =
| status_fde =
| status_mainline =
| status_battery =
| status_3d =
| status_accel =
| status_audio =
| status_bluetooth =
| status_camera =
| status_gps =
| status_mobiledata =
| status_sms =
| status_calls =
| status = Kernel compiles, panics on boot
| booting = no
}}
}}


== Contributors ==
== Contributors ==
* [https://gitlab.com/ojbr Oliver 'ojbr' Brammer]
* [https://gitlab.com/ojbr ojbr]
* [https://gitlab.com/steamport steamport]


== Maintainer(s) ==
=== Maintainers ===
* [mailto:oliver@octo.im Oliver 'ojbr' Brammer]
-


<!-- Only if this device doesn't run on linux-postmarketos yet! -->
== Pixel / Pixel XL ==
<!-- This person needs to be willing to answer questions from users of this device -->


== Note on device codenames and compatibility ==
The Pixel (sailfish) and Pixel XL (marlin) share identical kernel architectures. This port should work for both devices.


The sailfish variant of the Google Pixel shares the same kernel builds as the Pixel XL (marlin). Therefore, anything here referencing sailfish should also be relevant to marlin.
=== Device Owners ===
{{Device owners}}


== What works ==
== What works ==


TLDR;
* Kernel compilation
* Flashing
* Booting kernel (partial boot with serial logging - panics / halts)
 
== What does not work ==
 
* SSH over USB
* Touch
* Screen
* WiFi
* Bluetooth
* Camera
* GPS
* Modem


* Nothing
== Development Notes ==


Installation using normal measures does not successfully boot. This is likely due to the fact that the Google Pixel's fastboot has two boot slots (A and B).
=== Partition Layout ===
What this effectively means is that fastboot allows you to dual boot. That's nice and all, but it's annoying. What we will likely have to do is flash via TWRP. Needs more investigation.


== What does not work ==
Out of the box, the Google Pixel uses an A/B partition layout. Both slots are known working. Should you need to change slots, this can be done with:
<pre>
<nowiki>#fastboot set_active a
#fastboot reboot bootloader</nowiki>
</pre>
 
<pre>
~#: fdisk -l /dev/block/sda


Watch this space.


== How to enter flash mode ==
bootlocker_a    bootlocker_b
keymaster_a    keymaster_b
tz_a            tz_b
rpm_a          rpm_b
pmic_a          pmic_b
hyp_a          hyp_b
cmnlib32_a      cmnlib32_b
cmnlib64_a      cmnlib64_b
aboot_a        aboot_b
hosd_a          hosd_b
devcfg_a        devcfg_b
modem_a        modem_b
msadp_a        msadp_b
apdp_a          apdp_b
vendor_a        vendor_b
system_a        system_b
userdata
reserve0
</pre>


It is required that the device is '''cell carrier unlocked''' before attempting to perform an OEM unlock using fastboot.
== Bootloader Unlocking ==
 
The bootloader can be unlocked once the device has been unlocked by the cell carrier. An unlock code is usually obtained from your network provider directly, or from a third party.
Be aware, a bootloader unlock will erase all userdata. Make sure to keep a backup of any important data.


* Enter fastboot by shutting down the device, and hold volume down + power until you see the fastboot screen.
* Enter fastboot by shutting down the device, and hold volume down + power until you see the fastboot screen.
* Depending on the phone's previous sleep state, you may be alerted that a RAM dump is in progress. Ignore these, keep holding the buttons until you end up in fastboot.
* Depending on the phone's previous sleep state, you may be alerted that a RAM dump is in progress. Ignore these, keep holding the buttons until you end up in fastboot.


Once cell unlocked, you must OEM unlock from fastboot through the standard command:
The standard OEM unlock command can then be be used:
<pre>
<pre>
<nowiki>#fastboot oem unlock</nowiki>
<nowiki>#fastboot oem unlock</nowiki>
</pre>
</pre>


Be sure that you are using fastboot slot A. If you need to change slots, perform:
At this point, you should be ready to test pmOS deployments.
<pre>
 
<nowiki>#fastboot set_active a
=== Backup with TWRP ===
#fastboot reboot bootloader</nowiki>
Take precaution, and keep backups if this is your primary device.
</pre>


At this point, you should be ready to test pmOS deployments.
* [https://twrp.me/google/googlepixel.html Download the latest TWRP (both img and zip)]
* From the TWRP directory, run the fastboot command: <pre>#fastboot boot <nowiki><your-twrp.img></nowiki></pre>
* At this point, TWRP will load
* Take your backup, note this does not include the user data directory. You need to copy that over with MTP as well.


== Installation ==
== Installation ==


More details to this section are coming soon.
=== Boot Only ===
<!-- add more sections below as necessary, e.g. Wifi, photos, ... -->
=== Untested steps ===


Take precaution here, and keep backups. This section is all theoretical and has not been tested as of writing.
The device is capable of sideloading a boot.img over USB with fastboot. The standard command in pmOS works:


* [https://twrp.me/google/googlepixel.html Download the latest TWRP (both img and zip)]
* From the TWRP directory, run the fastboot command: <pre>#fastboot boot <nowiki><your-twrp.img></nowiki></pre>
* At this point, TWRP will load
* Be sure that slot A is active before continuing:
<pre><nowiki>
<pre><nowiki>
#fastboot set_active a
# pmbootstrap flasher boot
#fastboot reboot bootloader
#fastboot reboot recovery
</nowiki></pre>
</nowiki></pre>


== Serial Debugging ==
=== Flashing ===


Sounds like this is possible, given kernel has serial debugging enabled.
<pre><nowiki>
# fastboot set_active a
# fastboot reboot bootloader
# pmbootstrap flasher flash_rootfs
# pmbootstrap flasher flash_kernel
# fastboot reboot
</nowiki></pre>


http://www.viruss.eu/malware/practical-android-debugging-via-kgdb/
== Debugging ==


Should also be possible with a [[Serial debugging|Nexus Serial debug cable]]. Awaiting a parts delivery for this.
=== Kernel Logging via Serial ===


Must be enabled via fastboot first:
It is possible to debug the Pixel/Pixel XL with a standard [[Serial debugging|Nexus Serial debug cable]]. This must be enabled in fastboot first:
<pre>
<pre>
fastboot oem uart enable
# fastboot oem uart enable
</pre>
</pre>


== To Do List ==
The baud rate is 115200.


=== Doing ===
== Troubleshooting ==


* [ojbr] - Investigate serial debugging. Obtained a USB FTDI device, just need to hack together a 3.5mm TRRS cable
==== Unable to mount rootfs ====


=== Backlog ===
When running from a vendor kernel, Android is configured to skip loading with an initramfs. For postmarketOS to boot, the offending change would have to be removed with a [https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/66/diffs?commit_id=b6a70454d1e999678fe8d770ed3d59bd28da8549 patch].


* Re-enable LZMA kernel image compression, add via makedepends
Without the patch, the rootfs will fail to mount:
* Test device flashing using fastboot
<pre>
* Investigate Kernel upgrade path to 4.X where MSM8996 has better support in mainline
[  14.025620] No filesystem could mount root, tried:  ext3 ext2 ext4 vfat msdos fuseblk
[  14.033436] c2      1 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
</pre>
 
==== Firmware image not available ====
 
Proprietary [https://developers.google.com/android/drivers#sailfish vendor drivers] are missing, and will need to be built into the resulting boot image.
 
<pre>
[TP]: [ERR]:fwu_start_reflash: Firmware image synaptics_bl71.img not available
</pre>


== See also ==
== See also ==
* [https://gitlab.com/ojbr/pmbootstrap/tree/wip-google-pixel ojbr's postmarketOS google-pixel fork on GitLab]
* TBC
 
<!--
<!--
Link to related GitHub issues or pull requests like the following (replace CHANGEME with the ID, e.g. 1234):
Link to related GitHub issues or pull requests like the following (replace CHANGEME with the ID, e.g. 1234):

Latest revision as of 09:55, 14 March 2025

This device is marked as not booting.
Status: Kernel compiles, panics on boot
Google Pixel
Google Pixel
Google Pixel
Manufacturer Google
Name Pixel
Codename google-pixel
Released 2016
Type handset
Hardware
Chipset Qualcomm Snapdragon 821 (MSM8996Pro)
CPU Quad-core (2x 2.15 GHz Kryo & 2x 1.6 GHz Kryo)
GPU Adreno 530
Display 1080×1920 AMOLED
Storage 32/128 GB
Memory 4 GB Dual Channel LPDDR4
Architecture aarch64
Software
Original software Android
Original version 7.1
Extended version 10
postmarketOS
Category testing
Pre-built images no


Contributors

Maintainers

-

Pixel / Pixel XL

The Pixel (sailfish) and Pixel XL (marlin) share identical kernel architectures. This port should work for both devices.

Device Owners


What works

  • Kernel compilation
  • Flashing
  • Booting kernel (partial boot with serial logging - panics / halts)

What does not work

  • SSH over USB
  • Touch
  • Screen
  • WiFi
  • Bluetooth
  • Camera
  • GPS
  • Modem

Development Notes

Partition Layout

Out of the box, the Google Pixel uses an A/B partition layout. Both slots are known working. Should you need to change slots, this can be done with:

#fastboot set_active a
#fastboot reboot bootloader
~#: fdisk -l /dev/block/sda


bootlocker_a    bootlocker_b
keymaster_a     keymaster_b
tz_a            tz_b
rpm_a           rpm_b
pmic_a          pmic_b
hyp_a           hyp_b
cmnlib32_a      cmnlib32_b
cmnlib64_a      cmnlib64_b
aboot_a         aboot_b
hosd_a          hosd_b
devcfg_a        devcfg_b
modem_a         modem_b
msadp_a         msadp_b
apdp_a          apdp_b
vendor_a        vendor_b
system_a        system_b
userdata
reserve0

Bootloader Unlocking

The bootloader can be unlocked once the device has been unlocked by the cell carrier. An unlock code is usually obtained from your network provider directly, or from a third party. Be aware, a bootloader unlock will erase all userdata. Make sure to keep a backup of any important data.

  • Enter fastboot by shutting down the device, and hold volume down + power until you see the fastboot screen.
  • Depending on the phone's previous sleep state, you may be alerted that a RAM dump is in progress. Ignore these, keep holding the buttons until you end up in fastboot.

The standard OEM unlock command can then be be used:

#fastboot oem unlock

At this point, you should be ready to test pmOS deployments.

Backup with TWRP

Take precaution, and keep backups if this is your primary device.

  • Download the latest TWRP (both img and zip)
  • From the TWRP directory, run the fastboot command:
    #fastboot boot <your-twrp.img>
  • At this point, TWRP will load
  • Take your backup, note this does not include the user data directory. You need to copy that over with MTP as well.

Installation

Boot Only

The device is capable of sideloading a boot.img over USB with fastboot. The standard command in pmOS works:

# pmbootstrap flasher boot

Flashing

# fastboot set_active a
# fastboot reboot bootloader
# pmbootstrap flasher flash_rootfs
# pmbootstrap flasher flash_kernel
# fastboot reboot

Debugging

Kernel Logging via Serial

It is possible to debug the Pixel/Pixel XL with a standard Nexus Serial debug cable. This must be enabled in fastboot first:

# fastboot oem uart enable

The baud rate is 115200.

Troubleshooting

Unable to mount rootfs

When running from a vendor kernel, Android is configured to skip loading with an initramfs. For postmarketOS to boot, the offending change would have to be removed with a patch.

Without the patch, the rootfs will fail to mount:

[   14.025620] No filesystem could mount root, tried:  ext3 ext2 ext4 vfat msdos fuseblk
[   14.033436] c2      1 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)

Firmware image not available

Proprietary vendor drivers are missing, and will need to be built into the resulting boot image.

[TP]: [ERR]:fwu_start_reflash: Firmware image synaptics_bl71.img not available

See also

  • TBC