Google Nexus 5X (lg-bullhead)
Nexus 5x | |
Manufacturer | Google (LG) |
---|---|
Name | Nexus 5X |
Codename | lg-bullhead |
Released | 2015 |
Type | handset |
Hardware | |
Chipset | Qualcomm Snapdragon 808 (MSM8992) |
CPU | 4x1.4 GHz Cortex-A53 & 2x1.8 GHz Cortex-A57 |
GPU | Adreno 418 |
Display | 1080x1920 IPS |
Storage | 16/32 GB |
Memory | 2 GB |
Architecture | aarch64 |
Software | |
Original software | Android |
Original version | 6.0 (Linux 3.10) |
postmarketOS | |
Category | testing |
Pre-built images | no |
Mainline | partial |
Unixbench Whet/Dhry score | 1273.5 |
Flashing |
Works |
---|---|
USB Networking |
Works |
Internal storage | |
SD card | |
Battery |
Works |
Screen |
Works |
Touchscreen |
Works |
Multimedia | |
3D Acceleration | |
Audio | |
Camera | |
Camera Flash | |
Connectivity | |
WiFi | |
Bluetooth | |
GPS | |
NFC | |
Modem | |
Calls | |
SMS | |
Mobile data | |
Miscellaneous | |
FDE | |
USB OTG |
Works |
HDMI/DP | |
Sensors | |
Accelerometer | |
Magnetometer | |
Ambient Light | |
Proximity | |
Hall Effect | |
Haptics | |
Barometer | |
Contributors
Users owning this device
- Adrian (Notes: Rev 1.0, unused)
- Chappo (Notes: MaruOS Installed, Daily Driver, Would prefer postmarketOS)
- Cherryband
- Dominduchami (Notes: rev_1.01)
- Ecloud
- EnderNightLord
- Haeckle
- IonAgorria (Notes: LineageOS - Boots but affected with big.LITTLE core cluster issue)
- Kcroot (Notes: I have 4 pieces, started build)
- MaryJohanna420 (Notes: Rev 1.0)
- Maxnet (Notes: rev_1.01)
- Nobodywasishere (Notes: I have 7 of these with half having bootlooping issues)
- Proycon
- Russanandres (Notes: Cyanogenmod 13)
- Simonschmeisser
- UnDevDeCatOS (Notes: mint condition, not bootlooping (yet?))
- WolfLink115
Unlocking
In android go to Settings→System→About Phone and tap the build number 7 times. Then go to Settings→System→Developer Options and enable OEM unlocking
Reboot to the bootloader and run "fastboot oem unlock" Now select Yes on the phone screen with the volume button and use the power button to accept.
No RPMB
If your device says SECURE BOOT: ENABLED (NO RPMB)
in the fastboot screen that means that the mainboard in your Nexus 5X is missing an image required by secureboot to function properly.
If this is missing then oem-unlocking won't work on the device. It will re-lock every reboot.
No fix is available yet, but there is way to at least install LineageOS to gain root for adb (phone reset persists, but it allows to read various proc/sysfs files which contain hardware info which are readable only for root - useful for mainlining).
NOTE: modified boot.img from XDA thread has been moved, also TWRP.
Modify boot.img
When trying to workaround the issue it's probably better to modify your boot.img
yourself (source code for mount flags description).
Official images can be downloaded from https://developers.google.com/android/images#bullhead.
$ wget -c https://dl.google.com/dl/android/aosp/bullhead-opm7.181205.001-factory-5f189d84.zip
$ unzip bullhead-opm7.181205.001-factory-5f189d84.zip && cd bullhead-opm7.181205.001/
$ unzip image-bullhead-opm7.181205.001.zip
$ abootimg -x boot.img
$ mkdir initrd && cd initrd
$ zcat ../initrd.img | cpio -idmv --no-absolute-filenames
$ vi fstab.bullhead
To disable dm-verity remove verify=
parameter in /system
and /vendor
:
-/dev/block/platform/soc.0/f9824900.sdhci/by-name/system /system ext4 ro,barrier=1,inode_readahead_blks=8 wait,verify=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
-/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor /vendor ext4 ro,barrier=1,inode_readahead_blks=8 wait,verify=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
+/dev/block/platform/soc.0/f9824900.sdhci/by-name/system /system ext4 ro,barrier=1,inode_readahead_blks=8 wait,
+/dev/block/platform/soc.0/f9824900.sdhci/by-name/vendor /vendor ext4 ro,barrier=1,inode_readahead_blks=8 wait,
To disable forced encryption change forcefdeorfbe=
to encryptable=
(source):
-/dev/block/platform/soc.0/f9824900.sdhci/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic,inode_readahead_blks=8 wait,check,forcefdeorfbe=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
+/dev/block/platform/soc.0/f9824900.sdhci/by-name/userdata /data ext4 noatime,nosuid,nodev,barrier=1,data=ordered,nomblk_io_submit,noauto_da_alloc,errors=panic,inode_readahead_blks=8 wait,check,encryptable=/dev/block/platform/soc.0/f9824900.sdhci/by-name/metadata
Repack boot.img (and continue according to the article):
$ find . | cpio -o -H newc | gzip > ../initrd.img # repack intird.img after edit
$ cd ..
$ abootimg --create boot.img -f bootimg.cfg -k zImage -r initrd.img # if "too big for the Boot Image" add: -c "bootsize=size-in-error-bootsize"
Special key combos
Boot to bootloader: hold Volume Down + Power until the screen turns on.
Launch recovery: first boot to the bootloader, press the Volume Down button twice and press the Power button to select
Install postmarketOS
Go to bootloader then connect the device to the PC then run this commands one by one.
$ pmbootstrap init
$ pmbootstrap install
$ pmbootstrap flasher flash_rootfs --partition userdata
$ pmbootstrap flasher flash_kernel
Now select start from the menu in the bootloader screen. Reboot again if you don't see anything in the screen after postmarketOS logo
Get your hardware revision
Retrieve it from a running system by running:
$ xxd /sys/firmware/devicetree/base/qcom,board-id # Output e.g.: 00000000: 0000 0b64 0000 0000 ...d....
Compare the identifier with the ones listed in msm8992-bullhead-rev-X.dts and find which one matched your number to retrieve your hardware revision. The example output would match revision 1.01.
Note: the above information is ambiguous. On an unmodified device, try fastboot:
$ fastboot getvar version-hardware #Output, e.g.: version-hardware: rev_1.0
Alternatively, in fastboot
mode, just check the device console:
hw version rev_1.0
.
This device (final build number, OPM07) is apparently revision 1.0, but via adb shell
the output matches that given above (note the different target file, as the sys entry above does not exist),
$ xxd /proc/device-tree/qcom,board-id # Output e.g.: 00000000: 0000 0b64 0000 0000 ...d....
Mainline Kernel Status
The current mainline Linux only supports Nexus 5X rev 1.01, but upcoming 5.18 will contain also rev 1.0 – cd4bd4704ec8 ("arm64: dts: qcom: msm8992-lg-bullhead: Add support for LG Bullhead rev 1.0").
Status | Hardware | Info |
---|---|---|
Y | Power Management | Uses Qualcomm's PM8994 controller, works since 4.11 (doc) |
Touch Screen | No driver in mainline tree. | |
DSI Panel | Out-of-tree driver[1] generated using linux-mdss-dsi-panel-driver-generator. Untested | |
USB Gadget/OTG | No DT binding. | |
Y | SDHCI | Mainline driver since 4.17, properly enabled since 5.9 – c83e0951bcad ("arm64: dts: qcom: msm8992: Fix SDHCI1") |
Wi-Fi | Qualcomm QCA6174. Driver exists in mainline. | |
Y | GPIO keys | No DT bindings. |
Bluetooth | Qualcomm QCA6174. Driver exists in mainline. | |
Sound | Qualcomm WCD9330, no driver in mainline. | |
Light Sensor | Rohm RPR0521. Driver exists in mainline. | |
Sixaxis | Bosch BMI160. Driver exists in mainline. | |
Camera | Sony IMX377. No driver in mainline. | |
GPU | Qualcomm Adreno 418, needs DT bindings. | |
Modem | Qualcomm WTR3925. No driver in mainline. | |
Fingerprint | FPC1020, supported by this driver:https://github.com/SanniZ/fpc1020-driver. Needs DT bindings. |
Firmware
Here is the official Google page to download GPS, Audio, Camera, Gestures, Graphics, DRM, Video, Sensors firware blob. /developers.google
Mainlining
The Linux mainline kernel has very basic support for this phone since November 2016 (one cpu and uart). In kernel 4.18 was added support for SDHCI1 and pstore-ramoops. Further fixes has been added later (in SDHC1, PSCI and cleanup in 5.9, overlay msm8994 as hardware is very similar and update regulator config in 5.12, overlay and PSCI broke booting, which got fixed in 5.14. Upcoming 5.18 will add rev 1.0 support (currently is supported only 1.01).
Currently it's possible to use mainline kernel via close to mainline kernel linux-postmarketos-qcom-msm8994 package (added in pmaports!2654) – alternative to downstream kernel (only basic hardware support).
For further hacking on mainline kernel compiling with envkernel.sh is recommended.
To see serial console output add kernel parameter console=ttyMSM0,115200,n8
.
Update the boot.img to include your local kernel
$ cp "/tmp/postmarketOS-export/boot.img-lg-bullhead" "$TEMP/boot.img"
$ cd .output/arch/arm64/boot/
$ cat Image.gz dts/qcom/msm8992-bullhead-rev-101.dtb > "$TEMP/zImage-dtb"
$ pmbootstrap chroot -- abootimg -u /tmp/mainline/boot.img -k /tmp/mainline/zImage-dtb
$ pmbootstrap flasher list_devices
You can communicate with the device using screen
(or other software, e.g. minicom
), so in a separate terminal start it:
$ screen /dev/ttyUSB0 115200
Boot your mobile to the bootloader (power + vol down) and you should see some debug output on the screen.
Boot the kernel using fastboot
$ pmbootstrap chroot -- fastboot boot /tmp/mainline/boot.img
Hardware status / details (downstream kernel, SKU LGH790, rev_1.0)
Note that xfce4 ui on this device boots to black screen, but usb networking is available.
Output of sensors
(lm-sensors package):
sensors output
bms-virtual-0 Adapter: Virtual device temp1: +28.7 C battery-virtual-0 Adapter: Virtual device temp1: +28.7 C tsens_tz_sensor0-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor1-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor2-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor3-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor4-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor5-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor7-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor9-virtual-0 Adapter: Virtual device temp1: +0.1 C tsens_tz_sensor10-virtual-0 Adapter: Virtual device temp1: +0.1 C tsens_tz_sensor11-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor12-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor13-virtual-0 Adapter: Virtual device temp1: +0.0 C tsens_tz_sensor14-virtual-0 Adapter: Virtual device temp1: +0.0 C pm8994_tz-virtual-0 Adapter: Virtual device temp1: +36.5 C (crit = +145.0 C) msm_therm-virtual-0 Adapter: Virtual device temp1: -0.0 C emmc_therm-virtual-0 Adapter: Virtual device temp1: -0.0 C pa_therm0-virtual-0 Adapter: Virtual device temp1: +0.0 C THRM_57-0-virtual-0 Adapter: Virtual device temp1: +0.0 C THRM_57-1-virtual-0 Adapter: Virtual device temp1: +0.0 C THRM_53-0-virtual-0 Adapter: Virtual device temp1: +0.0 C THRM_53-1-virtual-0 Adapter: Virtual device temp1: +0.0 C THRM_53-2-virtual-0 Adapter: Virtual device temp1: +0.0 C THRM_53-3-virtual-0 Adapter: Virtual device temp1: +0.0 C
CPU tuning
The default deviceinfo defines boot_cpus=0-3 maxcpus=4
, forcing the 2xA57 cores offline. A naive tuning attempt based on oneplus-oneplus2 seems to bring the A57 cores online - but unused. ubench
still only recognizes "4 CPUs", and scores are unchanged (compare with much higher MSM8992 xiaomi-libra scores).
Monitor temperatures via sensors
or sys-tool
(lm-sensors package), (though most values may be null / disabled / 0); systool -v -c [hwmon|thermal]
may be more complete.
When mainline is available, try tmon
(linux-tools-tmon).
Photos
Links
- Device package
- Kernel package (downstream)
- Kernel package (close to mainline kernel – alternative to downstream kernel, only basic hardware support), added in pmaports!2654
- !1222 initial MR
- #1703 showing black screen after pmos logo in xfce DE
- Intial porting for the Nexus 5X
- Device Teardown
- Mainline DTS – msm8992-lg-bullhead-rev-10.dts
- Mainline DTS – msm8992-lg-bullhead-rev-101.dts
- Downstream DTS
- Google Nexus 6P (huawei-angler) – similar device