编译内核指定模块,筛选当前模块依赖的组件
生活随笔
收集整理的這篇文章主要介紹了
编译内核指定模块,筛选当前模块依赖的组件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于內核模塊編譯的過程中,往往我們僅僅需要其中一個小的模塊,但是卻因為內核源碼的龐雜而止步與模塊依賴的篩選過程中。
為了更加便捷得對內核各個模塊進行管理,這里提供一個小腳本來進行指定模塊相關得模塊留存,不相關的模塊代碼自動清除。
單獨對內核指定模塊進行編譯,主要使用如下命令:
在相對目錄為:../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
總結
以上是生活随笔為你收集整理的编译内核指定模块,筛选当前模块依赖的组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 文件IO与内存映射:内存映射
- 下一篇: qq个性签名无聊