关于内核模块编译的过程中,往往我们仅仅需要其中一个小的模块,但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中。
为了更加便捷得对内核各个模块进行管理,这里提供一个小脚本来进行指定模块相关得模块留存,不相关的模块代码自动清除。

单独对内核指定模块进行编译,主要使用如下命令:
在相对目录为:../rpmbuild/BUILD/kernel-3.10.0-957.5.1.el7/linux-3.10.0-957.5.1.el7.x86_64的目录下执行命令make M=fs/ceph,M为指定模块代码的路径,我这里编译的是ceph的内核模块ceph.ko,所以指定路径为fs/ceph

总体思路是:

  1. 重命名相对目录下第一个文件夹中的一个文件或者文件夹
  2. 编译需要编译的KO,如果当前驱动依赖备份的文件夹,则会返回编译失败;
  3. 编译成功,则删除备份的文件夹或者文件

以下脚本的运行路径同样为以上的相对目录下
PS:有一个文件Module.symvers可以提前备份,该文件并不影响编译,但影响最终的驱动信息,它决定驱动的依赖和版本

#!/bin/bashpath=$1 #脚本输入要编译的驱动,仅支持筛选一个,如果要筛选多个,可以增加外层循环,一个一个尝试for i in `/usr/bin/ls`
doif [ -d "$i" ];thenfor j in `/usr/bin/ls $i` #内核驱动文件夹仅为一级目录,其次的目录可以不用深入do /bin/rm $path/*.o 2>/dev/null #编译前将已存在的o二进制文件删除,防止仅仅链接.o文件/usr/bin/mv $i/$j $i/$j-bak  #重命名一个文件夹或者文件/usr/bin/make M=$path  #进行编译if [ $? -ne 0 ];then/usr/bin/mv $i/"$j"-bak "$i"/"$j"echo -e "$i/$j is neccessary for $path\n " >> "$path"_necessary_file else/bin/rm  $i/"$j"-bak 2>/dev/nullfidoneelse #不为目录的则检测文件是否被我们要编译到驱动依赖/usr/bin/rm $path/*.o 2>/dev/null/usr/bin/mv $i/$j $i/"$j"-bak/usr/bin/make M=$pathif [ $? -ne 0 ];then/usr/bin/mv $i/"$j"-bak $i/$jecho -e "$i/$j is neccessary for $path\n " >> "$path"_necessary_file else/usr/bin/rm -r $i/"$j"-bak 2>/dev/nullfifi
done

最终的结果为:
筛选前:

[root@node1 linux-3.10.0-957.5.1.el7.x86_64]# ls
arch                CREDITS             firmware         Kbuild                Makefile        REPORTING-BUGS    sound    vmlinux.id
block               crypto              fs               Kconfig               Makefile.qlock  samples           test     x509.genkey
centos-kpatch.x509  Documentation       hdrwarnings.txt  kernel                mm              scripts           test.sh
centos-ldup.x509    drivers             include          ldconfig-kernel.conf  Module.symvers  security          tools
configs             drivers.undef       init             lib                   net             signing_key.priv  usr
COPYING             extra_certificates  ipc              MAINTAINERS           README          signing_key.x509  virt

筛选后:

[root@node1 linux-3.10.0-957.5.1.el7.x86_64]# ls
arch  fs  include  Makefile  Module.symvers  net  scripts  tools

