内核头文件如何构建gcc工具链?

时间:2014-02-16 15:33:01

标签: linux-kernel embedded-linux glibc newlib

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

令我困惑的是,此过程中没有涉及内核头文件。他们用

配置gcc
../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工具链之间的“连接”如何?

2 个答案:

答案 0 :(得分:0)

如果没有Linux内核头文件,就无法构建GNU C库。大多数C库函数都是使用系统调用实现的,内核头文件定义了系统调用接口。当然,标头附带内核源代码,但必须先为处理器体系结构修补和配置源代码,然后才能使用它们来构建C库。

答案 1 :(得分:0)

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

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