Linux核心如何動態使用模組?
了解 Linux 核心說
核心在管理模組時有兩個關鍵任務要執行。第一項任務是確保核心的其餘部分可以訪問模組的全域符號,例如其主函式的入口點。一個模組還必須知道核心和其他模組中符號的地址。因此,**當一個模組被連結時,引用被一勞永逸地解決了。**第二個任務包括跟踪模組的使用,以便在另一個模組或核心的另一部分正在使用它時不會解除安裝任何模組。一個簡單的引用計數跟踪每個模組的使用情況。
任何共享庫都可以動態連結(使用
LD_LIBRARY_PATH
)和動態載入(通過dlopen()
,dlsym()
和dlclose()
),這是否正確?模組是 Linux 核心的共享庫嗎?
Linux核心如何動態使用模組?是通過動態連結(使用
LD_LIBRARY_PATH
)還是動態載入(通過dlopen()
,dlsym()
和dlclose()
)?
任何共享庫都可以動態連結(使用
LD_LIBRARY_PATH
)和動態載入(通過dlopen()
,dlsym()
和dlclose()
),這是否正確?是的。不同的是,動態連結是由動態連結器驅動的,當程序啟動時(從程序作者的角度來看),庫已經被連結,所有的符號都已經被解析;動態載入涉及手動完成所有這些操作。
模組是 Linux 核心的共享庫嗎?
或多或少,但載入機制不同。動態連結器和
libdl
僅是使用者空間,它們不能在核心中使用。Linux核心如何動態使用模組?是通過動態連結(使用
LD_LIBRARY_PATH
)還是動態載入(通過dlopen()
,dlsym()
和dlclose()
)?核心使用 載入模組
load_module
,它自己完成所有工作:載入 ELF 對象,映射所需的段,執行所有重定位等。它還執行一些特定於模組的任務:檢查它們的許可證,將它們掛鉤sysfs
,呼叫它們的初始化函式…
load_module
使用init_module
orfinit_module
系統呼叫從使用者空間訪問。