编译内核指定模块,筛选当前模块依赖的组件相关推荐

  1. 如何为英伟达TX2编译内核和设备树

    在编译内核和设备树之前,首先默认已经安装了JetPack,如果没有安装,请参考其它资料进行安装. 1.首先需要下载编译内核需要用到的工具链,通过下面的链接下载. https://developer.n ...

  2. NVIDIA Jetson Xavier NX 修改设备树和编译内核

    为 NVIDIA Jetson Xavier NX 更改设备树和编译内核 NVIDIA Jetson Xavier NX 模块 如果您正在为 NVIDIA Jetson 模块设计定制载板,您可能需要编 ...

  3. 日记 [2008年03月23日]不编译内核给iptables增加模块

    TFTP上传所需软件包到 /usr/src/ 目录下 ipp2p-0.8.2.tar.gz patch-o-matic-ng-20060509 iptables-1.3.5.tar.bz2 l7-pr ...

  4. 在Debian 4.0rc3上编译内核2.6.24时加入Layer7模块笔记[防火墙中在TCP/IP第七层Layer7应用层阻挡QQ,MSN等软件的应用]...

    作者:何祖彬[RobinHe] Mail:zubin.he@gmail.com 始于2008年8月3日 上午 版本号:KernelLayer7-V1.0-20080803,2008年8月3日首版 转载 ...

  5. csky linux 编译内核,TQ2440的EmbedSky_hello模块编译内核问题及解决

    已在内核代码中添加EmbedSky_hello驱动为例,进行内核编译时候出现了一下几个问题: 1.在 /opt/EmbedSky/linux 2.6.30.4/drivers/char目录下修改&qu ...

  6. 初探linux内核编程,参数传递以及模块间函数调用

    一.前言 我们一起从3个小例子来体验一下linux内核编程.如下: 1. 内核编程之hello world 2. 模块参数传递 3. 模块间函数调用 二.准备工作 首先,在你的linux系统上面安装l ...

  7. OpenCV环境配置:Ubuntu18.04编译OpenCV4.2.0和contrib模块记录

    OpenCV环境配置:Ubuntu18.04编译OpenCV4.2.0和contrib模块记录 1.下载源码和安装依赖包 2.解压源码文件和配置路径 3.配置Cmake并编译OpenCV 4.导入Op ...

  8. 单独编译使用WebRTC的音频处理模块

    不推荐单独编译 WebRTC 中的各个模块出来使用. 昨天有幸在 Google 论坛里询问到 AECM 模块的延迟计算一事,Project member 说捣腾这个延迟实际上对 AECM 的效果没有帮 ...

  9. nginx安装编译,动态添加模块及其各模块的作用

    nginx第三方模块下载地址: https://www.nginx.com/resources/wiki/modules/ nginx地址下载: http://nginx.org/en/downloa ...

最新文章

  1. A* 算法之父、人工智能先驱Nils Nilsson逝世 | 缅怀
  2. SOAMANAGER配置后无法登录问题
  3. 安卓相机 高帧率_Android MediaCodec和摄像头:如何实现更高的帧速率从相机获取帧原始数据?...
  4. php怎么实现点卡充值,利用自动发卡程序的点卡充值传奇脚本
  5. Cisco 3560 Qos限速配置
  6. Java线程专栏文章汇总(转)
  7. ibatis mybatis sql语句配置 符号不兼容 大于号 小于号
  8. 微软sql服务器可以卸载,完美卸载SQL Server 2008的方法
  9. 软件测试 之Web项目实战解析(附全套实战项目教程+视频+源码)
  10. AD14一般使用流程
  11. 网络工程毕业设计之--校园网络规划与设计
  12. 2.4G无线收发器SI24R1低成本替代CI24R1
  13. c语言地址符作用,理解C语言取地址符
  14. office2021相对旧版本有哪些优势?
  15. 苏阳乐队杭州巡演后记
  16. ns-3 教程 —— 概念概述(第一个 ns-3 程序)
  17. 【Lingo】分段函数
  18. HighSpeedCharting简单的使用
  19. 域服务器 文件服务器,域服务器文件服务器
  20. 对于机器学习中数据拟合度和模型复杂度的一些建议

热门文章

  1. 【转】堆栈和托管堆 c#
  2. [导入]Java线程的深入探讨
  3. c++ memset 语言_自学C语言不知道从哪儿下手?学习框架都帮你列好了!
  4. oracle层次查询用处,Oracle描述层次查询(hierarchicalquery)
  5. win7调整屏幕亮度_番禺区户外LED屏幕求购,区LCD屏幕解决方案
  6. 程序员笔试面试后上机_2021年国考笔试成绩查询后,面试准备阶段需要做好四方面...
  7. mysql根据两列去重复_mysql对两列去重复数据库
  8. html链接伪类设置鼠标悬停,链接伪类可以控制超链接的样式吗?是怎样实现的?...
  9. 网上商城代码实现_中国中铁网上商城转型敏捷开发模式,实现快速反应、快速迭代...
  10. python 列表推导式