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

이 두 패치를 사용하면 efivar커널 헤더가 NVME_IOCTL_ID.

관련 정보