我需要使用arm-linux-gcc作为嵌入式系统编译2.6.28 linux内核。我正在运行Ubuntu 12.10 x86。 我查看了2.6内核源代码,发现了这个:
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/input.h>
#include <asm/io.h>
#include <asm/irq.h>
...
gcc编译器是否会在Linux_2.6.28源文件夹中包含来自/ usr / include / usr / local / include 或的这些文件?
答案 0 :(得分:6)
内核自包含。这意味着不允许任何外部依赖。换句话说,您的内核源代码树包含 all 构建内核所需的材料。没有必要在其他任何地方寻找代码。
正如我在评论中建议的那样,只需看一下主要的Makefile。您将在源树的根目录下找到它。一点点ctrl+f
带有“包含”,这里有一些有趣的引用我可以反馈给你:
# Look for make include files relative to root of kernel src
MAKEFLAGS += --include-dir=$(srctree)
# .... Other stuff
# Use USERINCLUDE when you must reference the UAPI directories only.
USERINCLUDE := \
-I$(srctree)/arch/$(hdr-arch)/include/uapi \
-Iarch/$(hdr-arch)/include/generated/uapi \
-I$(srctree)/include/uapi \
-Iinclude/generated/uapi \
-include $(srctree)/include/linux/kconfig.h
# Use LINUXINCLUDE when you must reference the include/ directory.
# Needed to be compatible with the O= option
LINUXINCLUDE := \
-I$(srctree)/arch/$(hdr-arch)/include \
-Iarch/$(hdr-arch)/include/generated \
$(if $(KBUILD_SRC), -I$(srctree)/include) \
-Iinclude \
$(USERINCLUDE)
答案 1 :(得分:2)
这些文件不应该在/ usr / local等中直接访问。如果是,那就是一个问题,因为除非使用属于该内核的内核,否则内核将无法正确构建。其中一些文件会定期更改,因为内核正在更新和改进。
内核使用的文件位于linux/include/...
目录中。编译器选项使用-nostdinc
来避免搜索标准包含位置,然后从内核源目录中添加适当的位置。
答案 2 :(得分:1)
要查找某些给定编辑中包含的文件,请将-H
传递给gcc
。
要添加用于搜索包含文件的目录,请将-I
somedir 传递给gcc
,例如-I /usr/local/include/
;有preprocessor options删除目录或清除包含路径。