A very subtle change allowed a Pixel 6 Pro to read an exFAT-formatted drive, but it took a lot to get there
Android 13 will bring about the ability for a Pixel device to handle files larger than 4GB in disk memory for the first time. But the story of how the exFAT file format came to be supported on the Pixel 6 is one that has come together, piece by piece, over a long period.
We have Mishaal Rahman, technical editor at Esper, to thank for walking down the garden path after he found that support for exFAT (Extensible File Allocation Table) was only available on his Pixel 6 Pro after he moved it from Android 12L to the Android 13 Beta. Considering that exFAT support is available for Android versions running on version 5.10 or later of the Linux kernel and that Android 12L was on 5.10.81-android12-9 and that the beta was on 5.10.107-android13-4, something was out of place here.
If you own a non-Google Android device and happen to use exFAT drives with it, you might be wondering what all the fuss is about. Turns out that they had been paying Microsoft — creator of exFAT back in 2006 and, therefore, its proprietor — to support it so that their hardware could work with the wide breadth of accessories that were formatted in exFAT. Samsung was one of the OEMs who paid up for support and then subsequently developed a back-pocket exFAT driver. Once Microsoft pushed exFAT public in 2019 and encouraged its integration into Linux, the kernel community began working on ways to do so. Samsung’s exFAT driver was made over and ultimately was chosen to be put into Linux 5.7.
Android kernel development and developers down the chain don’t like having to jump versions so quickly, preferring to maintain long-term support for any particular version to ensure a more stable platform. At that point, the Google-maintained Android Common Kernel was based on Linux 5.4 and it wasn’t until 5.10 that it would form a new branch. In any case, Android 12 devices based on the 5.10 kernel do technically support mounting and dismounting exFAT. So, what was preventing the Pixel 6 Pro on 12L from reading an exFAT drive?
It turns out that the mounting service for exFAT, known as the volume daemon or vold, checks to see if it has access to a couple of specfic “helper” binaries. If they’re not there, the mounting service fails the check and won’t work. It seems that the Android 12 builds that the Pixel 6 Pro was running on didn’t have those binaries because they weren’t being called from their designated library. Presumably, that call is present on the Android 13 builds. And that’s how Android 13 has come to support exFAT… well, officially speaking – at least one custom kernel developer was apparently able to patch the binary check out of the exFAT driver, so it could theoretically be backported to an older build of Android.
At some point, other OEMs will be able to adapt exFAT support straight from AOSP once Google exports its changes from Android 13.
If you liked this story, you’ll definitely enjoy another rabbit hole involving Android, Huawei, and the new-fangled EROFS file format. And if you like both of those stories, well, we honestly can’t recommend Mishaal’s Android Dessert Bytes column highly enough.