कमांड लाइन से ऑसिफिकेशन चर को कैसे लिखना / संपादित करना / अपडेट करना है?


9

अल्ट्रा फास्ट बूट का उपयोग करते समय UEFI फर्मवेयर सेटअप उपयोगिता दर्ज करने की आवश्यकता में (कीबोर्ड ड्राइवर POST के दौरान लोड नहीं होते हैं), मैं "ओएस इंडिकेशन्स" ओफी चर को लिखना चाहता हूं। मेरा OS उबंटू 14.04 कर्नेल 3.13.0-35-जेनेरिक है।

OsIndications वेरिएबल एक UINT64 बिटमास्क लौटाता है

OsIndicationsSupported वेरिएबल एक UINT64 बिटमास्क लौटाता है

EFI_OS_INDICATIONS_BOOT_TO_FW_UIबिट अगर फर्मवेयर का समर्थन करता है ओएस अनुरोध एक फर्मवेयर यूजर इंटरफेस पर रोकने के लिए, फर्मवेयर द्वारा OsIndicationsSupported चर में सेट किया जा सकता। EFI_OS_INDICATIONS_BOOT_TO_FW_UIबिट, OsIndications चर में ओएस द्वारा सेट किया जा सकता है, तो फर्मवेयर के लिए ओएस इच्छाओं अगले बूट पर एक फर्मवेयर यूजर इंटरफेस पर रोकने के लिए।

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

हालाँकि 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

ठीक से काम करने के लिए यूईएफआई चर समर्थन के लिए आवश्यकताओं की जांच की

  1. EFI रनटाइम सर्विसेज का समर्थन कर्नेल
    $ cat /boot/config-$(uname -r) | grep CONFIG_EFI=yरिटर्न में मौजूद होना चाहिएCONFIG_EFI=y
  2. कर्नेल प्रोसेसर बिटनेस / आर्क और EFI प्रोसेसर बिटनेस / आर्क मैच होना चाहिए
    ?
  3. कर्नेल को EFI मोड में बूट किया जाना चाहिए
    CSM फर्मवेयर सेटअप उपयोगिता / BIOS में अक्षम है
  4. कर्नेल में EFI रनटाइम सेवाओं को कर्नेल cmdline के माध्यम से अक्षम नहीं किया जाना चाहिए, अर्थात noefi कर्नेल पैरामीटर का उपयोग नहीं किया जाना चाहिए।
    cat /proc/cmdline | grep EFIकुछ नहीं देता
  5. efivarfs फाइल सिस्टम को / sys / फर्मवेयर / efi / efivars
    mount | grep efivarsरिटर्न पर माउंट किया जाना चाहिएnone on /sys/firmware/efi/efivars type efivarfs (rw)
  6. efivar -lEFI वेरिएबल्स को बिना किसी त्रुटि के
    सूचीबद्ध करना चाहिए कमांड 82 लाइनों को सूचीबद्ध करता है और कोई त्रुटि नहीं होती है।
  7. / Sys / फर्मवेयर / efi / efivars / डंप- * फ़ाइलों के अस्तित्व की जाँच करें।
    कोई डंप-फाइलें वहां मौजूद नहीं हैं।

Https://ask.fedoraproject.org/en/question/8264/after-installing-fedora-i-cant-open-biosefi-setup/?answer=16402#post-idad402 के अनुसार cat enter-uefi-fw > /sys/firmware/efi/vars/new_varकमांड को फेडोरा में काम करना चाहिए 17।

पहले हटाने के सुधार नहीं करता है

# 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 (भरोसेमंद) में पहले से ही मौजूद OsIndications efi चर को कैसे अपडेट कर सकता हूं?

जवाबों:


1

कई फर्मवेयर बग्स की उपस्थिति के कारण जहां गैर-मानक यूईएफआई चर को हटाने से सिस्टम फर्मवेयर को POST में विफल होने का कारण बनता है, वहीं एफिवरफेट्स फाइलें जो अच्छी तरह से ज्ञात मानकीकृत चर नहीं हैं, उन्हें अपरिवर्तनीय फ़ाइलों के रूप में बनाया जाता है।

https://www.kernel.org/doc/Documentation/filesystems/efivarfs.txt

इसे lsattr और chattr कमांड के साथ सत्यापित और बदला जा सकता है ।

उदाहरण के लिए:

root@hi12:/tmp/test# hexdump -C out 
00000000  07 00 00 00 10 00 00 00                           |........|
00000008
root@hi12:/tmp/test# cp out /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
cp: cannot create regular file '/sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23': Operation not permitted
root@hi12:/tmp/test# lsattr  /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
----i-------------- /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23
root@hi12:/tmp/test# chattr -i /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
root@hi12:/tmp/test# lsattr  /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
------------------- /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23
root@hi12:/tmp/test# cp out /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
root@hi12:/tmp/test# chattr +i /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
root@hi12:/tmp/test# lsattr  /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23 
----i-------------- /sys/firmware/efi/efivars/BootSelectVariable-944fb13b-773f-4cbb-9c6f-326cebde4c23
root@hi12:/tmp/test# 

1

प्रासंगिक 64-बिट मास्क यहां है:

  #define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001

यह एक छोटे-एंडियन (इंटेल) प्रारूप स्ट्रिंग का उपयोग करके उत्पादित किया जा सकता है:

  str='\x01\x00\x00\x00\x00\x00\x00\x00'; printf "$str"

printf "$str"ऊपर के आउटपुट को efivarfs चर फ़ाइल की डेटा सामग्री में जाने की आवश्यकता है $var, जहाँ

  var='/sys/firmware/efi/efivars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c'

हालाँकि, प्रत्येक फ़ाइल 4-बाइट हैडर के/sys/firmware/efi/efivars साथ शुरू होती है और उसके बाद उसकी डेटा सामग्री होती है। इसलिए, 4-बाइट हेडर के साथ प्रीफ़ाइंड करने की ज़रूरतों का आउटपुट इससे पहले कि हम इसे efivarfs चर फ़ाइल पर लिख सकें । साथ और , इसके बाद के संस्करण के रूप में इस किया जा सकता है, जैसे, का उपयोग करते हुए:printf "$str"$var$str$var

  { head -c 4 "$var"; printf "$str"; } > "$var"

0

के echoबजाय का उपयोग करने का प्रयास करें cat

# echo 'enter-uefi-fw' > /sys/firmware/efi/vars/OsIndications-8be4df61-93ca-11d2-aa0d-00e098032b8c/raw_var

कर्नेल 3.13.0-35-जेनेरिक और 3.17.0-031700rc7-जेनेरिक आउटपुट:-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 :? प्रिंटफ '\ x' में अग्रणी '\' पर ध्यान दें, जिसे आपने छोड़ा था, इस तथ्य को कि हम पूरे मूल्य में भर रहे हैं, और रास्ते के अंत में कच्चे_वर।
सुगंधित

# 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
प्रो बैकअप

क्या आपने कमांड चलाने से पहले pjones.fedorapeople.org/enter-uefi-fw डाउनलोड किया था cat?
सुगंधित

हां, मैंने Enter-uefi-fw डेटा फ़ाइल डाउनलोड की है, और वह फ़ाइल मेरी वर्तमान कार्यशील निर्देशिका में है: # ls -l enter-uefi-fwरिटर्न -rw-r--r-- 1 root root 2084 Aug 25 20:23 enter-uefi-fw
प्रो बैकअप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.