[Part 1 · Unfinished Draft] Surface Pro X (ARM64 Snapdragon 8cx Gen 2) Custom Kernel – A Linux Installation Practice
Foreword
As we all know, running computer operating systems on ARM64 platforms comes with its fair share of compatibility issues. Thanks to Microsoft's long-term efforts, Windows on ARM has become increasingly usable—even x86_64 applications run smoothly through emulation, with relatively low performance overhead and better battery life. For instance, the Surface Pro X can achieve an impressive 6–7 hours of screen-on battery life when running purely ARM-native programs, while the Surface Pro 9 Intel version, despite having about 20% more battery capacity, barely manages 3.5 hours or even less (without power-saving mode). Moreover, although the Pro X was released a full three years before the Pro 9, its everyday performance is on par, and under heavy load, the Pro 9's fan spins wildly, the system stutters, and its performance delivery is even worse than the second-generation Surface Pro X released in 2020. Thus, running desktop operating systems on ARM chips holds increasing potential for portable devices.
However, none of the current Linux distributions on the market support Snapdragon chips, especially the 8cx Gen 1 and Gen 2. I initially tried starting with mainstream distributions, but after attempting to boot seven or eight different ones, all failed. I searched through almost all available resources (including English, Chinese, and other languages) and found that no one had written installation guides for Surface or other 8cx devices. This posed a significant challenge to my practice.
So, if Windows on ARM is so good, why go through all the trouble to run Linux on this machine?
This brings us to the notorious WeChat, which does not offer an ARM64 Windows version. The battery life mentioned earlier assumes that all running software is ARM64-native. As soon as you run a few x86-64 applications simultaneously, battery life drops back to around 4 hours—losing 1–2 hours. It's just not worth it. Therefore, I decided to install Linux on this machine.
The Arduous Process
Why
First, running an operating system on an ARM device isn't inherently difficult. As long as the BIOS is as simple as a PC's, the chip is supported, and the OS kernel includes drivers for the device's key components, your ARM64 machine can generally boot up. Typical Linux kernels integrate most common open-source drivers, so when installing Linux on a regular PC, you often skip the tedious driver installation—just boot into a live environment, click install, wait for the progress bar to finish, and you're good to go.
But this is a Surface.
Not to mention that the Surface itself differs from ordinary PCs—its touchscreen, keyboard, speakers, etc., are not standard plug-and-play components commonly found on the market, making drivers hard to come by. The Snapdragon 8cx Gen 2 chip itself is incompatible with almost all Linux distributions, and this particular chip isn't even the original 8cx Gen 2—it's Microsoft's customized version, named Microsoft SQ2. So, we have to wait for experts to adapt it.
The Process
Day 1: Naively, I started with distributions: from Ubuntu to Debian, from CentOS to deepin. Debian 13's non-free firmware version successfully booted to the system installation page, but USB, the Surface keyboard, and the touchscreen were all unusable. I realized that a generic kernel alone couldn't handle installation on hardware like the Surface.
Day 2: I surrendered to the linux-surface project.
But this project was misleading. The homepage's device support list explicitly omitted the Surface Pro X (all supported devices were x86-based), so I initially dismissed it and kept searching for Linux systems that could boot on Snapdragon 8cx chips. Returning to the project's homepage, I noticed an inconspicuous sub-project: aarch64-arch-mkimg. I discovered it was a bootable image (Arch Linux ARM, which I had considered but wasn't officially supported), essentially a USB boot image that only boots into a live environment. Surprisingly, after flashing it to a USB drive, the display worked, USB worked, and even the Surface keyboard and Wi-Fi were properly supported.
With this image, even if you can't directly install Linux onto the hard drive from it, at least you obtain the necessary kernel programs.
My plan was to follow AI instructions step by step to partition the disk and perform the installation. But the tiny letters on the screen were painful to read. After working all morning, I felt my eyesight had improved... but it didn't succeed—the system failed to boot into Linux properly.
Then I made a wrong decision: to investigate the Debian that had successfully booted to the interface. I won't go into details, but it wasted several more hours...
Just when I was at my wit's end, a thought struck me: since it could connect to Wi-Fi, why not use an agent to SSH into my computer and let the AI handle the operations?
So I did it. I connected to the Surface using Mimo Code on my computer and got to work (SSH connection itself was labor-intensive—every failure meant rebooting into the live environment, connecting to Wi-Fi, switching to root, and enabling SSH—a torment for my eyes, brain, and fingers). After seven or eight consecutive reboots with errors, I worked from 1 PM to 4 PM.
But I realized I was just being foolish.
Because I was too lazy to log in, I had been using Xiaomi's free basic model, thinking such a simple task could be handled by any small model. The turning point came around 4–5 PM, peak AI usage time, when the free model became extremely sluggish. So I logged into Mimo and let it redo the work. When I gave the AI the final instruction, it succeeded. The system booted into a Linux command-line interface! It was still a bare-bones setup, but it was a huge step forward.
Believe it or not, I even recorded a continuous video. The moment I switched to the Pro model, it worked on the first try. What was I doing for those two days? Pure self-torture!
Day 3: Time to furnish the bare-bones system. Furnishing it was a real hassle, but thankfully with AI assistance, it would have taken one to two weeks otherwise. The difficulties: first, the system lacked many drivers—Wi-Fi wasn't working, so I couldn't SSH directly, and the most bizarre part was that I didn't have a username or password. So first, I solved the login issue (even this trivial matter could be handled by AI). Then came the real challenge: no network connectivity. Even plugging in an Ethernet cable didn't help. At this point, I had to format the USB drive that had been used as a boot medium, let the AI write scripts based on the previously downloaded image containing the necessary kernel, install networking tools, install OpenSSH, and automatically display the IP address. This step required patience and facing errors head-on. I'll summarize the key points later.
Next, it was time to connect via SSH again. The timeline moved to the afternoon. But at least the major hurdles were overcome. We could now free our hands and let Mimo Code install GNOME (or KDE if preferred, but I wanted to apply Nyarcher—a patch that makes Arch Linux as anime-themed as Nyarch), along with common software like WeChat and QQ Linux ARM64 versions. (Of course, Wi-Fi and Bluetooth might occasionally lose drivers, requiring fixes.) Then came the most relaxing moment of these three days: drinking tea. No, that's for you—I still had to study for my driving test's written exam, leaving the computer aside. (Sigh, it feels like a month has passed since the college entrance exam, but every day feels like work—I haven't given myself a break!)
And that concludes the installation of Linux on the Surface.
Pictures and a detailed tutorial will come in the next part!