přejít na obsah přejít na navigaci

Linux E X P R E S, EFI Shell

EFI Shell

Server

Intel stvořil EFI především pro serverovou oblast (IA64), kde BIOS již nedokázal vyhovět požadavkům na start. V současnosti je EFI i na desktopech, protože firma postupem času uvolnila nejen specifikace, ale i nástroje pro EFI. Dnes se seznámíte se základním nástrojem, který umožňuje měnit nastavení v EFI (UEFI).


Úvodem

Protože jsem schopen pracovat v příkazovém řádku GNU/Linuxu, který stále považuji za mocný a flexibilní nástroj, nahlížel jsem na tento EFI Shell jako na „ořezávátko“. Přiznávám, mýlil jsem se. EFI Shell sice manipuluje „pouze“ s UEFI hodnotami, ale dělá to bravurně a za jistých okolností s ním můžete brouzdat i po jiných oddílech než jen po EFI System Partition.

EFI Shell není pro každodenní používání, přesto může nastat situace, kdy jeho funkcí alespoň částečně využijete.

Tento Shell rozhodně není určen pro začátečníky. I pokročilým uživatelům doporučuji obezřetnost, protože jsem s tímto nástrojem dokázal tři měsíce starý notebook dovést na pokraj doby temna, ze které jsem jej vysvobodil až re-flashem UEFI.

EFI Shell skrývá jednu nepěknou vlastnost. Pravděpodobně záleží na výrobci, jak implementuje UEFI a další funkce do svého produktu, ale v mém případě je možné pomocí tohoto Shellu upravovat hodnoty v UEFI bez vyžádání hesla.

V normálním provozu se bez hesla nedostanu do nastavení UEFI a bez dalšího hesla nemohu manipulovat s pořadím bootování. EFI Shell ale nějaká hesla vůbec nezajímají (alespoň v mém případě) a klidně s ním mohu měnit čas, datum, a co je na pováženou, tak i bootovací pořadí (včetně vytváření/mazání) nebo konfiguraci síťového bootování. Nevím, zdali se jedná o vlastnost, nebo o „chybu v Matrixu“, ale snad to není standard.

Historie EFI-UEFI

  • 2000 Intel vydává specifikaci EFI 1.02
  • 2001 Intel vydává specifikaci EFI 1.10
  • 2006 Intel uvolňuje specifikace EFI, a vzniká tak nezisková organizace Unified EFI Forum přebírající vývoj a správu nad Unified EFI (UEFI). Následuje uvolnění specifikace UEFI 2.0
  • 2008 uvolněna specifikace UEFI 2.1
  • 2010 uvolněny specifikace UEFI 2.2 a 2.3 (revize verze 2.3 jsou uvolňovány až do roku 2013)
  • 2013 uvolněna specifikace UEFI 2.4

Schopnosti Shellu

  • manipulace se soubory v EFI System Partition (za jistých podmínek nejen v ESP)
  • spouštění dalších EFI aplikací (ovladače, aplikace, operační systémy)
  • spouštění skriptů
  • úprava těžko dostupných hodnot v UEFI
  • získání informací o systému

Verze Shellu

EFI Shell ver. 1 by měl fungovat na všech EFI (UEFI) systémech od specifikace 1.02 (pouze některé příkazy jsou určeny až od EFI 1.10) a je k dispozici pro 64bit (x86_64) i pro 32bit (ia32) systémy.

EFI Shell ver. 2 bude nejlépe fungovat na UEFI 2.3.1 a výše. Oproti první verzi má možnost manipulovat s bootovacími záznamy a nápověda se používá trochu odlišným způsobem. Opět je k dispozici pro 64bit i pro 32bit systémy.

Spuštění Shellu

Někteří výrobci implementují Shell do svých výrobků a uživatelé jej tak mohou spouštět přímo z bootovací nabídky UEFI. Nenachází-li se Shell ve vašem UEFI, můžete jej spouštět z flash disku. Postačí pouze přejmenovat Shell.efi na bootx64.efi a uložit jej jako /EFI/BOOT/bootx64.efi na flash disk zformátovaný FAT32 souborovým systémem.

TIP: Pokud jste četli článek (Ne)upravujte UEFI a Secure Boot a vytvořili v něm zmíněný flash disk, vytvořte na prvním oddílu flash disku adresář /EFI/tools a zkopírujte do něj EFI Shell pod názvem shell.efi. Po nabootování rEFIndu se vám Shell zobrazí v menu a díky ovladačům, které rEFInd používá, budete moci s EFI Shellem brouzdat i po dalších oddílech než jen po EFI System Partition. Při ukončení Shellu (příkaz exit) se vrátíte do rodičovského systému, tedy do rEFIndu.

Dokumentace a nápověda

Pokud se často nudíte a zajímá vás specifikace UEFI, naleznete na stránkách (po zadání jména a e-mailu) www.uefi.org/specs/access pdf dokumenty jednotlivých verzí UEFI. Velikost souborů vás možná zaskočí, ale nejedná se o chybu. Například pdf dokument specifikace UEFI 2.4A (11 MB) obsahuje „pouze“ 2296 stran.

