Compilar un kernel si bien no es estrictamente necesario en todos los casos, creo que es bueno tener una pequeña guía al respecto para principiantes.
La principal ventaja de compilar un kernel propio es mejorar el rendimiento de nuestro sistema, ya que podemos eliminar drivers y opciones que nuestro hardware y caso de uso no necesite, por ejemplo no todos necesitan soporte para CDs.
Lo primero que debemos hacer es buscar una tarball, para eso está kernel.org.
Yo en mi caso iré por el 5.15 ya que mi hardware no depende de opciones nuevas y prefiero la estabilidad a lo bleeding edge pero cada uno es libre de elegir la versión que quiera, con la responsabilidad claro.
Descargamos la tarball, la extraemos en el directorio donde vamos a trabajar, a mí me gusta hacerlo en /tmp pero puede ser donde quieran.
Extraído no tendrá ningún .config, que es el archivo que dicta lo que se va a compilar y como, para ellos hay varias opciones; podemos copiar el config de nuestro actual kernel en /boot o podermos usar las opciones que el propio kernel da, dígase make config que dará una serie de preguntas cli que debemos responder, make menuconfig que usa ncurses para dar una opción más amigable, y luego tenemos lo más sencillo hacer un make localmodconfig, que hará una configuración basada en los módulos en uso.
Si bien make localmodconfig es suficiente para tener una base en la que trabajar es insuficiente para uso real, muchos módulos no estarán en el .config y luego de la compilación podremos tener un ladrillo de computador, la solución a esto es usar localmodconfig y luego editar manualmente, esto lo facilita make menuconfig.
Cada sección está con su respectivo nombre y categoría, desde aquí solo es ir configurando a nuestro gusto según las necesidades y características que queramos.
Luego de esto no tomé capturas pero el proceso siguiente es así.
Dentro del directorio con el código:
make -jX (donde X es la cantidad de núcleos que usaremos para compilar)
make modules
make headers
make modules_install
make headers_install INSTALL_HDR_PATH=/usr/src/kernel-headers-(Nuestra versión del kernel)\
cp arch/x86_64/boot/bzImage /boot/vmlinuz-(Nuestra versión del kernel)
Luego de esto será necesario crear el initramfs, y esto es algo que no es tan estándar en las distros, alguans usan dracut, otros mkinitcpio, yo uso dracut así que eso usaré.
dracut --force --kver "(Aquí va el nombre del directorio en /usr/lib/modules/)" initramfs-(Nuestra versión del kernel).img\\
grub-mkconfig -o /boot/grub/grub.cfg
Con esto ya estaría listo y grub lo tomará como opción booteable. (Para lilo y syslinux es muy diferente y las entradas se manejan manualmente con su debida sintaxis en /boot/syslinux/syslinux.cfg y /etc/lilo.conf respectivamente).
Esto solo es una guía muy general, seguramente haya cosas que no tomé en cuenta o expliqué mal.