W związku z potrzebą wprowadzenia narzędzia do konfiguracji oprogramowania układowego UEFI podczas korzystania z ultra szybkiego rozruchu (sterowniki klawiatury nie są ładowane podczas testu POST), chcę napisać do zmiennej efi „Wskazania Os”. Mój system operacyjny to jądro Ubuntu 14.04 3.13.0-35-generic.
OsIndications
zmienna zwraca maskę bitową UINT64
OsIndicationsSupported
zmienna zwraca maskę bitową UINT64
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
Bit może być ustawiony w zmiennej OsIndicationsSupported przez firmware, jeśli wnioski podpory OS firmware aby zatrzymać się na interfejsie oprogramowania.EFI_OS_INDICATIONS_BOOT_TO_FW_UI
Bit może być ustawiony przez system operacyjny w zmiennej OsIndications, czy pragnienia systemowe dla oprogramowania, aby zatrzymać się w interfejsie użytkownika oprogramowania na następnym rozruchu.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Strona 312 specyfikacji UEFI 2.3.1C
Moje oprogramowanie wewnętrzne ma możliwość przejścia do narzędzia konfiguracji oprogramowania przy następnym uruchomieniu:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Potrafię utworzyć nową zmienną przy /sys/firmware/efi/efivars
użyciu
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Jednak zapisywanie do zmiennej efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
powoduje różnego rodzaju write error: Invalid argument
:
Korzystanie z nowych 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
Używanie starych 1024 bajtów 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
Sprawdzono wymagania dotyczące obsługi zmiennych UEFI
- Obsługa środowisk uruchomieniowych EFI powinna być obecna w
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
zwrotach jądraCONFIG_EFI=y
- Bitowość / arch procesora jądra i bitowość / arch procesora EFI powinny się zgadzać
? - Jądro powinno zostać uruchomione w trybie EFI
CSM jest wyłączony w narzędziu do konfiguracji oprogramowania układowego / BIOS - Usługi uruchomieniowe EFI w jądrze nie powinny być wyłączane przez cmdline jądra, tzn. Nie należy używać parametru jądra noefi.
cat /proc/cmdline | grep EFI
nic nie zwraca - efivarfs system plików powinien być montowany w / sys / firmware / efi / efivars
mount | grep efivars
zwrotównone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
powinien wyświetlać zmienne EFI bez błędów
Polecenie wyświetla 82 wiersze i nie zawiera błędów.- Sprawdź, czy istnieją pliki / sys / firmware / efi / efivars / dump- *.
Nie ma tam żadnych plików zrzutu.
Według https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
komenda powinna pracować w Fedorze 17
Pierwsze usunięcie OsIndications nie poprawia się
# 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
Jak mogę zaktualizować istniejącą zmienną efI OsIndications w Ubuntu 14.04 (zaufany) z wiersza poleceń?
źródło
-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
:? zwróć uwagę na wiodące „\” w printf „\ x”, które pominęłeś, fakt, że wypełniamy całą wartość, i raw_var na końcu ścieżki.# 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
wyniki w-bash: printf: write error: Invalid argument
cat
polecenia?# ls -l enter-uefi-fw
zwraca-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
.