关于内核模块编译的过程中,往往我们仅仅需要其中一个小的模块,但是却因为内核源码的庞杂而止步与模块依赖的筛选过程中。
为了更加便捷得对内核各个模块进行管理,这里提供一个小脚本来进行指定模块相关得模块留存,不相关的模块代码自动清除。
单独对内核指定模块进行编译,主要使用如下命令:
在相对目录为:../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
总体思路是:
以下脚本的运行路径同样为以上的相对目录下
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...