contributed by < nosba0957 >
檢查清單
[ ] 研讀前述 ==Linux 效能分析== 描述,在自己的實體電腦運作 GNU/Linux,做好必要的設定和準備工作 $\to$ 從中也該理解為何不希望在虛擬機器中進行實驗;
[ ] 閱讀〈Linux 核心模組運作原理〉並對照 Linux 核心原始程式碼 (v6.1+),解釋 insmod 後,Linux 核心模組的符號 (symbol) 如何被 Linux 核心找到 (使用 List API)、MODULE_LICENSE 巨集指定的授權條款又對核心有什麼影響 (GPL 與否對於可用的符號列表有關),以及藉由 strace 追蹤 Linux 核心的掛載,涉及哪些系統呼叫和子系統?
在 /linux/kernel/module/main.c 中的 load_module 函式中可以找到 simplfy_symbols 函式的呼叫,在 simplify_symbols 內看到 case SHN_UNDEF: 內呼叫 resolve_symbol_wait 再呼叫到 resolve_symbol。最後找到 find_symbol 函式,其中使用到 list_for_each_entry_rcu。再深入查看可以在 find_exported_symbol_in_section 找到 bsearch,在 include/linux/bsearch.h 可以看到 bsearch 的實作,也就是透過 binary search 找到 symbol。MODULE_LICENSE 的影響是若此核心模組宣告非為 GPL,則其無法使用透過 EXPORT_SYMBOL_GPL 的 symbol。從 strace 中看到的系統呼叫有,mmap,mprotect,fstat,fcntl等。
[ ] 閱讀《The Linux Kernel Module Programming Guide》(LKMPG) 並解釋 simrupt 程式碼裡頭的 mutex lock 的使用方式,並探討能否改寫為 lock-free;