Kernel

核心二進製文件和核心模組建構源的放置?

  • April 20, 2014

我正在嘗試為 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 系統,此處將其作為核心隨附的文件的一部分進行介紹。

參考

引用自:https://unix.stackexchange.com/questions/125656