efivarをコンパイルする方法は?

efivarをコンパイルする方法は?

私のデバイスに合わせてefivar-0.23をコンパイルしようとしています。リニアFSしかし、解凍したら、次のコマンドを実行してください。

make libdir="/usr/lib/" bindir="/usr/bin/" mandir="/usr/share/man/" includedir=/usr/include/" V=1 -j1

NVME_IOCTL_ID が宣言されていないというエラーが発生します。回答を見つけるためにインターネット全体をすっかり遅らせたのですが、私が見つけた唯一のものはファイルをパッチしなければならないということだけでした。いくつかのパッチを見つけましたが、それは役に立ちませんでした(おそらく間違ってインストールした可能性があります...)。これが私が試した最後のパッチです:http://patchwork.openembedded.org/patch/117073/

解凍したefivarディレクトリに移動して、以下を実行しましたが、patch -Np1 ../efivar.patch何もしません。何かをしているようですが、何も起こりません。

抽出されていないディレクトリからアクセスしようとしましたが、patch < ../efivar.patchシステムで質問を始めました...

System: File to patch:
Me: Makefile
System: patching file Makefile
Hunk #1 FAILED at 12.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.rej
The next patch would delete the file efivar-drop-options-not-supported-by-lower-version-gcc.patch,
which does not exist! Assume -R? [n]
Me: y
System: patching file efivar-drop-options-not-supported-by-lower-version-gcc.patch
The next patch would delete the file efivar_0.21.bb,
which does not exist! Assume -R? [n]
Me: y
patching file efivar_0.21.bb
patching file efivar_0.23.bb

私はさまざまな答えの組み合わせとさまざまなパッチを試しました。また、必要な内容が含まれていることを確認するために、パッチが必要なファイルを手動で入力しました(このパッチが機能しているかどうかわからないため)。

だから基本的に私は宣言されていない変数と同じ点にあり、何をすべきかわからず、多くの時間を無駄にしています。どんなアイデアがありますか?

答え1

efivarバージョン0.23では、ヘッダー定義がNVME_IOCTL_ID変更されたため(名前が変更されたためnvme.h)、4.4以降のカーネルヘッダーを使用するにはパッチが必要ですnvme_ioctl.h

efivarシステムを構築するには、次のものが必要です。「linux/nvme.hの名前変更ソリューション」修理する。適用するには、ソースコードを含むディレクトリに移動しefivar(変更なしで0.23ソースコードを使用)、次の手順を実行します。

curl https://github.com/rhinstaller/efivar/commit/3a0ae7189fe96355d64dc2daf91cf85282773c66.patch | patch -p1

efivarこれにより、カーネル4.4ヘッダーを使用して正しくビルドできます。

ヘッダファイルがあると仮定すると、nvme.hこの時点でまだ問題がある可能性があります。NVME_IOCTL_ID完全に使用したくない場合は、別のパッチを適用できます。"libefiboot:正しいEUIを取得し、カーネルヘッダが不要になるようにNVMEを再設計してください。"(このパッチには以前のパッチが必要です):

curl https://github.com/rhinstaller/efivar/commit/8910f45c27fadba0904f707e7c40ad80bf828f7e.patch | patch -p1

これら2つのパッチを使用すると、efivarカーネルヘッダがNVME_IOCTL_ID

関連情報