저는 2015 MacBook Pro에서 Linux 5.10-rc2를 실행하고 있습니다. 작동 방식을 더 잘 이해하기 위해 EFI 변수를 수정하려고 합니다. 그러나 를 사용하여 수정하려고 하면 오류가 efivar
발생합니다 . Invalid argument
사용법은 strace
다음과 같이 표시됩니다.
openat(AT_FDCWD, "/sys/firmware/efi/efivars/SPIKeyboardNoComm-4d1ede05-38c7-4a6a-9cc6-4bcca8b38c14", O_WRONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=8, ...}) = 0
write(4, "\7\0\0\200\22\0\0\0", 8) = -1 EINVAL (Invalid argument)
인용문 fs/efivarfs/file.c
Linux에서 쓰기에서 반환되는 유일한 방법 -EINVAL
은 작성된 데이터의 길이가 속성에서 요구하는 4바이트보다 작거나 속성에서 지정한 비트가 없는 경우입니다 EFI_VARIABLE_MASK
. 여기서는 후자처럼 보입니다. 참고로 include/linux/efi.h
처음 3비트는 비휘발성, 부팅 액세스, 런타임 액세스를 나타내지만 마스크에 없는 최상위 비트도 설정됩니다.
나는 이 컴퓨터에 있는 모든 EFI 변수의 속성 비트를 인쇄하는 작은 스크립트를 작성했는데, 모두 가장 높은 비트가 설정되어 있습니다. 무슨 뜻이에요? efivar와 같은 도구가 작동할 수 있도록 설정을 해제할 수 있는 방법이 있습니까? 분명히 어딘가에 버그가 있습니다. efivar
이 시스템의 도구, Linux 커널 또는 EFI 구현과 관련되어 있습니까?
게다가 이 문제가 항상 존재하는 것은 아닙니다. 다시 시작하기 전에 위의 예에서 변수(키보드 관련 Apple 특정 변수)를 설정할 수 있었습니다. 이 문제가 발생하기 전에 속성이 무엇인지 확인하지 않았습니다.