jxself.org

Introducing the LPAE Split

Mon, 25 May 2026

To better support the wide variety of 32-bit ARM hardware in the wild, starting with Linux-libre version 6.6-gnu and moving forward, the 32-bit ARM (armhf) Linux-libre kernels will be split into two distinct flavors: one with LPAE support, and one without.

LPAE stands for Large Physical Address Extension. On 32-bit ARM architectures, enabling LPAE in the kernel is needed to address more than 4GB of physical RAM and to support hardware virtualization (KVM). But older ARMv7 processors, such as the Cortex-A8 and Cortex-A9, don't support this, and an LPAE-enabled kernel will fail to boot.

Because it's impossible to have a single 32-bit kernel image that supports both at the same time, the builds are split into two.

If you're unsure whether your current 32-bit ARM processor supports LPAE, you can easily check by looking at your CPU flags. Run this command in your terminal:

grep --color=always -i lpae /proc/cpuinfo

If it returns output, you'll see one or more lines listing your CPU "Features" that include the word "lpae". This means your processor supports LPAE. Otherwise, it doesn't.

Which package do you need?

For 32-bit ARM boards that support LPAE, the standard kernel package names remain unchanged. These are built with CONFIG_ARM_LPAE=y and are meant for such processors. If your hardware supports it, or if you need virtualization or have 4GB+ of RAM, use the the linux-libre or linux-libre-lts packages.

If your device doesn't support LPAE, or if it's been hanging during boot with recent kernels, you'll need these new builds. They're built with CONFIG_ARM_LPAE=n for ARMv7 processors that don't support LPAE. To use these, just append -nonlpae to the usual package names: linux-libre-nonlpae or linux-libre-lts-nonlpae.

The main server has been updated to include the new -nonlpae packages starting with the 6.6 branch. If you use a mirror, please allow a day or two for the files to sync across the network fully.