本文转载自: http://blog.csdn.net/ipqtjmqj/article/details/53302058
linux内核头文件可分三大类
原文地址http://cpbest.blog.163.com/blog/static/412415192012520028899/
linux内核根据与体系结构的关系,可以分为以下三大类头文件:
<linux/xxx.h>
linux内核标准头文件,与体系结构无关,位于内核源码顶层include目录中。
eg: linux-4.16.3/include
<asm/xxx.h>
与体系结构(CPU Core)相关的头文件,位于具体体系结构目录下的include目录中,
比如ARM,则位于arch/arm/include
,
eg: linux-4.16.3/arch/arm/include
<mach/xxx.h>
与具体的机器machine/板子(SOC)系统相关的头文件,位于某一系统结构(CPU Core)相关的特定SOC/machine所在目录下的include目录中。
比如对于三星的s3c64xx系统的SOC/machine,则相关的头文件位于arch/arm/mach-s3c64xx/include
中。
eg: linux-4.16.3/arch/arm/mach-s3c64xx/include
PS:内核在编译过程中会将以上三个目录include
、arch/${ARCH}/include
、arch/${ARCH}/mach-XXX/include
作为默认的头文件搜索目录。
其他情况
还有其他一些情况,比如对于三星的SOC,除了mach-XXX目录外,还有一个平台(platform)相关的目录,在其中包含了所有三星的SOC共有的平台相关的代码和头文件,这些目录名以plat开头。相关的头文件在arch/arm/plat-samsung/include
中, 在编程时用<plat/xxx.h>方式包含。
以上描述的与体系结构相关的include目录下都分别只有一个目录asm、mach、plat。
它们与底层硬件相关性由大到小依次为:mach > plat > asm。
~
举例
以从 https://www.kernel.org/ 下载的 5.8.10 和 4.19.146 版本的内核源码为例,
找出其所有的include
[me@ukylin workplace]$ tar -xJf linux-5.8.10.tar.xz
[me@ukylin workplace]$ cd linux-5.8.10/
[me@ukylin linux-5.8.10]$ ls
arch COPYING Documentation include Kbuild lib Makefile README security usr
block CREDITS drivers init Kconfig LICENSES mm samples sound virt
certs crypto fs ipc kernel MAINTAINERS net scripts tools
[me@ukylin linux-5.8.10]$ find . -name include -type d
./tools/objtool/arch/x86/include
./tools/bootconfig/include
./tools/testing/selftests/rcutorture/formal/srcu-cbmc/include
./tools/testing/selftests/powerpc/nx-gzip/include
./tools/testing/selftests/powerpc/include
./tools/testing/selftests/kvm/include
./tools/testing/selftests/futex/include
./tools/testing/ktest/examples/include
./tools/lib/lockdep/include
./tools/lib/perf/include
./tools/perf/arch/sh/include
./tools/perf/arch/powerpc/include
./tools/perf/arch/arm/include
./tools/perf/arch/s390/include
./tools/perf/arch/x86/include
./tools/perf/arch/xtensa/include
./tools/perf/arch/sparc/include
./tools/perf/arch/arm64/include
./tools/perf/arch/csky/include
./tools/perf/arch/riscv/include
./tools/perf/util/include
./tools/perf/include
./tools/arch/sh/include
./tools/arch/powerpc/include
./tools/arch/arc/include
./tools/arch/arm/include
./tools/arch/alpha/include
./tools/arch/microblaze/include
./tools/arch/s390/include
./tools/arch/h8300/include
./tools/arch/x86/include
./tools/arch/parisc/include
./tools/arch/ia64/include
./tools/arch/xtensa/include
./tools/arch/hexagon/include
./tools/arch/mips/include
./tools/arch/sparc/include
./tools/arch/arm64/include
./tools/arch/csky/include
./tools/arch/riscv/include
./tools/include
./sound/soc/amd/include
./drivers/gpu/drm/nouveau/include
./drivers/gpu/drm/arm/display/include
./drivers/gpu/drm/amd/acp/include
./drivers/gpu/drm/amd/include
./drivers/gpu/drm/amd/display/include
./drivers/staging/media/ipu3/include
./drivers/staging/media/atomisp/include
./drivers/staging/unisys/include
./drivers/staging/rtl8723bs/include
./drivers/staging/rtl8188eu/include
./drivers/misc/habanalabs/include
./drivers/net/wireless/broadcom/brcm80211/include
./usr/include
./security/apparmor/include
./security/selinux/include
./arch/nios2/include
./arch/sh/include
./arch/um/include
./arch/powerpc/include
./arch/arc/plat-eznps/include
./arch/arc/include
./arch/arm/mach-s3c64xx/include
./arch/arm/mach-rpc/include
./arch/arm/plat-orion/include
./arch/arm/plat-samsung/include
./arch/arm/mach-omap2/include
./arch/arm/mach-omap1/include
./arch/arm/plat-versatile/include
./arch/arm/mach-ebsa110/include
./arch/arm/mach-davinci/include
./arch/arm/plat-omap/include
./arch/arm/mach-dove/include
./arch/arm/mach-sa1100/include
./arch/arm/mach-footbridge/include
./arch/arm/mach-ep93xx/include
./arch/arm/mach-pxa/include
./arch/arm/mach-iop32x/include
./arch/arm/mach-spear/include
./arch/arm/mach-ixp4xx/include
./arch/arm/mach-s3c24xx/include
./arch/arm/mach-exynos/include
./arch/arm/plat-pxa/include
./arch/arm/include
./arch/alpha/include
./arch/microblaze/include
./arch/s390/include
./arch/c6x/include
./arch/h8300/include
./arch/openrisc/include
./arch/x86/include
./arch/unicore32/include
./arch/parisc/include
./arch/ia64/include
./arch/xtensa/variants/dc233c/include
./arch/xtensa/variants/csp/include
./arch/xtensa/variants/fsf/include
./arch/xtensa/variants/de212/include
./arch/xtensa/variants/test_mmuhifi_c3/include
./arch/xtensa/variants/dc232b/include
./arch/xtensa/variants/test_kc705_hifi/include
./arch/xtensa/variants/test_kc705_be/include
./arch/xtensa/platforms/xtfpga/include
./arch/xtensa/platforms/xt2000/include
./arch/xtensa/platforms/iss/include
./arch/xtensa/include
./arch/nds32/include
./arch/hexagon/include
./arch/mips/include
./arch/sparc/include
./arch/m68k/include
./arch/arm64/include
./arch/csky/include
./arch/riscv/include
./include
[me@ukylin linux-5.8.10]$
[me@ukylin workplace]$ tar -xJf linux-4.19.146.tar.xz
[me@ukylin workplace]$ cd linux-4.19.146/
[me@ukylin linux-4.19.146]$ ls
arch COPYING Documentation fs ipc kernel MAINTAINERS net scripts tools
block CREDITS drivers include Kbuild lib Makefile README security usr
certs crypto firmware init Kconfig LICENSES mm samples sound virt
[me@ukylin linux-4.19.146]$ find . -name include -type d
./tools/objtool/arch/x86/include
./tools/testing/selftests/rcutorture/formal/srcu-cbmc/include
./tools/testing/selftests/powerpc/include
./tools/testing/selftests/bpf/include
./tools/testing/selftests/kvm/include
./tools/testing/selftests/futex/include
./tools/testing/ktest/examples/include
./tools/lib/lockdep/include
./tools/perf/arch/sh/include
./tools/perf/arch/powerpc/include
./tools/perf/arch/arm/include
./tools/perf/arch/s390/include
./tools/perf/arch/x86/include
./tools/perf/arch/xtensa/include
./tools/perf/arch/sparc/include
./tools/perf/arch/arm64/include
./tools/perf/util/include
./tools/perf/include
./tools/arch/sh/include
./tools/arch/powerpc/include
./tools/arch/arc/include
./tools/arch/arm/include
./tools/arch/alpha/include
./tools/arch/microblaze/include
./tools/arch/s390/include
./tools/arch/h8300/include
./tools/arch/x86/include
./tools/arch/parisc/include
./tools/arch/ia64/include
./tools/arch/xtensa/include
./tools/arch/hexagon/include
./tools/arch/mips/include
./tools/arch/sparc/include
./tools/arch/arm64/include
./tools/arch/riscv/include
./tools/include
./sound/soc/amd/include
./drivers/gpu/drm/nouveau/include
./drivers/gpu/drm/amd/acp/include
./drivers/gpu/drm/amd/include
./drivers/gpu/drm/amd/display/include
./drivers/staging/erofs/include
./drivers/staging/unisys/include
./drivers/staging/rtl8723bs/include
./drivers/staging/rtl8188eu/include
./drivers/net/wireless/broadcom/brcm80211/include
./security/apparmor/include
./security/selinux/include
./arch/nios2/include
./arch/sh/include
./arch/um/include
./arch/powerpc/include
./arch/arc/plat-eznps/include
./arch/arc/include
./arch/arm/mach-s3c64xx/include
./arch/arm/mach-rpc/include
./arch/arm/plat-orion/include
./arch/arm/mach-iop33x/include
./arch/arm/plat-samsung/include
./arch/arm/mach-omap2/include
./arch/arm/mach-w90x900/include
./arch/arm/mach-omap1/include
./arch/arm/plat-versatile/include
./arch/arm/mach-ebsa110/include
./arch/arm/mach-davinci/include
./arch/arm/plat-omap/include
./arch/arm/mach-dove/include
./arch/arm/mach-sa1100/include
./arch/arm/mach-footbridge/include
./arch/arm/mach-ep93xx/include
./arch/arm/mach-pxa/include
./arch/arm/mach-iop32x/include
./arch/arm/mach-spear/include
./arch/arm/mach-ixp4xx/include
./arch/arm/mach-iop13xx/include
./arch/arm/mach-s3c24xx/include
./arch/arm/mach-exynos/include
./arch/arm/plat-pxa/include
./arch/arm/mach-lpc32xx/include
./arch/arm/mach-netx/include
./arch/arm/mach-ks8695/include
./arch/arm/include
./arch/alpha/include
./arch/microblaze/include
./arch/s390/include
./arch/c6x/include
./arch/h8300/include
./arch/openrisc/include
./arch/x86/include
./arch/unicore32/include
./arch/parisc/include
./arch/ia64/sn/include
./arch/ia64/include
./arch/xtensa/variants/dc233c/include
./arch/xtensa/variants/csp/include
./arch/xtensa/variants/fsf/include
./arch/xtensa/variants/de212/include
./arch/xtensa/variants/test_mmuhifi_c3/include
./arch/xtensa/variants/dc232b/include
./arch/xtensa/variants/test_kc705_hifi/include
./arch/xtensa/variants/test_kc705_be/include
./arch/xtensa/platforms/xtfpga/include
./arch/xtensa/platforms/xt2000/include
./arch/xtensa/platforms/iss/include
./arch/xtensa/include
./arch/nds32/include
./arch/hexagon/include
./arch/mips/include
./arch/sparc/include
./arch/m68k/include
./arch/arm64/include
./arch/riscv/include
./include
[me@ukylin linux-4.19.146]$
参考
http://www.voidcn.com/article/p-puxnsnpf-nh.html
http://blog.csdn.net/ipqtjmqj/article/details/53302058