1. 程式人生 > >linux kernel標頭檔案包含問題

linux kernel標頭檔案包含問題

一 平臺相關程式碼

     即arch/xxx目錄下的程式碼能包含的標頭檔案有:

     1.  arch/$(SRCARCH)/include/asm為平臺相關標頭檔案

     2.include/asm-generic為所有平臺共用的標頭檔案,跟具體平臺無關,提取平臺相關的共同定義部分,如:

./arch/arm64/include/asm/irq.h:11:#include <asm-generic/irq.h>

二 平臺無關程式碼

     即除了arch/xxx目錄之外的程式碼可以包含的標頭檔案有:

  1. 平臺相關標頭檔案,具體路徑由頂層makefile定義:

LINUXINCLUDE    := -I$(srctree)/arch/$(hdr-arch)/include \
                   -Iarch/$(hdr-arch)/include/generated

-Iinclude \
                   $(if $(KBUILD_SRC), -I$(srctree)/include) \

                   -include 

    2. /include

/include/linux directory is for generic header files to define interfaces between components of the kernel. In most situations, you will find all the kernel functionalities you need in these headers

3. include/asm-generic

      原則上不建議直接包含include/asm-generic中的標頭檔案,而是應該通過平臺相關的標頭檔案來間接包含,當然這只是原則上,也有直接包含的

注意不管是平臺相關程式碼還是平臺無關程式碼,包含的asm-generic/xxx.h實際上都是arch/$(hdr-arch)/include/generated目錄下的,而不是include/asm-generic目錄下的,arch/$(hdr-arch)/include/generated是在在編譯之初由頂層的Makefile的根據規則生成的:

PHONY += asm-generic
asm-generic:
    $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
                src=asm obj=arch/$(SRCARCH)/include/generated/asm
    $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
                src=uapi/asm obj=arch/$(SRCARCH)/include/generated/uapi/asm

實際上就是根據include/asm-generic目錄下的標頭檔案生成的。

三 usr/include

為kernel匯出的標頭檔案,主要給應用空間使用,比如libc的編譯需要用到這些都檔案。