1

我需要用 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 编译器是否会从 /usr/include /usr/local/includeLinux_2.6.28 源文件夹中包含这些文件?

4

3 回答 3

6

内核是自包含的。这意味着它不允许有任何外部依赖。换句话说,您的内核源代码树包含构建内核所需的所有材料。没有必要在其他任何地方寻找代码。

正如我在评论中所建议的,只需看一下主 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)
于 2013-04-18T14:44:29.037 回答
2

这些文件不应该在 /usr/local 等中直接访问。如果是,这是一个问题,因为除非使用属于该内核的内核,否则您的内核将无法正确构建。随着内核的更新和改进,其中一些文件会定期更改。

内核使用的文件可以在linux/include/...目录中找到。编译器选项用于-nostdinc避免搜索标准包含位置,然后从内核源目录中添加适当的位置。

于 2013-04-18T14:42:11.293 回答
1

要找出某些给定编译包含哪些文件,请传递-Hgcc.

要添加用于搜索包含文件的目录,-I 请将 somedir传递 给gcc,例如-I /usr/local/include/; 有预处理器选项可以删除目录或清除包含路径。

于 2013-04-18T14:43:00.533 回答