Fedora
Linux
Núcleo de compilación del sistema
Tabla de contenido
Resumen
comprobar la memoria
Al compilar el kernel, se requiere al menos memoria 4G
o 2G
memoria +
2G
de intercambio ( Swap
/ Swapfile
).
Aumentar la memoria de intercambio (Swap)
Este artículo Swapfile
utiliza un ejemplo para ilustrar la operación de la siguiente manera:
-
① (Este paso también se puede omitir) Ingrese a un directorio específico, tome el
var
directorio como ejemplo y cree unaSwapfile
carpeta de archivo de intercambio () La operación es la siguiente:cd /var sudo mkdir swap
-
② Utilice
dd
el comando para crear un archivo de intercambio (Swapfile
).sudo dd if=/dev/zero of=/mountpoint/path/to/swapfile bs=1M count=2000
ilustrar:
Utilice
dd
el comando para crear un archivo vacío;if
Representa la lectura de un archivo;/dev/zero
Eslinux
un generador único0
;of
Indica salida a un archivo;/mountpoint
Representa el punto de montaje de una determinada partición;/path/to/
Representa un directorio;swapfile
Indica el nombre del archivo a crear, el cual puede ser arbitrario;of
También puede completarlo directamenteswapfile
, es decir, enviarlo al archivo en la carpeta actualswapfile
;Si sigue este paso, significa que
/var/swap
se ha creado unswapfile
archivo que representa la memoria de intercambio en el directorio;bs=1M
Significablock size
1 megabyte, es decir, el tamaño del bloque es 1 megabyte;La unidad también puede ser
B
(Bytes
),K
(KB
),M
(MB
);Si se omite, la
512
unidad predeterminada son bytes; si se omite la unidad, la unidad predeterminada son bytes;count=2000
Indica8000
escriturablock
;Es decir,
2GB
el tamaño del archivo es aproximado. -
③ Inicializar
swap
el espacio de intercambioConcede
Swapfile
los permisos correspondientes y haz lo siguiente:sudo chmod 600 /mountpoint/path/to/swapfile
Convierta el archivo a
swap
un archivo y ejecútelo en el directorio correspondiente, la operación es la siguiente:sudo mkswap /mountpoint/path/to/swapfile
Si se ejecuta en este directorio, también puede ingresar el nombre del archivo directamente, la operación es la siguiente:
sudo mkswap swapfile
Para habilitar el espacio de intercambio, haga lo siguiente:
sudo swapon /mountpoint/path/to/swapfile
Si necesita montarlo automáticamente después del inicio, puede agregarlo al
/etc/fstab
archivo.
Monte automáticamenteSWAP
la partición al iniciar, edite/etc/fstab
y agregue el siguiente contenido en la última línea:/path/to/swapfile swap swap defaults 0 0
También puedes agregar el siguiente contenido:
/path/to/swapfile none swap sw 0 0
ilustrar:
El primer elemento:
/path/to/swapfile
especifiqueswap
la ruta del archivo;El segundo elemento:
none
, indica queswap
el espacio no tiene puntos de montaje;El tercer elemento:
swap
representa un tipo de espacio de intercambio;El cuarto elemento:,
sw
indica que el espacio de intercambio está habilitado y también hay una opción poco comúnnoauto
;Elementos 5 y 6:
0
y0
significa que no se requiere inspección de encendido.
Eliminar memoria de intercambio (Swap)
Si deseas eliminarlo swapfile
, primero debes ejecutar el siguiente comando:
sudo swapoff swapfile
Luego realice la operación de eliminar el archivo, el comando es el siguiente:
sudo rm swapfile
Nota :
Si no se realiza la operación
swapoff
y se ejecuta la operación de eliminar el archivo, el sistema informará un error y la instrucción de eliminación no se podrá ejecutar.
swapoff
El comando equivale a desmontarswap
la partición.
Instalar las dependencias necesarias
Para usar yum
o dnf
instalar el software necesario para compilar el kernel, haga lo siguiente:
sudo yum install git fakeroot ncurses-devel xz zstd dracut openssl-devel bc flex bison elfutils-devel audit-libs-devel slang-devel binutils-devel zlib-static libbabeltrace-devel java-1.8.0-openjdk-devel dwarves
sudo yum groupinstall "Development Tools"
o
sudo dnf install git fakeroot ncurses-devel xz zstd dracut openssl-devel bc flex bison elfutils-devel audit-libs-devel slang-devel binutils-devel zlib-static libbabeltrace-devel java-1.8.0-openjdk-devel dwarves## 添加用户组
sudo dnf groupinstall "Development Tools"
Agregue un grupo de usuarios y agregue un usuario para compilar el kernel, de la siguiente manera:
groupadd mockbuild
useradd -g mockbuild mockbuild
Obtener el código fuente del kernel
- ① Descarga del sitio web oficial:
El sitio web oficial descarga directamente la versión especificada del linux
paquete de compresión del código fuente del kernel que debe compilarse. La URL del sitio web oficial es la siguiente:
Sitio web oficial: Los archivos del kernel de Linux
Descomprima el paquete comprimido del kernel que acaba de descargar, de la siguiente manera:
tar -zxf linux-<version>.tar.xz
- ②Adquisición de comandos
git
:
git
Obtenga el código fuente del kernel usando el comando linux
, la operación es la siguiente:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Configurar el kernel
Ingrese linux
a la carpeta del código fuente del kernel y haga lo siguiente:
cd linux-<version>
Antes de compilar oficialmente el kernel, primero debe configurar los módulos que deben incluirse. Si no conoce la configuración del kernel, también puede copiar el archivo de configuración actual del kernel. La operación es la siguiente:
sudo cp -v /boot/config-$(uname -r) /path/to/.config
Si el archivo de configuración del kernel actual no está en /boot
la carpeta o /boot
el archivo de configuración del kernel no se encuentra en la carpeta, puede usar el siguiente comando:
sudo zcat /proc/config.gz > /path/to/.config
ilustrar:
Entre ellos se encuentra
/path/to/
la carpeta donde se encuentra el código fuente del kernel descargado;Si ha ingresado a la carpeta donde se encuentra el código fuente del kernel descargado, simplemente ingrese
.config
, es decir:sudo cp /boot/config-$(uname -r) .config
sudo zcat /proc/config.gz > .config
Utilice makeconfig
los parámetros del kernel de configuración de la siguiente manera:
sudo make menuconfig
ilustrar:
Los comandos anteriores son configuraciones de menú basadas en texto con gran aplicabilidad y también se pueden usar para compilar el kernel de forma remota;
Por supuesto, si el sistema tiene escritorio, puedes elegir el siguiente menú de interfaz gráfica para configurar el kernel;
① Si el sistema se basa en
KDE
el escritorio o en laQT
biblioteca más reciente , puede utilizar el siguiente comando:sudo make xconfig
② Si el sistema se basa en
gtk
una biblioteca , comoGnome
unxfce
escritorio, puede usar el siguiente comando:sudo make gconfig
También puede realizar
make allyesconfig
omake allnoconfig
simplemente habilitar o deshabilitar todas las configuraciones configurables del kernel.Nota :
Debajo de la máquina virtual, puede aparecer un mensaje de que
menuconfig
la ejecución falla porque la pantalla es demasiado pequeña para mostrarla.Por lo tanto, asegúrese de que el área de visualización debajo de la máquina virtual sea suficiente.
Al configurar los parámetros del kernel, puede optar por habilitar o deshabilitar algunos módulos.
Si no sabe cómo elegir, simplemente salga de forma predeterminada.
Si necesita volver a compilar debido a errores u otras razones al compilar el código fuente del kernel, debe limpiar los resultados de la compilación anterior, la operación es la siguiente:
sudo make mrproper
Nota :
- Si utiliza
LLVM
/clang
herramientas para compilar el kernel, es posible que obtenga el siguiente error:BTF: .tmp_vmlinux.btf: pahole (pahole) is not available Failed to generate BTF for vmlinux Try to disable CONFIG_DEBUG_INFO_BTF make: *** [Makefile:1170: vmlinux] Error 1
La solución es la siguiente:
pahole
① Instale los paquetes de software incluidos② Desactive
CONFIG_DEBUG_INFO_BTF
la función, que se puedemake menuconfig
encontrar en el menú. Presione la barra espaciadora para cancelar:Main menu -> Kernel hacking ->Compile-time checks and compiler options -> Compile the kernel with debug info(DEBUG_INFO [=y])
Después de salir menuconfig
, ingrese el siguiente comando en la línea de comando para comenzar la compilación:
sudo make -jX
Si utiliza LLVM
la cadena de herramientas para compilar, debe ingresar el siguiente comando:
sudo make LLVM=1 -jX
Si utiliza la cadena de herramientas clang para compilar, debe ingresar el siguiente comando:
sudo make CC=clang LD=ld.bfd -jX
Nota: Puede hacer otras cosas en este momento. Este proceso es relativamente lento. Las máquinas comunes generalmente funcionan a nivel de horas.
-jX
Es decir, ejecución concurrente;
X
CPU
Es decir, la cantidad de núcleos configuradaCPU
está determinada por la cantidad adecuada de núcleos, recuerde no excederCPU
la cantidad de núcleos;Este comando aumenta la velocidad y puede tardar mucho en ejecutarse.
Normalmente, si no se informan errores durante la compilación, se puede instalar el nuevo kernel.
Pero también es necesario comprobar arch/x86/boot/bzImage
si el archivo se ha generado, la operación es la siguiente:
ls arch/x86/boot/bzImage -lh
Si no se genera, debe ejecutar el siguiente comando para generar el archivo de imagen comprimido del kernel:
sudo make bzImage
Nota :
Si este archivo no se genera,
make install
se .
Para instalar el módulo del kernel, proceda de la siguiente manera:
sudo make modules_install
Para instalar el kernel, proceda de la siguiente manera:
sudo make install
Generar initramfs
sistema de archivos
Para utilizar dracut
el sistema de archivos generado initramfs
, haga lo siguiente:
sudo dracut --force
Actualizar grub
configuración
Utilice grub2
el comando para actualizar grub
la configuración de la siguiente manera:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo grubby --set-default /boot/vmlinuz-5.6.9
Compruebe si la modificación fue exitosa:
sudo grubby --default-kernel
sudo grubby --default-index
sudo grubby --info=ALL
Reinicie el sistema para que surta efecto.
Ejecute el siguiente comando para reiniciar el sistema y que el kernel compilado entre en vigor:
sudo reboot
O utilice el siguiente comando para reiniciar el sistema:
sudo init 6
Al reiniciar el sistema, si ve la interfaz de inicio, el kernel recién compilado se puede ver en el elemento de inicio del kernel.
Después del inicio, use el siguiente comando para ver la versión actual del kernel:
uname -a
No original, por favor no reimprimir.