Na zmíněných stránkách naleznete i dokumentaci (jen 234 stran) pro Shell ver. 2, která je vhodná pro programátory, neboť obsahuje i návratové hodnoty příkazů.

Dokumentaci pro Shell ver. 1 lze stáhnout z http://sourceforge.net/projects/efi-shell/files/documents/, kde naleznete pdf dokumenty ShellCommandManual a Shell_UserGuide. Ze zmíněných dokumentů bylo čerpáno při testování EFI Shellu.

Obě verze Shellu však obsahují poměrně rozsáhlou nápovědu (i s příklady použití), pro jejíž zobrazení se používá příkaz help, nebo znak otazníku (?).

Následující příkaz je pro obě verze shodný a vypíše seznam použitelných příkazů.

Shell> help

Protože vám zcela určitě uniklo mnoho příkazů, použijte následující parametr, který zajistí postupný výpis příkazů po stránkách (jako příkaz more v Linuxu).

Shell> help -b

Parametr -b lze používat téměř u všech příkazů poskytujících nějaký rozsáhlejší výstup.

Pro nápovědu k jednotlivým příkazům se však používá rozdílný zápis. Příklad pro zobrazení nápovědy příkazu ls (výpis obsahu adresáře).

EFI Shell ver.1

Shell> help ls

UEFI Shell ver.2

Shell> ls -? -v

Seznam příkazů Shellu

Vzhledem k rozsáhlosti nápovědy přímo v Shellu (včetně příkladů použití) vám nabízím „pouze“ seznam dostupných příkazů s jednoduchým osvětlením jejich funkce. V kulatých závorkách ( ) budu uvádět verzi Shellu, pokud se daný příkaz nevyskytuje v obou verzích.

Při ovládání Shellu vám pomůže klávesa TAB, která bude dokončovat jednoznačné názvy adresářů/souborů.

Nevýhodou pro mě bylo používat v absolutní i relativní cestě k souboru zpětné lomítko ( \ ).

Shell má paměť zadaných příkazů, pomocí šipek nahoru/dolu můžete listovat historií.

alias
Zobrazí/vytvoří/odstraní aliasy, které se ukládají do NVRAM. Při novém startu jsou tak již vytvořené aliasy stále dostupné. Aliasem může být nový název pro příkaz nebo spouštění další EFI aplikace.

attrib
Zobrazí/nastaví atributy souborů/adresářů. Pomocí znaku plus/minus lze ovlivnit tyto atributy:

a = archiv
s = systémový
h = skrytý
r = pouze pro čtení

Atribut D poukazuje na adresář.

bcfg (2)
Manipuluje s bootovacími záznamy v UEFI (obdoba efibootmgr v Linuxu). V žádném případě nemanipulujte se systémovými záznamy (System Setup, Boot menu atd.)

cd
změna pracovního adresáře (klasika většiny příkazových řádků)

cls
smaže obsah obrazovky, nebo nastaví barvu pozadí (čísla barev v nápovědě)

comp
porovnává obsah dvou souborů v binárním režimu

connect
Připojí a spustí ovladače pro konkrétní zařízení. Pokud si nejste jisti, raději tuto funkci nechejte.

cp
kopíruje jeden nebo více zdrojů do místa určení
-r kopíruje i adresář (rekurzivně)

date
zobrazí/nastaví aktuální datum v UEFI

dblk
zobrazí obsah jednoho nebo více bloků z blokového zařízení

devices
vypíše seznam zařízení, která jsou spravována EFI ovladači

devtree
vypíše strom zařízení, jejichž ovladače spadají do EFI Model Driver

dh
zobrazí informace o všech zařízeních/protokolech připojená do EFI prostředí

Shell> dh -b

vypíše všechna zařízení/protokoly (po stránkách)

Shell> dh xxx

dosadíte-li za xxx číslo řádku z předchozího výpisu, zobrazí se podrobné informace zařízení/protokolu

disconnect
Odpojí ovladače pro konkrétní zařízení. Umožňuje odpojení zařízení (devicehandle), ovladačů (driverhandle), nebo potomků zmíněných (childhandle).

Parametr -r odpojí všechny ovladače od všech zařízení. Po zadání:

Shell> disconnect -r

vám nezbude nic jiného než fungující tlačítko Power a Reset.

dmem
vypíše obsah systémové paměti nebo paměť zařízení (shodný výpis obdržíte s příkazem mem)

dmpstore
uloží/nahraje/smaže proměnné v NVRAM (databáze certifikátů, aliasy atd.)

Shell> dmpstore -d MOKlist

smaže všechny certifikáty a hashe v MOKlistu

drivers
zobrazí informace o ovladačích podporující EFI Driver Model

drvcfg
Vyvolá konfiguraci ovladače. Máte k dispozici 4 stupně konfigurace. Safe (bezpečná), Manufacturing (výrobní), Custom (vlastní) a Performance (výkonná).

drvdiag
vyvolá diagnostiku ovladače

echo
zobrazí zprávu, nebo vykoná script (soubor nsh)
parametr -on vypíše zadaný text
parametr -off nebude vypisovat, ale provádět příkazy

