1

カーネルヘッダーは、プログラムがカーネルと対話する方法を指定するため、標準ライブラリの構築に関与する必要があることを知りました。それとも? 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からのみヘッダーを取得しているように思えます(glibcの代わりにnewlibを使用しています)。このディレクトリ内のファイルは、非常に汎用的に見えます。Linux の「カーネル バージョン」がこのプロセスのどこかに表示されることを期待していますが、そうではありません。Linux ABI は、カーネル バージョンからカーネル バージョンに変更できると考えました。カーネル (ヘッダー) と gcc ツールチェーン間の「接続」はどのようになっていますか?

4

2 に答える 2

0

GNU C ライブラリは、Linux カーネル ヘッダーなしではビルドできません。ほとんどの C ライブラリ関数はシステム コールを使用して実装され、カーネル ヘッダーはシステム コール インターフェイスを定義します。もちろん、ヘッダーはカーネル ソースに付属していますが、C ライブラリのビルドに使用する前に、ソースにパッチを適用し、プロセッサ アーキテクチャ用に構成する必要があります。

于 2015-12-10T16:43:20.470 に答える
0

構築している例は、ベアメタル libc 実装である newlib 用です。つまり、バイナリを実行するのに OS は必要なく、ビルドに Linux ヘッダーも必要ありません。

glibc または musl ツールチェーンをビルドする場合。Linux ヘッダーが必要です。

于 2019-03-24T23:21:58.570 に答える