Follow the steps below to install a 64K page size kernel on Debian 11 “Bullseye” or later .
Debian does not provide a 64K kernel package, so you will need to compile it from source.
There are two ways to do this:
The instructions below use the Debian source package.
Verify you’re using a 4KB pagesize kernel by entering the following commands:
getconf PAGESIZE
uname -r
The output should be similar to below. The kernel flavor (the string after the version number) may vary, but the first line should always be 4096.
4096
6.1.0-34-cloud-arm64
The 4096 indicates the current page size is 4KB. If you see a value that is different, you are already using a page size other than 4096 (4K). On Arm systems, the valid options are 4K, 16K, and 64K.
Follow the steps below to install a 64K kernel using the Debian kernel source package.
First, update, and install the required software:
sudo apt-get -y update
sudo apt-get -y install git build-essential autoconf automake libtool libncurses-dev bison flex libssl-dev libelf-dev bc debhelper-compat rsync
Download the kernel source and cd to its directory:
# Fetch the actual kernel source
apt source linux
# Change to kernel source dir
cd -- linux*/
Now that you have the kernel source, follow these steps to build and install the kernel:
# Use running config as template for new config
cp /boot/config-$(uname -r) .config
# Modify config to enable 64K page size
sed -i 's/^CONFIG_ARM64_4K_PAGES=y/# CONFIG_ARM64_4K_PAGES is not set/' .config
sed -i 's/^# CONFIG_ARM64_64K_PAGES is not set/CONFIG_ARM64_64K_PAGES=y/' .config
echo '# CONFIG_ARM64_16K_PAGES is not set' >> .config
# Build the kernel
make ARCH=arm64 olddefconfig
# Set 64 for kernel name suffix
sed -i 's/^EXTRAVERSION =.*/EXTRAVERSION = -64k/' Makefile
# Build new kernel config as Debian packages
make -j$(nproc) ARCH=arm64 bindeb-pkg
# install the Debian packages
cd ..
sudo dpkg -i linux-image-*64k*.deb linux-headers-*64k*.deb
The system is now ready to reboot:
sudo reboot
Upon reboot, check the kernel page size and name once again to confirm the changes:
getconf PAGESIZE
uname -r
The output shows the 64k kernel is running:
65536
6.12.22-64k
This indicates the current page size is 64K, and you are using the new custom-built 64k kernel.
To revert to the kernel we started with, enter:
dpkg-query -W -f='${Package}\n' 'linux-image-*-64k*' 'linux-headers-*-64k*' \
| xargs --no-run-if-empty sudo dpkg -r
sudo update-grub
sudo reboot
Upon reboot, verify you’re on a 4 KB pagesize kernel by entering the following commands:
getconf PAGESIZE
uname -r
The output should be similar to below – the full kernel name may vary, but the first line should always be 4096:
4096
6.1.0-34-cloud-arm64
The 4096 indicates the current page size has been reverted to 4 KB.