好奇心が強いので、次の2つの方法を使用してLinuxカーネルをコンパイルすることに興味があります。その音そしてジャフケ一度に1つずつコンパイラ。
フォローするガイドが見つかりません。 LinuxカーネルのコンパイルにはGCCのみが使用されます。
別のコンパイラを使用してLinuxカーネルをコンパイルする方法は?
答え1
カーネルビルドでは、使用するツールを指定できます。たとえば、Cコンパイラを指定し、CC
変数HOSTCC
を設定します。
make CC=clang HOSTCC=clang
このビルドはGCCでのみ成功すると予想されますが、興味のある人がいます。代わりにClangを使用してください、場合によっては動作することが知られています(一部のAndroidカーネルはClangで構築されています)。
答え2
答えてくれたStephen Kittに感謝します。 Clangを使用してLinuxカーネルをコンパイルできます。しかし、Clang v9.0が必要です。
構成
Arch Linuxを使用している場合は、v9.0を直接コンパイルせずにclangするのに最適な方法があります。
# Enable the testing repository (if not already enabled):
echo -e "[testing]\nInclude = /etc/pacman.d/mirrorlist" | sudo tee -a /etc/pacman.conf
# Update the database and install clang, llvm, llvm-libs
sudo pacman -Sy testing/clang testing/llvm testing/llvm-libs
# Check if you have clang-9:
clang --version
注:将来のclangバージョン9用の追加のリポジトリが追加されたら、インストールできます。。
clang-9.0をお持ちの場合は、以下から希望のカーネルをダウンロードしてください。ここ。
エイリアスmakeを使用してカーネルをコンパイルするだけです。
alias make="make CC=clang HOSTCC=clang -j `nproc`"
インストールプロセスを続行してください。
完了したら、システムを再起動します。次に、次のように入力します。
cat /proc/version
上記のコードは、いくつかの追加の詳細とカーネルのバージョンを示しています。たとえば、私の/proc/versionファイルは次のようになります。
Linux version 5.4.0-rc1 (sourav@archlinux-pc) (clang version 9.0.0 (tags/RELEASE_900/final)) #1 SMP PREEMPT Sun Oct 6 18:02:41 IST 2019
パフォーマンス
これが本当のプラセボであるかどうかはわかりませんが、GCCコンパイルバージョンより少し速く実行されます。私はまたclang9とzapccを使ってXonoticのようなゲームをコンパイルしました。
結論として
clang 9でカーネルをコンパイルするのは良いアイデアだと思います。しかし、zapccはまだこれを行うことができません。 zapccバージョン7.0とclangバージョン8.0.1(私が試した)によると:
scripts/kconfig/conf --syncconfig Kconfig
Compiler lacks asm-goto support.
役に立ったことを願っています!