如何编译 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 需要一个补丁才能使用 4.4(以及更高版本的内核)中的内核头,因为头定义NVME_IOCTL_ID发生了变化(它被重命名nvme.hnvme_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:重新设计 NVME,以便我们获得正确的 EUI 并且不需要内核标头”(此补丁需要前一个补丁):

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

通过这两个补丁,efivar无论您的内核头文件在何处(以及是否)定义了NVME_IOCTL_ID.

相关内容