El sistema Centos compila el controlador del kernel

Hay dos formas principales de compilar y depurar el controlador

1. Instale linux-devel, linux-headers, descargue el código fuente en el firmware de centos para compilar

2. Use directamente el código fuente del kernel de Linux para una nueva compilación.

1. Método 1

1.1 Instale las dependencias del kernel y del archivo de cabecera

sistema CentOS

sudo yum -y install kernel-headers  //安装kernel-headers

sudo yum -y install kernel-devel    //安装kernel-devel

sistema ubuntu

sudo apt-get install build-essential  //install build-essential(optional)

sudo apt-get update                  //install linux-headers

sudo apt-get install linux-headers-$(uname -r)

sudo apt-get update && sudo apt-get install build-essential linux-headers-$(uname -r)

1.2 Descarga el código fuente del kernel

uname -r Ver información de la versión del kernel

/cat /etc/*lease Ver información del sistema de archivos

 Ampliar el código fuente

Sistema Centos: Índice de /

Linux SRC: https://vault.centos.org/7.8.2003/os/Source/SPackages/kernel-3.10.0-1127.el7.src.rpm   descarga

1.3 Construyendo el código fuente

Cree la estructura de directorio básica requerida para compilar rpm como un usuario normal

$ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

$ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

Instale los paquetes necesarios para compilar el kernel

$ sudo yum install kernel-devel

$ sudo yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto

$ sudo yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel

$ sudo yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel

Instalar la fuente del kernel

$ rpm -i kernel-3.10.0-514.26.2.el7.src.rpm 2>&1 | grep -v exist

$ cd ~/rpmbuild/SPECS

$ rpmbuild -bp --target=$(uname -m) kernel.spec

现在可以在“~/rpmbuild/BUILD/kernel*/linux*”看到完整的内核源代码了。

Configuración de compilación del kernel

$ cd ~/rpmbuild/BUILD/kernel-*/linux-*/

$ cp /boot/config-`uname -r` .config

$ cp /usr/src/kernels/`uname -r`/Module.symvers .

$ cp /usr/src/kernels/`uname -r`/System.map .

$ cp /usr/src/kernels/`uname -r`/vmlinux.id .

Copie la configuración del núcleo actual en el directorio del código fuente,

        Reutilice directamente la configuración del kernel actual (evite volver a compilar todo el kernel y el problema de la verificación de la versión del kernel que causa errores de carga de nuevos módulos).

$ make prepare

$ make modules_prepare

1.4 Prueba de verificación
 

$ cd ~/rpmbuild/BUILD/kernel-*/linux-*/

$ mkdir modules && cd modules

hola/hola.c

 Ampliar el código fuente

hola/Makefile

obj-m += hello.o

all:

    make -C $(PWD) M=$(PWD) modules

clean:

    make -C $(PWD) M=$(PWD) clean

$ make M=modules/hello

$ sudo cp modules/hello/hello.ko /lib/modules/`uname -r`/extra

cargar quitar módulo

$ cd /lib/modules/`uname -r`/extra

$ sudo insmod hello.ko

$ sudo rmmod hello

$ tail -f /var/log/messages

* localhost kernel: Module init: Hello linux kernel.

* localhost kernel: Module exit: Bye-bye linux kernel.

1.5 Compilar el módulo

cd ~/rpmbuild/BUILD/kernel-*/linux-*/

make   M=drivers/block

Enlace de referencia: CentOS7 compila su propio módulo kernel - libro breve

2. Método 2

2.1 Descarga el código fuente del kernel

https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x

2.2 Preparar el entorno de compilación

yum -y groupinstall "development tools"

yum -y install ncurses-devel

#解压Linux内核

linux-4.4.241.tar.gz

#拷贝内核配置

cp /boot/config-4.4.241-1.el7.elrepo.x86_64 .config

2.3 Compilar

make -j 8 all

make modules_install

make install

2.4 Establecer el kernel habilitado por defecto

awk -F\' '$1=="menuentry " {print i++ " : " $2}' $(find /boot -name grub.cfg)
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg


0 : CentOS Linux (4.4.241.test.x86_64+) 7 (Core)
1 : CentOS Linux (3.10.0-1160.25.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (4.4.241-1.el7.elrepo.x86_64) 7 (Core)
3 : CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core)
4 : CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
5 : CentOS Linux (0-rescue-f6b59b458a184fd3a3bc8bed678e1a52) 7 (Core)


grub2-set-default 1

grub2-editenv list

cat /etc/default/grub

make -C /usr/src/kernels/3.10.0-862.el7.x86_64/ M=$(pwd) modules

make -C /usr/src/kernels/`uname -r`/ M=`pwd` modules

三,配置内核启动项

GRUB配置: GRUB_CMDLINE_LINUX="intel_iommu=on iommu=pt"
awk -F\' '$1=="menuentry " {print i++ " : " $2}' $(find /boot -name grub.cfg)
0 : CentOS Linux (4.4.241-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1127.19.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-f6b59b458a184fd3a3bc8bed678e1a52) 7 (Core)
grub2-set-default 1
grub2-editenv list
cat /etc/default/grub

http://vault.centos.org"去下载内核源码。https://vault.centos.org/7.8.2003/正在上传…重新上传取消​
下载地址:Index of /7.8.2003/updates/Source/SPackages
找到当前内核版本
内核源码安装参考: CentOS安装相应版本的内核源码 - AlexAlex - 博客园
模块编译参考: CentOS7编译自己的内核模块 - 简书
yum install kernel-headers kernel-devel
内核编译:
cd /root/rpmbuild/BUILD/kernel-3.10.0-1160.25.1.el7/linux-3.10.0-1160.25.1.el7.x86_64
$ make M=modules/hello
$ sudo cp modules/hello/hello.ko /lib/modules/`uname -r`/extra
$ cd /lib/modules/`uname -r`/extra
$ sudo insmod hello.ko
$ sudo rmmod hello
$ tail -f /var/log/messages

参考链接
CentOS7编译内核 详细步骤_飙风的蜗牛博客-CSDN博客_centos 内核编译

其它参考链接

[1] SystemTap en CentOS, https://sourceware.org/systemtap/wiki/SystemTapOnCentOS
[2] Necesito el código fuente del kernel, https://wiki.centos.org/zh/HowTos/I_need_the_Kernel_Source
[3] Necesito Crear un kernel personalizado, https://wiki.centos.org/zh/HowTos/Custom_Kernel
[4] Crear sus propios módulos de kernel, https://wiki.centos.org/zh/HowTos/BuildingKernelModules
[5] Building Fuente RPM como no root en CentOS, http://www.owlriver.com/tips/non-root/

Supongo que te gusta

Origin blog.csdn.net/wfjdemmye/article/details/121543471
Recomendado
Clasificación