A very subtle change allowed a Pixel 6 Pro to read an exFAT-formatted disk, but it took a lot to get there
Android 13 will allow a Pixel device to handle files larger than 4 GB in disk memory for the first time. But the story of exFAT file format support on the Pixel 6 is one that has unfolded, piece by piece, over a long period of time.
We have to thank Mishaal Rahman, Technical Writer at Esper, for walking the garden path after discovering that exFAT (Extensible File Allocation Table) support was only available on his Pixel 6 Pro after having it moved from Android 12L to Android 13 Beta. Whereas exFAT support is available for Android versions running on Linux kernel version 5.10 or later and Android 12L was on 5.10.81-android12-9 and Beta was on 5.10.107-android13-4, something was wrong here.
If you have a non-Google Android device and you use exFAT drives with it, you might be wondering what this is. It turns out that they had paid Microsoft – creator of exFAT in 2006 and, therefore, its owner – to support it so that their hardware could work with the wide range of accessories formatted in exFAT. Samsung was one of the OEMs that paid for the support and then developed a back pocket exFAT driver. Once Microsoft released exFAT in 2019 and encouraged its integration into Linux, the kernel community started working on ways to do so. Samsung’s exFAT driver was redone and was eventually chosen for integration into Linux 5.7.
Android kernel development and developers down the chain don’t like having to switch versions so quickly, preferring to maintain long-term support for a particular version to ensure a more stable platform. At this point, the Android Common Kernel maintained by Google was based on Linux 5.4 and it was not until version 5.10 that it formed a new branch. In any case, Android 12 devices based on kernel 5.10 technically support exFAT mounting and unmounting. So what was stopping the Pixel 6 Pro on 12L from reading an exFAT drive?
It turns out that the mount service for exFAT, known as the volume daemon or vold, checks to see if it has access to a few specific “helper” binaries. If they are not there, the mount service fails the check and will not work. It appears that the Android 12 builds the Pixel 6 Pro was running on didn’t have these binaries because they weren’t being called from their designated library. Presumably this call is present on Android 13 builds. And that’s how Android 13 came to support exFAT… well, officially speaking – at least one custom kernel developer apparently was able to fix exFAT driver binary check, so it could theoretically be backported to an older version of Android.
At some point, other OEMs may adapt exFAT support directly 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 EROFS file format. And if you like both of those stories, well, honestly, we can’t recommend Mishaal’s Android Dessert Bytes column enough.