linux下模組編譯基本知識和格式

2021-07-10 02:11:07 字數 882 閱讀 5298

make -c 只編譯不鏈結

make -c切換到指定目錄再執行make過程

make -c $(linuxroot) m=$(pwd)

extra_cflags="$(extra_flags)" modules

當使用者需要以某個核心為基礎編譯乙個外部模組的話,程式會自動到指定的dir目錄中查詢模組原始碼,將其編譯,產生ko檔案。

核心使用一些專門的核心符號表,用於儲存模組訪問的符號和相應的位址。它們在核心**段中分三節:__kstrtab(儲存符號名),__ksymtab(所有模組可使用的符號位址),__ksymtab_gpl(gpl相容許可證下發布的模組可以使用的符號位址)。當用於靜態鏈結核心**內時,export_symbol與export_symbol_gpl巨集讓c編譯器分別往__ksymtab和__ksymtab_gpl部分相應地加入乙個專用符號。

已鏈結的模組可以匯出自己的符號,這樣其他模組就可以訪問這些符號。

insmod程式執行一下操作:1 從命令列中讀取要鏈結的模組名 2 確定模組物件**所在的檔案在系統目錄樹中的位置。對應檔案通常在/lib/modules的某個子目錄中 3從磁碟讀入存有模組目標**的檔案 4呼叫init_module系統呼叫,傳入引數:存有模組目標**的使用者態緩衝區位址,目標**長度和存有insmod程式所需要引數的使用者態記憶體區。

為了自動鏈結模組,核心要建立乙個核心執行緒來執行modprobe外部程式,該程式要考慮由於模組依賴所引起的所有可能因素。

乙個稱為depmod的外部命令在系統啟動時被執行。該程式查詢為正在執行的核心而編譯的所有模組,這些模組通常存在/lib/modules/目錄下。然後它就把所有的模組間依賴關係寫入乙個名為modules.dep的檔案,這樣modprobe就可以對該檔案中存放的資訊和/proc/modules檔案產生的鏈結模組進行比較。

cmake編譯基本知識

一 在終端內編譯 需要首先簡單介紹cmakelists的命令列 例 宣告要求的 cmake 最低版本 cmake minimum required version 2.8 宣告乙個 cmake 工程 project helloslam 設定編譯模式 set cmake build type debu...

Linux基本知識

linux環境 ubuntu 14.x 二 shell環境 在ubuntu下進入shell命令介面 ctrl alt f3 f6 退出命令介面 ctrl alt f7 shell常用命令 更改賬目密碼 passwd 檢視當前目錄 pwd 列出當前目錄先得所用檔案和目錄,後可加選項 ls 新建資料夾 ...

linux 基本知識

網路 1 網路介面 1 網路介面的命名 eth0 ethernet的簡寫,一般用於乙太網介面。wifi0 wifi是無線區域網,因此wifi0一般指無線網路介面。ath0 atheros的簡寫,一般指atheros晶元所包含的無線網路介面。lo local的簡寫,一般指本地環迴介面。2 網路介面如何...