Trong nhu cầu nhập tiện ích thiết lập chương trình cơ sở UEFI trong khi sử dụng khởi động cực nhanh (trình điều khiển bàn phím không được tải trong POST), tôi muốn ghi vào biến efi "Chỉ dẫn Os". Hệ điều hành của tôi là Ubuntu 14.04 kernel 3.13.0-35-generic.
OsIndications
biến trả về một bitmask UINT64
OsIndicationsSupported
biến trả về một bitmask UINT64Các
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit có thể được thiết lập trong biến OsIndicationsSupported bởi firmware, nếu các yêu cầu hỗ trợ firmware OS dừng lại ở một giao diện người dùng firmware. CácEFI_OS_INDICATIONS_BOOT_TO_FW_UI
bit có thể được thiết lập bởi các hệ điều hành trong biến OsIndications, nếu mong muốn hệ điều hành cho các firmware để dừng lại ở một giao diện người dùng firmware trên khởi động tiếp theo.
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- Trang 312 của UEFI spec 2.3.1C
Phần sụn của tôi có khả năng vào tiện ích thiết lập phần sụn ở lần khởi động tiếp theo:
$ hexdump /sys/firmware/efi/vars/OsIndicationsSupported-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
0000000 0001 0000 0000 0000
0000008
Tôi có thể tạo một biến mới /sys/firmware/efi/efivars
bằng cách sử dụng
$ printf\x07\x00\x00\x00\x00" > myvar-12345678-1234-1234-1234-123456789abc
Tuy nhiên, việc ghi vào biến efi OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c
dẫn đến tất cả các loại write error: Invalid argument
:
Sử dụng efivarf mới
# 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
Sử dụng sysfs-efivars cũ tối đa 1024 byte
# 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
Đã kiểm tra các yêu cầu để hỗ trợ biến UEFI hoạt động đúng
- Hỗ trợ dịch vụ thời gian chạy EFI sẽ có mặt trong
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
trả về kernelCONFIG_EFI=y
- Độ cứng / vòm của bộ xử lý hạt nhân và độ cứng / vòm của bộ xử lý EFI có phù hợp
? - Kernel nên được khởi động ở chế độ EFI
CSM bị vô hiệu hóa trong tiện ích thiết lập Firmware / BIOS - Các dịch vụ thời gian chạy EFI trong kernel không nên bị vô hiệu hóa thông qua cmdline kernel, tức là không nên sử dụng tham số kernel noefi.
cat /proc/cmdline | grep EFI
trả lại không có gì - efivarfs hệ thống tập tin nên được gắn ở / sys / firmware / efi / efivars
mount | grep efivars
lợi nhuậnnone on /sys/firmware/efi/efivars type efivarfs (rw)
efivar -l
nên liệt kê các biến EFI mà không có bất kỳ lỗi nào
Lệnh liệt kê 82 dòng và không có lỗi.- Kiểm tra sự tồn tại của các tập tin / sys / firmware / efi / efivars / dump- *.
Không có tập tin kết xuất tồn tại ở đó.
Theo https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-id-16402 các cat enter-uefi-fw > /sys/firmware/efi/vars/new_var
lệnh nên làm việc trong Fedora 17.
Lần đầu tiên xóa các nội dung không cải thiện
# 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
Làm cách nào tôi có thể cập nhật biến efi OsIndifying đã có trong Ubuntu 14.04 (đáng tin cậy) từ dòng lệnh?
-bash: echo: write error: Invalid argument