edit
celoobrazovkový textový editor podporující Unicode a ASCII typy souborů

eficompress
používá se ke kompresi souboru pomocí EFI kompresního algoritmu (Shell je komprimován pomocí Tiano kompresního algoritmu, který není kompatibilní s EFI kompresním algoritmem)

efidecompress
používá se pro dekompresi souboru pomocí EFI kompresního algoritmu (Shell je komprimován pomocí Tiano kompresního algoritmu, který není kompatibilní s EFI kompresním algoritmem)

err (1)
nastaví aktuální úroveň chyb v systému, nastavením proměnné EFIDebug na hodnotu errorlevel, což je bitová maska pro různé chyby konkrétního zařízení

exit
ukončí Shell a navrátí se do rodičovského systému (bootovací nabídka UEFI nebo zavaděč ze kterého byl Shell spuštěn)

getmtc (2)
zobrazí MTC z BootServices

guid (1)
zobrazí seznam všech GUID, které byly registrovány v EFI prostředí

help
zobrazuje nápovědu k příkazům (shodný s příkazem ?)

hexedit
celoobrazovkový hexeditor pro soubory, blokové zařízení nebo oblasti paměti

ifconfig
zobrazí/změní výchozí IP adresu v UEFI IP4

ipconfig (1)
zobrazí/změní konfiguraci IP

Shell> ipconfig -r

restartuje PXE a DHCP nastavení

Shell> ipconfig 10.0.0.25 -m 255.255.255.0

nastaví uvedené hodnoty IP adresy a síťové masky

load
nahraje EFI ovladač do paměti, a není-li uveden parametr -nc, pokusí se ovladač připojit ke správnému zařízení

loadpcirom
nahraje do paměti PCI obraz ROM a bez parametru -nc jej spustí

ls
Vypisuje obsah adresáře a informace o souborech. Může spolupracovat s příkazem attrib a zobrazovat jen soubory splňující zadané atributy.

map
Při startu Shellu se automaticky mapují rozeznané souborové systémy (úvodní obrazovka Shellu).
Pomocí map však můžete definovat nové mapování mezi uživatelem a zařízením.

Shell> map f*

vypíše všechna mapovaná zařízení začínající písmenem f

Shell> map -d floppy

smaže mapování uvedeného zařízení

mem
zobrazí obsah systémové paměti nebo paměti zařízení

memmap
zobrazí mapu paměti, která je spravována EFI prostředím (EFI specifikace definuje sadu paměti pro EFI prostředí)

mkdir
vytvoří jeden nebo více adresářů

mm
zobrazí nebo změní MEM / MMIO / IO / PCI / PCIe adresový prostor
MEM – přistupuje k systémové paměti
MMIO – přistupuje k paměti zařízení
IO – přistupuje k Input/Output portům
PCI – přistupuje k PCI konfiguračnímu prostoru
PCIe – přistupuje k PCIexpress konfiguračnímu prostoru

mode
zobrazí/nastaví počet řádků a sloupců textu výstupní konzole

mount (1)
připojí souborový systém na blokovém zařízení

mv
přesune jeden nebo více souborů

openinfo
zobrazí informace o protokolech

parse (2)
načte hodnoty z konkrétního záznamu pro formátovaný výstup

pci
zobrazí seznam pci zařízení

ping
pro pingnutí sítě

reconnect
odpojí a poté znovu připojí ovladače pro konkrétní zařízení
-r provede znovuzavedení ovladačů pro všechna zařízení

reset
resetuje systém

rm
Maže soubory a adresáře. Při pokusu smazat read-only soubory se setkáte s neúspěchem. Takové soubory je potřeba nejprve upravit pomocí příkazu attrib.

sermode
zobrazí/nastaví hodnoty pro sériové porty

set
zobrazí/nastaví proměnné prostředí, které se ukládá do NVRAM

smbiosview
zobrazí informace ze SMBIOS (mnoho informací rozdělených do kategorií s možností uložení do souboru)

fs2:\> smbiosview -t 9 > info.log

uloží informace z vybrané kategorie (-t 9) do souboru na zařízení fs2 (v mém případě je to druhý oddíl flash disku)

stall
zastaví procesor po zadanou hodnotu v milisekundách

telnetmgmt (1)
nastaví typ terminálu pro systém

setsize (2)
upraví velikost souboru

setvar (2)
nastaví hodnoty v UEFI

time
zobrazí/nastaví aktuální čas v UEFI

timezone
zobrazí/nastaví aktuální časové pásmo systému

touch
u souborů a adresářů upraví čas a datum na aktuální hodnotu

type
odešle obsah souboru na standardní výstupní zařízení
-a soubor je odeslán jako proud ASCII znaků
-u soubor je odeslán jako proud Unicode znaků

unload
uvolní nahraný EFI ovladač z paměti

ver
zobrazí informace o UEFI
-s zobrazí informace o EFI Shellu

vol
zobrazí/změní název svazku (volume label)

Ostatní příkazy (for, goto, if, pause, shift atd.) slouží pro skriptování (soubor startup.nsh).

Nahoru

Odkazy

Přidat téma diskuse

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz