Consumer tablets often pack awesome hardware into polished, portable packages—and often provide all of the hardware necessary to make compelling platforms for ARM development. Unfortunately, most tablets don't make good development platforms: even tablets with unlocked bootloaders often lock you out of hardware features such as hypervisor modes and lack documentation on their bootloaders and debug interfaces.
A few months ago, I spent some time looking for a consumer tablet that allows out-of-the-box use of the ARM Virtualization Extensions, hoping to find a good demonstration platform for some mobile security research. A friend at Google pointed me to their Pixel C tablet, an interesting device with more in common with the Chromebook line than with Google's design-outsourced Android hardware.
In addition to supporting hypervisor applications, a few things stood out about the Pixel C:
- An open-source, coreboot-based boot chain makes it easy to see what's going on as the device starts up and parses a firmware image, and gives developers a clear
idea of what checks their firmware files will have to pass to be bootable.
- Google's limited public documentation suggests that it's possible to debug low-level software without opening the device's case. A more detailed look at some publicly-available source code reveals that we can easily get access to the main processor's UART via the tablet's external USB-C connector.
- The tablet's bootloader supports a neat mix of features, and follows the ChromiumOS vboot paradigm while supporting the the Android fastboot protocol. As a result, the tablet is easy to flash but very difficult to "brick".
Combined with out-of-the-box support for the AArch64 virtualization extensions, these features make the Pixel C very tempting as a development platform—especially for low-level applications such as bare-metal or hypervisor development, where UART access is a significant boon.
There's only one thing standing between us and getting started: while the system's platform software is open source, almost no documentation exists for the low-level developer. This series will help to fill those gaps, and is designed to help new developers get started with low-level AArch64 development on the Pixel C.
Kyle J. Temkin