安装好Linux系统的同学如果需要调试内核,会需要Linux源码用于内核模块的调试。在此记录一下Linux内核源码的下载方法、内核编译方法、驱动编译方法
一、Linux内核源码下载
我习惯使用比较简单粗暴的方法下载内核源码
//通过uname -r 查看内核的版本号
root@192:/usr/src/kernels/linux-6.12.0-66.el10# uname -r
6.12.0-66.el10.x86_64
接下来可以直接上网搜索对应的src rpm包,如我的版本号是6.12.0-66.el10.x86_64,则可以上网搜索kernel-6.12.0-66.el10.src.rpm进行下载
接着可以使用rpm -ivh kernel-6.12.0-66.el10.src.rpm 进行模块安装
最后可以在~/rpmbuild/SOURCECODE/ 路径下查看到 linux-6.12.0-66.el10.tar.xz 当前内核版本的源码压缩包。进行tar -xf linux-6.12.0-66.el10.tar.xz即可
二、Linux内核源码编译
// 进入源码路径
cd /usr/src/kernels/linux-6.12.0-66.el10
//清理当前源码
sudo make clean
// 这条命令是清楚编译生成文件、配置文件、备份文件
sudo make mrproper
//拷贝当前使用内核的配置文件到当前路径
sudo cp /boot/config-$(uname -r) .config
//配置内核模块
sudo make menuconfig
//编译内核 -j后跟的数字是当前环境cpu个数,核心多可以加快编译速度
sudo make -j10
//编译内核modules
sudo make modules -j10
//安装内核
sudo make modules_install
sudo make install
三、编译Linux内核驱动
当前环境具备了当前系统版本的源码后,即可进行内核模块编译
编译前需要检查内核安装路径下是否存在build软连接,该软连接用于源码编译时访问指定的内核安装路径,从而可以正常编译内核模块
//内核安装路径下的build文件软链接指向我的源码路径
build -> /usr/src/kernels/6.12.0-66.el10.x86_64
然后进入内核源码的driver/nvme/host路径下即可编译nvme-core.ko
// -C 指定内核安装路径的build文件
// M= 用于指定当前源码编译模块的绝对路径
// nvme-core.ko 编译模块的名称
make -C /lib/modules/6.12.0-66.el10.x86_64/build M=`pwd` nvme-core.ko