ในความต้องการที่จะเข้าสู่ยูทิลิตี้การตั้งค่าเฟิร์มแวร์ UEFI ในขณะที่ใช้การบูตอย่างรวดเร็วเป็นพิเศษ (ไม่ได้โหลดไดรเวอร์คีย์บอร์ดระหว่าง POST) ฉันต้องการเขียนถึงตัวแปร efi "Os Indications" ระบบปฏิบัติการของฉันคือ Ubuntu 14.04 kernel 3.13.0-35-generic
OsIndications
ตัวแปรส่งกลับ bitmask UINT64
OsIndicationsSupported
ตัวแปรส่งกลับ bitmask UINT64
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
บิตสามารถตั้งค่าในตัวแปร OsIndicationsSupported โดยเฟิร์มถ้าขอเฟิร์มแวสนับสนุนระบบปฏิบัติการที่จะหยุดที่อินเตอร์เฟซที่ใช้เฟิร์มแวEFI_OS_INDICATIONS_BOOT_TO_FW_UI
บิตสามารถตั้งค่าได้โดยระบบปฏิบัติการในตัวแปร OsIndications ถ้าปรารถนา OS สำหรับเฟิร์มที่จะหยุดที่อินเตอร์เฟซที่ใช้เฟิร์มในการบูตถัดไป
EFI_OS_INDICATIONS_BOOT_TO_FW_UI
=0x0000000000000001
- หน้า 312 ของข้อมูลจำเพาะ UEFI 2.3.1C
เฟิร์มแวร์ของฉันมีความสามารถในการเข้าสู่ยูทิลิตี้การตั้งค่าเฟิร์มแวร์ในการบู๊ตครั้งต่อไป:
$ 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
ใช้ sysfs-efivars สูงสุด 1024 ไบต์เก่า
# 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 เพื่อให้ทำงานได้อย่างถูกต้อง
- ควรมีการสนับสนุน EFI Runtime Services ในการ
$ cat /boot/config-$(uname -r) | grep CONFIG_EFI=y
คืนค่าเคอร์เนลCONFIG_EFI=y
- Kitness processor bitness / arch และ EFI processor bitness / arch ควรตรงกัน
หรือไม่ - เคอร์เนลควรบูตในโหมด EFI
CSM ถูกปิดใช้งานในยูทิลิตี้การตั้งค่าเฟิร์มแวร์ / BIOS - ไม่ควรปิดใช้งานบริการ EFI รันไทม์ในเคอร์เนลผ่านเคอร์เนล cmdline เช่นไม่ควรใช้พารามิเตอร์เคอร์เนล noefi
cat /proc/cmdline | grep EFI
ไม่มีอะไรคืน - efivarfs ระบบแฟ้มควรจะติดตั้งที่ sys / / เฟิร์มแว / 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-16402cat 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
ฉันจะอัปเดตตัวแปร OsIndications efi ที่มีอยู่แล้วใน Ubuntu 14.04 (เชื่อถือได้) จากบรรทัดคำสั่งได้อย่างไร
-bash: echo: write error: Invalid argument