总论:工作需求用了centos内核中sunrpc的库。因为用了库所以相应的log就没有。所以决定从新编译sunrpc.ko并添加自己的日志。
1、下载对应的内核源码(uname -r 显示 2.6.32-431.el6.x86_64)应为是centos的源码所以要去centos官网下载。不要在内核源码官网下载,因为也没有对应的版本号。centos源码包(这个包含各种命令的源码例如libc库的源码只要解压RPM包就可以了)下载网址Index of /6.5/os/Source/SPackages 进去之后找到对应的包(包含源码的)我需要的是这个内核的源码包kernel-2.6.32-431.el6.src.rpm
2、源码包下载后将其解压(在windos下用解压工具就解压了在linux下用rpm2cpio rpm | cpio -idmv)感觉还是windos解压直观。解压。
到想编译模块的目录下直接执行下面的命令就可编译 命令中写上你自己的内核版本我的是696的
make -C /lib/modules/2.6.32-696.el6.x86_64/build M=`pwd` modules
替换模块
CentOS更新内核模块_liteblue的博客-CSDN博客_ko.xz
到此为止
下面的是全部都编译
3、编译,一般内核裁剪什么的用make menuconfig 配置生成.config文件。咱么这直接将系统的拷贝到咱们的目录下命令(linux-2.6.32-431.el6]# cp /boot/config-2.6.32-431.el6.x86_64 ./.config )
之后make dep
之后就make 看系统是几核的之后在多核编译选择我是四核和所以make -j 4 编译。我的二十多分钟编译完成。我这里是centos 自己编译的时候也可以指定编译的内核版本号,否则默认的就是一个大的版本号,没有小版本号影响后期的kdump配置也是麻烦事。直接make的时候指定 make -j9 KERNELVERSION=2.6.32-696.el6.x86_64 。好多模块程序用uname-r来检测内核版本如果不改的话也是一堆麻烦事
之后make modules_install
之后 make install
之后重启 如果有多个内核的话建议把 grub.conf 里面的timeout配置长一点否则原始配置是5s。还没有选择呢就给你默认选择了内核了。你都来不及选择。
4、编译的时候报错crypto/signature/ksign-publickey.c: key.h: No such file or directory 用make menuconfig 去掉下面两项。自我感觉不好,编译不过这个模块就不编译了,感觉有点强暴的意思。不过去掉就去掉吧,暂时是没有什么用。
1) Select "Enable loadable module support", then "Module signature verification (EXPERIMENTAL)". Disable it.
2) Then go back to the main menu, select "Cryptographic API" then "In-kernel signature checker (EXPERIMENTAL)" and disable that one too.