编译内核指定模块,筛选当前模块依赖的组件
关于内核模块编译的过程中,往往我们仅仅需要其中一个小的模块,但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中。
为了更加便捷得对内核各个模块进行管理,这里提供一个小脚本来进行指定模块相关得模块留存,不相关的模块代码自动清除。
单独对内核指定模块进行编译,主要使用如下命令:
在相对目录为:../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
总体思路是:
- 重命名相对目录下第一个文件夹中的一个文件或者文件夹
- 编译需要编译的KO,如果当前驱动依赖备份的文件夹,则会返回编译失败;
- 编译成功,则删除备份的文件夹或者文件
以下脚本的运行路径同样为以上的相对目录下
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
编译内核指定模块,筛选当前模块依赖的组件相关推荐
- 如何为英伟达TX2编译内核和设备树
在编译内核和设备树之前,首先默认已经安装了JetPack,如果没有安装,请参考其它资料进行安装. 1.首先需要下载编译内核需要用到的工具链,通过下面的链接下载. https://developer.n ...
- NVIDIA Jetson Xavier NX 修改设备树和编译内核
为 NVIDIA Jetson Xavier NX 更改设备树和编译内核 NVIDIA Jetson Xavier NX 模块 如果您正在为 NVIDIA Jetson 模块设计定制载板,您可能需要编 ...
- 日记 [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 ...
- 在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日首版 转载 ...
- csky linux 编译内核,TQ2440的EmbedSky_hello模块编译内核问题及解决
已在内核代码中添加EmbedSky_hello驱动为例,进行内核编译时候出现了一下几个问题: 1.在 /opt/EmbedSky/linux 2.6.30.4/drivers/char目录下修改&qu ...
- 初探linux内核编程,参数传递以及模块间函数调用
一.前言 我们一起从3个小例子来体验一下linux内核编程.如下: 1. 内核编程之hello world 2. 模块参数传递 3. 模块间函数调用 二.准备工作 首先,在你的linux系统上面安装l ...
- OpenCV环境配置:Ubuntu18.04编译OpenCV4.2.0和contrib模块记录
OpenCV环境配置:Ubuntu18.04编译OpenCV4.2.0和contrib模块记录 1.下载源码和安装依赖包 2.解压源码文件和配置路径 3.配置Cmake并编译OpenCV 4.导入Op ...
- 单独编译使用WebRTC的音频处理模块
不推荐单独编译 WebRTC 中的各个模块出来使用. 昨天有幸在 Google 论坛里询问到 AECM 模块的延迟计算一事,Project member 说捣腾这个延迟实际上对 AECM 的效果没有帮 ...
- nginx安装编译,动态添加模块及其各模块的作用
nginx第三方模块下载地址: https://www.nginx.com/resources/wiki/modules/ nginx地址下载: http://nginx.org/en/downloa ...
最新文章
- A* 算法之父、人工智能先驱Nils Nilsson逝世 | 缅怀
- SOAMANAGER配置后无法登录问题
- 安卓相机 高帧率_Android MediaCodec和摄像头:如何实现更高的帧速率从相机获取帧原始数据?...
- php怎么实现点卡充值,利用自动发卡程序的点卡充值传奇脚本
- Cisco 3560 Qos限速配置
- Java线程专栏文章汇总(转)
- ibatis mybatis sql语句配置 符号不兼容 大于号 小于号
- 微软sql服务器可以卸载,完美卸载SQL Server 2008的方法
- 软件测试 之Web项目实战解析(附全套实战项目教程+视频+源码)
- AD14一般使用流程
- 网络工程毕业设计之--校园网络规划与设计
- 2.4G无线收发器SI24R1低成本替代CI24R1
- c语言地址符作用,理解C语言取地址符
- office2021相对旧版本有哪些优势?
- 苏阳乐队杭州巡演后记
- ns-3 教程 —— 概念概述(第一个 ns-3 程序)
- 【Lingo】分段函数
- HighSpeedCharting简单的使用
- 域服务器 文件服务器,域服务器文件服务器
- 对于机器学习中数据拟合度和模型复杂度的一些建议
热门文章
- 【转】堆栈和托管堆 c#
- [导入]Java线程的深入探讨
- c++ memset 语言_自学C语言不知道从哪儿下手?学习框架都帮你列好了!
- oracle层次查询用处,Oracle描述层次查询(hierarchicalquery)
- win7调整屏幕亮度_番禺区户外LED屏幕求购,区LCD屏幕解决方案
- 程序员笔试面试后上机_2021年国考笔试成绩查询后,面试准备阶段需要做好四方面...
- mysql根据两列去重复_mysql对两列去重复数据库
- html链接伪类设置鼠标悬停,链接伪类可以控制超链接的样式吗?是怎样实现的?...
- 网上商城代码实现_中国中铁网上商城转型敏捷开发模式,实现快速反应、快速迭代...
- python 列表推导式