編譯核心指定模組,篩選當前模組依賴的元件

2021-09-28 12:28:35 字數 2717 閱讀 1202

關於核心模組編譯的過程中,往往我們僅僅需要其中乙個小的模組,但是卻因為核心原始碼的龐雜而止步與模組依賴的篩選過程中。

為了更加便捷得對核心各個模組進行管理,這裡提供乙個小腳本來進行指定模組相關得模組留存,不相關的模組**自動清除。

單獨對核心指定模組進行編譯,主要使用如下命令:

在相對目錄為:../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/bash

path=

$1#指令碼輸入要編譯的驅動,僅支援篩選乙個,如果要篩選多個,可以增加外層迴圈,乙個乙個嘗試

for i in

`/usr/bin/ls`

doif

[ -d "$i"];

then

for 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/null

fidone

else

#不為目錄的則檢測檔案是否被我們要編譯到驅動依賴

/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/$j

echo -e "$i/$j is neccessary for $path\n "

>>

"$path"_necessary_file

else

/usr/bin/rm -r $i/"$j"-bak 2>/dev/null

fifidone

最終的結果為:

篩選前:

[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

核心模組編譯

第一步,編寫模組 include include module license gpl 許可許可權證明,gpl開源的協議 module author embedsky 作者 module description hello world module 描述 static int hello init ...

核心編譯 模組編譯

目前是嵌入式 linux 的初學者感覺有所體會 1.從demo 學起 tiny 6410 上的開發,我的任務不斷是新增小模組。交叉編譯器,以及其它一系列 tool chains 可直使用產商提供的工具。避免過多細節的好處在於,你可以從整體處著手你從書本學到的理論知識。2.kernel 編譯其它很簡單...

linux modules 指定模組編譯

最近做linux下驅動模組的編譯工作,整個核心全編會浪費非常長的時間,必須執行模組編譯。下面是具體注意點 假如要編譯drivers usb gadget legacy下的模組。1 cd usr src linux 4.10.11 2 make modules subdirs drivers usb ...