Dalam kebutuhan untuk memasuki utilitas pengaturan firmware UEFI saat menggunakan boot ultra cepat (driver keyboard tidak dimuat selama POST), saya ingin menulis ke variabel efi "Indikasi Induk". OS saya adalah Ubuntu 14.04 kernel 3.13.0-35-generik.
OsIndications
variabel mengembalikan bitmask UINT64
OsIndicationsSupported
variabel mengembalikan bitmask UINT64The
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit dapat diatur dalam variabel OsIndicationsSupported oleh firmware, jika permintaan dukungan firmware OS untuk berhenti di sebuah antarmuka firmware pengguna. TheEFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit dapat diatur oleh OS dalam variabel OsIndications, jika keinginan OS untuk firmware untuk berhenti di sebuah antarmuka firmware pengguna pada boot berikutnya.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Halaman 312 dari UEFI spec 2.3.1C
Firmware saya memiliki kemampuan untuk masuk ke utilitas pengaturan firmware saat boot berikutnya:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Saya dapat membuat variabel baru tentang /sys/firmware/efi/efivars
penggunaan
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Namun menulis ke variabel efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
menghasilkan segala macam write error: Invalid argument
:
Menggunakan efivarf baru
# 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
Menggunakan sysfs-efirar maksimum 1024 byte lama
# 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
Memeriksa persyaratan untuk dukungan variabel UEFI agar berfungsi dengan benar
- Dukungan Layanan Runtime EFI harus ada dalam
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
pengembalian kernelCONFIG_EFI=y
- Bitness / arch prosesor Kernel dan bitness / arch prosesor EFI harus cocok
? - Kernel harus di-boot dalam mode EFI
CSM dinonaktifkan di utilitas pengaturan Firmware / BIOS - Layanan runtime EFI di kernel tidak boleh dinonaktifkan melalui cmdline kernel, yaitu parameter kernel noefi tidak boleh digunakan.
cat /proc/cmdline | grep EFI
tidak mengembalikan apa pun - filesystem efivarfs harus dipasang di / sys / firmware / efi / efivars
mount | grep efivars
pengembaliannone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
harus mencantumkan Variabel EFI tanpa kesalahan
. Perintah ini mencantumkan 82 baris dan tidak ada kesalahan.- Periksa keberadaan file / sys / firmware / efi / efivars / dump- *.
Tidak ada file dump di sana.
Menurut https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402 yang cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
perintah harus bekerja di Fedora 17.
Menghapus OsIndikasi pertama tidak membaik
# 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
Bagaimana saya bisa memutakhirkan variabel efIndikasi OsIndikasi yang sudah ada di Ubuntu 14.04 (trusty) dari baris perintah?
sumber
-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
:? perhatikan '\' di printf '\ x' terkemuka yang Anda abaikan, fakta bahwa kami mengisi seluruh nilai, dan raw_var di ujung jalan.# 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
hasil dalam-bash: printf: write error: Invalid argument
cat
perintah?# ls -l enter-uefi-fw
kembali-rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
.