contributed by < otteryc
>
另外,在進行開發時,由於編譯核心模組需要 linux-header
, clangd 沒有辦法自動找到對應的 include path 以及編譯參數,可以透過 Bear 來解決,並且在 .clangd 檔案中,加入以下敘述,即可抑制 clangd 產生不正確的警告或錯誤。
根據 LKMPG ,以下是一個編譯核心模組的 Makefile:
在這個例子中, make
會切換到對應版本的 header 目錄,並由該目錄下的 Makefile 接手編譯。
另外,在 Real world Makefile 中有許多 obj-y
以及 obj-m
的宣告,根據 Linux Makfile documentation,宣告為 obj-y
的模組會被編入 vmlinux ,而 obj-m
則會編成 loadable module 。
在上述開發環境進行 make check
的時候,會出現以下錯誤:
原因是在 Linux 核心在 commit 1aaba11 後, create_create
API 的傳入參數刪除了 module pointer ,所以編譯時會發生函式宣告與呼叫不一致的錯誤。對此,有依不同核心版本,調整 API 呼叫的必要,已經提出 Pull Request 並獲接受。
sort_read
函式內,第 65 、 66 行的 early-return 可能有造成 sort_buffer
所指向的記憶體空間發生記憶體洩漏的疑慮。但是 User Mode Linux 似乎不能搭配 Valgrind 進行分析,不知道除了重編 Kernel 並選取 KMEMLEAK 工具以外,有沒有不需要重新編譯 Kernel 的方式?