从驱动程序编译开始,驱动程序编译需要内核源码支持,所以第一个问题就是下载源码
下载源码需要先知道自己的内核版本,
[root@localhost /]# uname -r
3.10.0-862.el7.x86_64
首先找到www.kernel.org发现并没有所需要的内核版本
官方解释说看到在-后面有任何东西,表示你现在正在运行一个发行版本(distribute kernel),要内核请找发行这个版本的人。
我的系统是Centos,查了下是http://vault.centos.org/
查看自己系统版本
[root@localhost /]# cat /proc/version
Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018
然后下载并相应版本下的rpm包
[root@localhost ~]# rpm -ivh kernel-3.10.0-123.el7.src.rpm
这时会产生目录/root/rpmbuild/SPECS和/root/rpmbuild/SOURCES。
利用rpmbuild命令安装,发现系统并没有带rpmbuild,所以安装rpmbuild。
以为是yum install rpmbuild, 没找到。。。所以知道挂载安装盘找到相应的rpm包安装。结果在挂载/dev/cdrom时卡死。。。无法umount
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
结果又是查查查。。。
fuser /mnt
返回相应的进程号,
kill -9 进程号
成功挂载后安装,相应的依赖包用yum安装,最后发现其实不叫rpmbuild。。叫rpm-build。。。。所以yum装就可以了。。。
进入SPECS目录
[root@localhost SPECS]# rpmbuild -bp --target=$(uname -m) kernel.spec
Building target platforms: x86_64
Building for target x86_64
error: Failed build dependencies:
pesign >= 0.109-4 is needed by kernel-3.10.0-123.el7.x86_64
elfutils-devel is needed by kernel-3.10.0-123.el7.x86_64
zlib-devel is needed by kernel-3.10.0-123.el7.x86_64
binutils-devel is needed by kernel-3.10.0-123.el7.x86_64
newt-devel is needed by kernel-3.10.0-123.el7.x86_64
python-devel is needed by kernel-3.10.0-123.el7.x86_64
perl(ExtUtils::Embed) is needed by kernel-3.10.0-123.el7.x86_64
bison is needed by kernel-3.10.0-123.el7.x86_64
audit-libs-devel is needed by kernel-3.10.0-123.el7.x86_64
numactl-devel is needed by kernel-3.10.0-123.el7.x86_64
pciutils-devel is needed by kernel-3.10.0-123.el7.x86_64
缺啥yum啥
成功解析出的内核源码在/root/rpmbuild/BUILD中,把它放到/usr/src/kernel/里
新解析出的内核源码有一个configs文件,其实还有一个.config文件,因为是隐藏的所以之前没有发现,还以为make oldconfig是使用了configs里的文件,其实用的是.cofnig。。。
接着开始编译
make(经历一段漫长的等待。。。)
编译内核镜像
make bzImage
Kernel: arch/x86/boot/bzImage is ready (#2)
安装内核模块
make modules_install
执行结束之后,会在/lib/modules下生成新的目录/lib/modules/3.13.0-48-generic/, 下面的build文件就是编译模块的要用到的文件。至此内核编译完成。