首页 > 编译内核指定模块,筛选当前模块依赖的组件

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

关于内核模块编译的过程中,往往我们仅仅需要其中一个小的模块,但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中。

为了更加便捷得对内核各个模块进行管理,这里提供一个小脚本来进行指定模块相关得模块留存,不相关的模块代码自动清除。

单独对内核指定模块进行编译,主要使用如下命令:

在相对目录为:../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
 " >> "$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
 " >> "$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

更多相关:

  •     定位到根目录 cd/ 安装wget  yum install wget 下载nodejs(可以去下载 | Node.js 中文网中国官网查看最新版的下载地址) wget https://nodejs.org/download/release/v12.13.1/node-v12.13.1-linux-x...

  •   vim /etc/profile 然后在最后加入下面的代码: export  JAVA_HOME=/usr/local/java/jdk export  PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:$JAVA_HOME/...

  • 在执行脚本上加入如下配置即可#!/bin/bashJAVA_HOME=/usr/java/jdk1.8.0_152export PATH=$PATH:$JAVA_HOME/bin 转载于:https://www.cnblogs.com/jimw/p/11126437.html...

  •   这是由于没有保存文档导致 说明: [Finished in 19.4s with exit code 1]-表示执行时间 [shell_cmd: python3 -u "/Volumes/B/我的工作文档/case/superman_wap/进单/MSjindan.py"] -表示执行的shell命令 [dir: /Volum...

  • PCL1.9.1并没有支持vs2015版本的exe版本,然后需要下载PCL的源码重新自己CMake编译出vs2015版本的编译的目的:1、得到支持vs2015的版本的PCL1.9.1 前期准备1、下载PCL源码:https://github.com/PointCloudLibrary/pcl2、下载安装版(主要是为...

  • 下载gcc文档,第三章有详细的build options的介绍。 最近我用到2个关键的option 来定位问题,简单介绍一下: 1. -E: 只是进行预编译,不会编译和link。用于检查宏在代码中的展开是否符合预期; 2.--verbose: 开启verbose mode, 用于输出编译整个过程中的详细信息,可帮助查看build...

  • 浅谈GCC预编译头技术 文/jorge ——谨以此文,悼念我等待MinGW编译时逝去的那些时间。 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA。后来一直用到C++ Builder,尽管Borland的广告无时无刻不在吹嘘其编译速度,我却从没有对这个问题上心过,因为心里根本没有“...

  • 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。同一个体系结构可以运行...

  • 文章目录前言Makefile 编译流程1. 平台变量/环境变量的初始化。2. 编译需要的源码文件变量初始化。3. include 目录的设置。4. 编译的执行逻辑。问题记录1:可能的打包命令`ar` 失效问题5. 执行具体的编译指令问题记录2: jar 包编译...

  • 我也遇到过这个问题.这可能不是理想的方式,但它有效.我做了以下事情来解决这个问题 –sudo apt-get install python3-gdbm这为python3安装了gdbm库,但是因为apt-get和anaconda是两个独立的包管理器;这不会解决你的问题.我们主要这样做是为了获取.so共享库,我们将把它放在我们的anaco...

  • 1、去官网下载和自己系统匹配的文件:  英文网址:https://nodejs.org/en/download/  中文网址:http://nodejs.cn/download/  通过  uname -a  命令查看到我的Linux系统位数是64位(备注:x86_64表示64位系统, i686 i386表示32位系统),如图...

  • 一、简介 LLVM LLVM(之前称为低级虚拟机Low Level Virtual Machine)是一种非常强大的编译器基础架构框架,专门为使用您喜爱的编程语言编写的程序的编译时、链接时和运行时优化而设计。LLVM 可运行于若干个不同的平台之上,它以能够生成快速运行的代码而著称。 LLVM以C++编写而成,对开发者保持开放,并...

  • Ubuntu 12.04 64bit中安装firefox 26中的flash player插件的方法 昨天, 有最新的firefox 26更新了,可是我在软件更新中无法下载到ubuntu官方源中的flash plugin,详细的情况可以参见如下网页,这个问题我一年前也遇到过,特记录下来,以备后来查阅. http://blog....

  • 问题:使用 QT 编写视频展现程序报错找不到运行时库文件 解决办法: 首先 sudo find / -name libpulse.so* 然后 sudo cp /usr/lib/x86_64-linux-gnu/libpulse.so.0 /usr/lib/libpulse.so 对于libpulse-mainloop-glib...