想在CentOS系统直接编译内核模块,然后运行调试,这样做主要还是用于学习Linux内核。当然也可以进行交叉编译,在开发板上跑模块调试,但是,这样做比较慢而且麻烦,因此上网找些办法在CentOS上搭建可以进行内核模块编译的环境,以下内容大部分出自博客,在此借用,勿怪。
1,安装工具
# yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
# yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
# yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
http://vault.centos.org,选择合适的内核版本,当前使用的是kernel-3.10.0-693.1.1.el7.src.rpm。
可能用到
# cat /etc/redhat-release
# uname -a
3,解压源码
# mkdir -p ~/kernel/centos7/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
# echo '%_topdir %(echo $HOME)/kernel/centos7' > ~/.rpmmacros
路径可自行确定。
# cd ~
# rpm -i kernel-3.10.0-693.1.1.el7.src.rpm
解压之后,在~/kernel/centos7/BUILD/kernel-3.10.0-693.1.1.el7/linux-3.10.0-693.1.1.el7.x86_64/目录,就是当前系统的内核源码。
4,编译内核获取Module.symvers文件
# cd ~/kernel/centos7/BUILD/kernel-3.10.0-693.1.1.el7/linux-3.10.0-693.1.1.el7.x86_64
# cp /boot/config-`uname -r` .config
拷贝当前系统配置文件
# make oldconfig
# make menuconfig
配置menuconfig
# make
5,编译模块
Makefile
KDIR ?= ~/kernel/centos7/BUILD/kernel-3.10.0-693.1.1.el7/linux-3.10.0-693.1.1.el7.x86_64
完成之后insmod。