私はUbuntuディストリビューション用のPREEMPT_RTカーネルをインストールしようとしています。これが私が開発しているロボットの要件だからです。しかし、何をしてもカーネルをコンパイルするとエラーが発生します。質問にエラーメッセージを含め、端末出力全体へのリンクを提供しました。私はLinuxに慣れていないので、次のメーカーのセットアップガイドに従いました。
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.6.19.tar.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.6/older/patch-5.6.19-rt12.patch.xz
xz -d linux-5.6.19.tar.xz
xz -d patch-5.6.19-rt12.patch.xz
tar xf linux-5.6.19.tar
cd linux-5.6.19
patch -p1 < ../patch-5.6.19-rt12.patch
make oldconfig
構成では、完全プリエンプティブコア(RT)(PREEMPT_RT_FULL)をプリエンプションモデルとして選択し、他のすべての設定はそのままにします。基本。
fakeroot make -j4 deb-pkg
dpkg-buildpackage:エラー:fakeroot -u debian / rules cleanサブプロセスが終了ステータス1 makeを返しました。2: *** [scripts/Makefile.package:77: deb-pkg] エラー 1 make: *** [Makefile:1429: deb-pkg] エラー 2
全端子出力ここ
私が使用しようとすると
sudo make -j4 deb-pkg
作るサム: *** [debian/rules:6: build] エラー 2 dpkg-buildpackage: エラー: debian/rules build サブプロセスが終了状態 2 make を返しました。2: *** [scripts/Makefile.package:77: deb-pkg] エラー 2 make: *** [Makefile:1429: deb-pkg] エラー 2
全端子出力ここ
これがうまくいかなかったときに答えに与えられた手順に従ってください。これ質問
curl -SLO https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.6.19.tar.gz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/5.6/older/patch-5.6.19-rt12.patch.gz
tar xvzf linux-5.6.19.tar.gz
cd linux-5.6.19
gzip -cd ../patch-5.6.19-rt12.patch.gz | patch -p1 --verbose
make menuconfig
make -j4
sudo make modules_install -j4
sudo make module_install -j4 sed: モジュールを読み取れません。手順:そのファイルまたはディレクトリはありません。 make: *** [Makefile:1316:現代]エラー2
sudo make modules -j4
sudo make modules_install -j4
makemodules コマンドを使用すると長時間コンパイルされ、正常に終了しますが、module_install を再実行するとエラーメッセージが表示されます。
cp: 'modules.buildin' を stat できません: そのファイルやディレクトリはありません make: *** [Makefile:1317:現代]エラー1
次は何を試すべきかわかりません。異なるカーネルバージョンとは異なるオペレーティングシステム(Ubuntu 18.04および20.04)を試しましたが、すべて同じエラーが発生しました。私が受け取った指示は非常に明確で簡単に見えました。それで、私が何か間違っているのか、それともハードウェアの非互換性、またはそのような特性があるのか疑問に思います。ちなみに、私は現在Ubuntu 20.04.02、カーネル5.8.0-53-genericを実行しています。ハードウェア。この問題の原因が何であるかを知っている人はいますか?
PS:これはこのサイトの最初の質問です。質問形式に関するフィードバックをいただきありがとうございます(情報が多すぎる/情報が少なすぎる/関連性など)。私はターミナルから提供されたすべての情報を追加しましたが、何が役立つのか役に立たないのかわかりません。
答え1
私は主に以下に基づいてUbuntu 20.04でPREEMPT-RTカーネルを構築できました。このガイド次のように:
sudo apt install build-essential git libssl-dev libelf-dev flex bison
このバージョンのカーネルソースコードとパッチをダウンロードしてください。
wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.143.tar.xz
wget https://mirrors.edge.kernel.org/pub/linux/kernel/projects/rt/5.4/patch-5.4.143-rt64-rc2.patch.xz
解凍してパッチを適用します。
tar -xf linux-5.4.143.tar.xz
cd linux-5.4.143
xzcat ../patch-5.4.143-rt64-rc2.patch.xz | patch -p1
構成および要求時にプリエンプションモデル選ぶ完全プリエンプティブカーネル。残りはデフォルト値を受け入れます。
cp /boot/config-5.4.0-81-generic .config
make oldconfig
.config
ファイルを編集し、CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
次に変更します。CONFIG_SYSTEM_TRUSTED_KEYS=""
カーネルをビルドします。
make -j8 deb-pkg
生成されたパッケージをインストールしたら、システムを再起動します。
sudo dpkg -i ../linux-headers-5.4.143-rt64-rc2_5.4.143-rt64-rc2-1_amd64.deb ../linux-image-5.4.143-rt64-rc2_5.4.143-rt64-rc2-1_amd64.deb ../linux-libc-dev_5.4.143-rt64-rc2-1_amd64.deb
再起動すると、次の内容が表示されます。
# uname -a
Linux vod 5.4.143-rt64-rc2 #1 SMP PREEMPT_RT Tue Sep 7 20:19:55 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
これガイドいくつかの異なるステップが提案されたが、まだテストしていない。