Kernel
核心二進製文件和核心模組建構源的放置?
我正在嘗試為 Linux 中的核心模組開發設置環境。我已經在主文件夾中建構了核心,並希望將原始碼和二進製文件放置到正確的位置,以便正確包含。
建構核心模組的範例包括:
#include <linux/init.h> #include <linux/module.h>
連結器查找這些標頭的絕對路徑是什麼?
我一般是這樣處理這個問題的。我在 Fedora 19 系統上,但這適用於任何提供
locate
服務的發行版。$ locate "linux/init.h" | grep include /usr/src/kernels/3.13.6-100.fc19.x86_64.debug/include/linux/init.h /usr/src/kernels/3.13.7-100.fc19.x86_64.debug/include/linux/init.h /usr/src/kernels/3.13.9-100.fc19.x86_64/include/linux/init.h /usr/src/kernels/3.13.9-100.fc19.x86_64.debug/include/linux/init.h
您的路徑會有所不同,但關鍵是您想要求
locate
查找包含的內容(“linux/init.h”)並過濾這些結果以查找關鍵字include
.還有一些發行版特定的方法可以使用 RPM (Redhat) 或 APT (Debian/Ubuntu) 搜尋這些位置。
海合會
但是請注意,C/C++ 文件中的路徑是相對的:
#include <linux/init.h>
這樣當您呼叫編譯器時
gcc
,您可以覆蓋您想要使用的包含文件的位置。這是通過開關控制的-I <dir>
。摘自 man gcc
-I dir Add the directory dir to the list of directories to be searched for header files. Directories named by -I are searched before the standard system include directories. If the directory dir is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated . If dir begins with "=", then the "=" will be replaced by the sysroot prefix; see --sysroot and -isysroot.
外部模組
有這篇文章討論瞭如何將他們自己的核心模組的開發合併到 Linux 核心中包含的“建構環境”中。文章標題為:驅動程序移植:編譯外部模組。本文還介紹了核心的 makefile 的組織:makefiles.txt。
對於核心新手,還有這篇文章:來自kernelnewbies.org網站的 KernelHeaders。
**注意:**核心使用 KBuild 系統,此處將其作為核心隨附的文件的一部分進行介紹。
參考