초고속 부팅 (POST 동안 키보드 드라이버가로드되지 않음)을 사용하는 동안 UEFI 펌웨어 설정 유틸리티를 입력해야 할 때 "Os Indications"efi 변수에 쓰고 싶습니다. 내 OS는 Ubuntu 14.04 커널 3.13.0-35-generic입니다.
OsIndications
변수는 UINT64 비트 마스크를 반환
OsIndicationsSupported
변수는 UINT64 비트 마스크를 반환
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
펌웨어 지원을 요청 OS 펌웨어 사용자 인터페이스에서 멈출 경우, 비트는 펌웨어로 OsIndicationsSupported 변수를 설정할 수있다.EFI_OS_INDICATIONS_BOOT_TO_FW_UI
펌웨어에 대한 OS의 욕망이 다음 부팅에 대한 펌웨어 사용자 인터페이스에서 중지하는 경우 비트는 OsIndications 변수의 OS에 의해 설정 될 수있다.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- UEFI 사양 2.3.1C의 페이지 (312)
다음에 부팅 할 때 펌웨어에 펌웨어 설정 유틸리티를 시작할 수 있습니다.
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
나는에 새로운 변수 생성 할 수 있습니다 /sys/firmware/efi/efivars
사용을
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
그러나 efi 변수에 쓰면 OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
모든 종류의 결과가 나타납니다 write error: Invalid argument
.
새로운 efivarfs 사용
# printf "x00\x00\x00\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument
# printf "x00\x00\x00\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument
# printf "\x01" > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
-bash: printf: write error: Invalid argument
# cat enter-uefi-fw > /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
cat: write error: Invalid argument
오래된 1024 바이트 최대 sysfs-efivars 사용
# cat enter-uefi-fw > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
cat: write error: Input/output error
# cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
cat: write error: Invalid argument
# echo 'enter-uefi-fw' > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
-bash: echo: write error: Invalid argument
# printf "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var
-bash: printf: write error: Invalid argument
UEFI 변수 지원이 제대로 작동하기위한 요구 사항 확인
- 커널
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
리턴 에 EFI 런타임 서비스 지원이 있어야 합니다.CONFIG_EFI=y
- 커널 프로세서 비트 / 아치 및 EFI 프로세서 비트 / 아치가
? - EFI 모드에서 커널을 부팅해야합니다
펌웨어 설정 유틸리티 / BIOS에서 CSM이 비활성화되어 있습니다. - 커널의 EFI 런타임 서비스는 커널 cmdline을 통해 비활성화해서는 안됩니다. 즉 noefi 커널 매개 변수를 사용하면 안됩니다.
cat /proc/cmdline | grep EFI
아무것도 반환하지 않습니다 - efivarfs 파일 시스템은 / sys / firmware / efi / efivars에 마운트해야
mount | grep efivars
합니다.none on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
오류없이 EFI 변수를 나열해야합니다
. 명령은 82 줄을 표시하고 오류는 없습니다.- / sys / firmware / efi / efivars / dump- * 파일이 있는지 확인하십시오.
덤프 파일이 없습니다.
https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402 에 따르면 이 cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
명령은 Fedora에서 작동합니다 17.
OsIndications를 먼저 삭제해도 개선되지 않습니다
# rm -rv /sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
removed '/sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c'
# ls -l enter-uefi-fw
-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
# cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
cat: write error: Invalid argument
명령 줄에서 Ubuntu 14.04 (trusty)의 기존 OsIndications efi 변수를 어떻게 업데이트 할 수 있습니까?
-bash: echo: write error: Invalid argument