1

我了解到内核头文件指定程序如何与内核交互,因此它们必须参与构建标准库,或者?我刚刚阅读了一个教程,它很好地解释了如何构建一个 arm-elf 工具链(http://wiki.ubuntuusers.de/GNU_ARM-Toolchain)。

让我感到困惑的是,这个过程不涉及内核头文件。他们用

../gcc-4.3.2/configure --target=arm-elf --prefix=/opt/gnuarm --enable-interwork --enable-multilib --enable-languages="c,c++" --enable-target-optspace --with-float=soft --with-newlib --with-headers=../newlib-1.16.0/newlib/libc/include/ --disable-nls 

和 Newlib

../newlib-1.16.0/configure --target=arm-elf --prefix=/opt/gnuarm --enable-interwork --enable-multilib --enable-target-optspace --with-float=soft 

在我看来,他们只从 newlib 中获取标头(他们使用 newlib 而不是 glibc)。这个目录中的文件看起来很一般。我希望Linux“内核版本”出现在这个过程中的某个地方,但它没有。我认为 Linux ABI 可以从内核版本更改为内核版本。内核(头文件)和 gcc 工具链之间的“连接”如何?

4

2 回答 2

0

没有 Linux 内核头文件就无法构建 GNU C 库。大多数 C 库函数都是使用系统调用实现的,内核头文件定义了系统调用接口。当然,这些头文件随内核源代码一起提供,但必须为处理器架构打补丁和配置源代码,然后才能使用它们构建 C 库。

于 2015-12-10T16:43:20.470 回答
0

您正在构建的示例是针对 newlib,一个裸机 libc 实现。这意味着不需要操作系统来运行二进制文件,也不需要构建 Linux 头文件。

如果您构建 glibc 或 musl 工具链。您将需要 Linux 标头。

于 2019-03-24T23:21:58.570 回答