What will be the next kernel for Pi4 ?

I wonder what will be the next kernel for the raspberry pi 4.
I'm on the stable branch, but I've changed to linux-rpi4-mainline and now I have a 5.5.13-2 kernel version.
For what I've heard, 5.6 kernel branch is a very good one for ARM https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.6-ARM-Changes and 5.7 version will bea at least as good for ARM64 https://www.phoronix.com/forums/forum/hardware/processors-memory/1169141-linux-5-7-for-64-bit-arm-brings-in-kernel-pointer-authentication-activity-monitors.
So, I wonder when we will see these one (or not).
More broadly speaking, I wonder what is the process for choosing the next one ? (any wiki/forum page to explain it ?)
If we take a look at the kernel.org site, we can see that the last stable kernel for the 5.5 branch is 5.5.15 and manjaro arm unstable branch only has a 5.5.14 version for pi4. (I don't understand what device the linux-aarch64-5.6.0-1 kernel is for...)
But there is also a 5.6.2 stable version for the 5.6 branch.
Will manjaro-arm go to 5.5.15 ou will it go directly to 5.6 ? And after that ?

Currently we are following the RPi tree:

RPI tree

They have up to kernel 5.6 in their tree at this moment. Their default what they consider Stable is 4.19 right now. They have been moving up each time to what upstream considers longterm which now the latest is 5.4 (as so do a lot of distro's) but they will not make the move until they have all of the bugs worked out and they consider it Stable. Kernel 5.5 and 5.6 being newer kernels and have lots of things to be worked out. When upstream makes changes then the RPi people a lot of times have to adjust code on their end to get their boards working like they want. They also submit patches to upstream also.

I have run into issues with the later kernels in their tree and made bug reports and sometimes they are quick to point out the the newer trees are experimental and not intended for the normal user. Because of upstream code changes some things may cease to work until they get things sorted out. The reason for them adding the newer trees is for the community to find and submit bug report and also the ones that can submit patches. Basically when upstream says a branch is stable it most likely will not be the case as with the RPi boards themselves.

I maintain 2 kernel trees (x64 and raspberry pi) with the dvb/atsc/dvbt modules patched for blind scanning (mostly satellite streams) and for several years have always used the latest DEV tree kernel and have run into very little issue with the latest kernels but the people that use them in the satellite forum use it for a very narrowly focused purpose. Lately We have started going with the long term because people like nvidia are really behind on supporting the newer kernels and it has become an issue with prople with nvidia cards.

The users in this forum push the limits trying to do everything imaginable so personally I believe that some could be disappointed running the latest kernels as they are truly experimental but at the same time when some one runs into an issue then a bug report can be submitted to the RPi people and things could be fixed faster; which is their intent giving the latest trees.

If @Strit is agreeable I could compile and push 5.6 replacing 5.5 as 5.7 is fixing to become mainline; maybe this weekend.


Hi @Darksky,

I don't want to push over the limits but I would like to test wireguard (the secure VPN tunnel functionality) with the new 5.6 branch. https://phoronix.com/scan.php?page=news_item&px=Linux-5.6-The-Best-Features
If you're able to set a new 5.6 kernel for the arm-unstable branch I may move forward to test it but it's not urgent.

Starting the compile process as we speak. If all goes well I will push. I will have to build a .config from the ground up for it but the compiling should not take long after that. It takes a little over 30m here with my distcc setup.

It's a good thing I said it wasn't urgent. :stuck_out_tongue_winking_eye:
It can be a good thing for others also.
I have another question regarding kernel boot : the choose process on Pi4 doesn't exist, do it ?
No u-boot or similar process if I'm not wrong.
Does anyone try to use u-boot on Pi4 with 64 bits kernel ?

uboot is not used on the RPi tree.

In making the .config I enabled WIREGUARD and also WIREGUARD_DEBUG to help with trouble shooting.

    WireGuard secure network tunnel (WIREGUARD) [M/n/?] m
      Debugging checks and verbose messages (WIREGUARD_DEBUG) [N/y/?] (NEW) y

linux-rpi4-mainline-5.6.0-1 and linux-rpi4-mainline-headers-5.6.0-1 has been pushed to the arm-unstable branch and should be available the next time the mirrors sync.

Do me a favor if you are successful getting wireguard going would you take notes and post a guide here for every one since this is new to the pi kernel . I am sure there will be a lot of interest in your project here.

I tested things here and all I tested went ok except the cpu temp is not showing up in my System Information on my desktop and cpu-temp-speed will not show the cpu temp. The file it is supposed to read is there but I am not able to access it; weird.... The network, sound, overclocking and V3D seems to be working ok.



I found the cpu temp issue and pushed updated 5.6 kernel / header packages to fix it to arm-unstable branch.



1 Like

That's great news because lack of temp was a big showstopper.

On my side, I was able to use Wireguard between my pi4 and a phone (over 4G) with linux-rpi4-mainline-5.6.0-2.

So, here is my 'case' and what I did with this new feature :

  • I have a PI4 on my LAN with internet access
  • an android phone
  • I wanted to be able to connect from my phone outside (4G) over SSH to my Pi4.

I checked if the module wireguard is present with the new kernel (>= 5.6)

$ lsmod | grep -i wireguard
wireguard 86016 0
libchacha20poly1305 16384 1 wireguard
ip6_udp_tunnel 16384 1 wireguard
udp_tunnel 16384 1 wireguard
libcurve25519_generic 40960 1 wireguard
libblake2s 16384 1 wireguard
ipv6 569344 41 wireguard

I've also installed wireguard-tools (from extra repositiry) which is really usefull, to get wg and wg-quick binaries

$ pacman -Qlq wireguard-tools | grep wg

All the config files will remain in /etc/wireguard, which is owned by root:root and they shouldn't be visible by others :

$ ls -ld /etc/wireguard
drwx------ 2 root root 4096 Apr 6 02:44 /etc/wireguard

umask 077
wg genkey | tee server-private.key | wg pubkey > server-public.key

As I'm using an android wireguard client and I want to set its configuration quickly so I've generate its keys also on the server side

wg genkey | tee client-private.key | wg pubkey > client-public.key

With all these keys, you have to set 2 conf files :

  • one for the server which will be named wg0.conf (the name is important for wg-quick)
  • and one for the client to transfer it (we can call it client.conf to distinguish it from the other but in theory there are only peer and communication can be on both sides which in my case doesn't make sense but can be usefull for two servers)

For the server part, the file looks like that :

Address = (for instance but you can choose any address you want)
PrivateKey = < content of server-private.key >
ListenPort = 4820 (for instance but you can choose any port you want)

#client 1
PublicKey = < content of the client-public.key >
AllowedIPs =

For the client part, the file looks similar but I have to add an endpoint and a port which are the internet address of my ISP box and the UDP port enabled on it

#client 1
Address = (for instance but you can choose any address you want)
PrivateKey = < content of client-private.key >
ListenPort = 4820

PublicKey =< content of the server-public.key >
AllowedIPs =
Endpoint = box_internet_address:udp_port

If I insist on the fact that it's a udp port it's because I've wasted 1 hour to check why it didn't work just because I had enabled a tcp port on my box instead !

You can now set up your server side

wg-quick up wg0

Now, the final touch for the client :

qrencode -t ansiutf8 < client.conf

Just to scan it from the phone and enable it !

You can check if it's working on the server side :

$ wg show
interface: wg0
public key: *****************************************
private key: (hidden)
listening port: 4820

peer: ************************************************
endpoint: ...:65236
allowed ips:
latest handshake: 14 seconds ago
transfer: 6.75 KiB received, 7.75 KiB sent

I hope it can help you, but I think we can go even faster by generating conf files from script like the .sh ones carried by the wireguard-tools

$ pacman -Qlq wireguard-tools | grep '.sh'


Awesome guide!!
Thanks a million.

You're welcome.
I'll check if I can improve how to generate conf files.

I don't have two servers on two different boxes to test the connection in both sides... If anyone is interested...

The RPi people finally got around and added the 5.7 kernel yesterday starting @5.7.0-rc6 so I compiled it and been doing some testing. I do not use my pi's for anything everyday other than for testing various things so I do not run through all of the various things others do here.

If you or others here want to test and determine that it is worth being in the repo then I would gladly push it.



PACKAGE link has been removed. See post #21 for an updated package link.

Hi Darksky,

How I can install this? (I'm don't have experience installing kernel lol)

Will you add to unstable branch?

"Give a man a fish, and you'll feed him for a day. Teach a man to fish, and you've fed him for a lifetime."

Download the tarball and unpack it and install the packages.

tar -xf 5-7_rc6-kernel.tar
sudo pacman -U linux-rpi4-rc-5.7.rc6-1-aarch64.pkg.tar.xz linux-rpi4-rc-headers-5.7.rc6-1-aarch64.pkg.tar.xz


You can go back to your previous kernel at any time:

sudo pacman -S linux-rpi4


1 Like

Installed it here on my usb booting rpi4 with some docker stuff,
So far so good.

This reminds me before I forget again:

As with any pi kernel upgrade the config files /boot/(config.txt and cmdline.txt ) will be over written and the original ones will be saved as .pacsave files. So after a kernel upgrade and before rebooting copy back the .pacsave files to their original name if any of the 2 above mentioned files has been modified with custom configs.


Also root=PARTUUID=xxx-xx instead of root=/dev/sdxx
as no guaratneee the USB drive is designated /dev/sda1 etc

More detailed overview:

Put your pi4's usb drive in a computer and run lsblk to find where the computer mounts the drive.
Mine was mounted on /dev/sdb2:


Then run sudo blkid /dev/sdb
Record the PARTUUID= (Not UUID=)
Here mine is PARTUUID="25aae5bf-02":


Then edit the drives's boot partition cmdline.txt and change ROOT=/dev/sda2 to root=PARTUUID=?????????. As example mine would be this:


Then safely remove the drive and plug it into your pi4's usb port and power on the pi4.

Thanks so much DarkSky. Now I have latest kernel for RPI 4.

I´m testing video, and I see a lot of screen tearing when I play videos from YouTube (windowed, not full screen).

Also, seems to be new kernel doesn´t support latest video driver overlay ( dtoverlay=vc4-kms-v3d-pi4) because I get blanks screen when I try it.

I'll continue testing new Kernel.

Thanks again!

Forum kindly sponsored by