Centos系统编译内核驱动

驱动编译调试主要有两种办法

1,安装linux-devel ,linux-headers,下载centos固件中源码进行编译

2,直接使用linux的内核源码进行新的编译。

1. 方法一

1.1. 安装内核和头文件依赖

Centos系统

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

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

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. 下载内核源码

uname -r                  查看内核版本信息

/cat /etc/*lease         查看文件系统信息

 展开源码

Centos系统:Index of /

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

1.3. 构建源码

以普通用户创建编译rpm所需的基础目录结构

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

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

安装编译内核所需软件包

$ 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

安装内核源码

$ 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*”看到完整的内核源代码了。

内核编译设置

$ 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 .

拷贝当前内核的配置到源码目录,

        直接复用当前内核的配置(避免重新编译整个内核,以及内核版本校验导致新模块加载错误的问题。)

$ make prepare

$ make modules_prepare

1.4. 测试验证
 

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

$ mkdir modules && cd modules

hello/hello.c

 展开源码

hello/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

加载移除模块

$ 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. 编译模块

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

make   M=drivers/block

参考链接:CentOS7编译自己的内核模块 - 简书

2. 方法二

2.1. 下载内核源码

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

2.2. 准备编译环境

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. 编译

make -j 8 all

make modules_install

make install

2.4. 设置默认启用内核

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 on CentOS,https://sourceware.org/systemtap/wiki/SystemTapOnCentOS
[2] 我需要内核的源代码,https://wiki.centos.org/zh/HowTos/I_need_the_Kernel_Source
[3] 我需要创建一个自设的内核,https://wiki.centos.org/zh/HowTos/Custom_Kernel
[4] 创建你自己的内核模块,https://wiki.centos.org/zh/HowTos/BuildingKernelModules
[5] Building Source RPM as non-root under CentOS,http://www.owlriver.com/tips/non-root/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译 CentOS 8.5 的 Linux 内核源码需要以下步骤: 1. 下载内核源码: 在 CentOS 官方网站或者 Linux 内核官方网站上下载 CentOS 8.5 对应的内核源码包。你可以使用 `wget` 命令来下载,例如: ``` wget https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.15.tar.gz ``` 2. 解压源码包: 使用 `tar` 命令将下载的源码包解压,例如: ``` tar -xzvf linux-5.15.tar.gz ``` 3. 安装编译依赖: 安装编译内核所需的依赖包,例如: ``` sudo yum install gcc make ncurses-devel openssl-devel elfutils-libelf-devel ``` 4. 配置内核选项: 进入解压后的源码目录,并执行以下命令以配置内核选项: ``` cd linux-5.15 make menuconfig ``` 在文本界面的配置界面中,可以修改内核选项,例如启用或禁用某些功能、添加或删除驱动程序等。完成后保存并退出。 5. 编译内核: 执行以下命令开始编译内核: ``` make ``` 这将花费一些时间进行编译,可以使用 `-j` 参数指定并发任务数量,例如 `make -j4`。 6. 安装内核编译完成后,执行以下命令安装内核: ``` sudo make install ``` 7. 配置引导管理器: 根据你使用的引导管理器(如 GRUB 或 LILO),更新引导配置文件以引导新内核。 8. 重新启动: 完成上述步骤后,重新启动计算机,选择新编译内核进行启动。 请注意,编译内核需要一定的编译知识和经验,如果你对此不太熟悉,建议在测试环境中进行操作,并备份重要数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值