UEFI Shell の コマンド
概要
UEFI Shellについてのメモ。
目次
- 概要
- 目次
- UEFI Shellとは
- UEFI Shell の動作環境構築
- リンク
- ユースケース
- シェルスクリプト
UEFI Shellとは
UEFI Firmware(BIOSに相当)上で動作するShellのこと。 簡単なファイル操作をはじめ、NW通信なども行うことができる。
UEFI Shell の動作環境構築
Ubuntu 20.04上のQEMU上でShellを試す
インストール方法
sudo apt install qemu-kvm
起動方法
qemu-system-x86_64 -bios OVMF.fd
Shell上からホスト上のディレクトリにアクセスできるようにする
-drive
オプションで指定する。
qemu起動後、ホストからディレクトリの内容を書き換えても、UEFI Shell上からは認識できないので注意すること。
qemu-system-x86_64 -bios OVMF.fd -drive file=fat:rw:path/to/dir
リンク
ソース
この辺。 github.com
ユースケース
help
コマンドの一覧 や 各コマンドの内容について調べる
helpコマンドを使う。
引数無しの場合はサポートしているコマンド一覧を確認できる。
help
コマンド名を引数に与えることでそのコマンドのhelpを参照できる。
help ls
ファイル/ディレクトリ
ファイルパスについて
Windowsライク。 パスの区切りはバックスラッシュ'\'。 また、先頭にボリュームラベル名を付与することで、そのマップ以下のディレクトリやファイルを指定できる。(Windowsのドライブレターのよう)
下記はボリュームラベルfs0
以下にマップされているhogeディレクトリを指定する絶対パス。
fs0:\hoge
ワイルドカードもサポートされている。
マウント可能な一覧を確認する(map)
> map Mapping table FS0: Alias(s):HD0a1:;BLK1: PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)/HD(1,MBR,0xBE1AFDFA,0x3F,0xFBFC1) BLK0: Alias(s): PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0) BLK2: Alias(s): PciRoot(0x0)/Pci(0x1,0x1)/Ata(0x0)
ファイルシステムをマウントする
下記のようにShell>
という表示の場合はファイルシステムがマウントされていない。
Shell>
マウントしたい対象にコロンを加えた文字列を入力することでマウントできる。
下記はfs0
をマウントする場合の例。
fs0:
マウントされた場合は、Shell>
という表記が変わり、ボリュームラベル名:ディレクトリパス
という表記になる。
fs0:\>
ディレクトリの一覧を表示する(ls/dir)
>ls Directory of: FS0:\ 05/29/2020 22:48 11,077 NvVars 05/29/2020 22:51 2 ls.txt 2 File(s) 11,079 bytes 0 Dir(s)
dir
コマンドもあるが、ls
へのエイリアスとなっている。
ファイルのコピー(cp/copy)/消去(rm/del)/移動・リネーム(mv/move)
UNIXコマンドのように使用可能。
コピー操作。
cp src dst
リネーム操作。
mv aaa bbb
消去操作。
また、rm
のエイリアスとして、del
が設定されている。
rm src
ディレクトリの作成(mkdir/md)/消去(rm)
mkdir hoge
mkdir
のエイリアスとしてmd
が用意されている。
ディレクトリの消去はrmdir
でなく、rm
コマンドを使用する。
rmdir hoge
ファイル内容を出力する(type/cat)
ファイル内容を標準出力に表示することができる。
type filepath
type
のエイリアスとしてcat
が設定されている。
タイムスタンプの更新(touch)
パス先のファイルのタイムスタンプを更新する。
なお、このコマンドで空ファイルの作成は行えないようだ。
touch filepath
ネットワーク
ネットワーク設定(ifconfig)
ifconfig コマンドを使う。
-l
オプションでinterface名を取得して、-s
コマンドと組み合わせてIPを割り当てる。
下記はeth0について、DHCPで割り当てる例。
ifconfig -s eth0 dhcp
設定の確認は-l
オプション。
ifconfig -l
疎通確認(ping)
ping
ユーティリティ
テキストエディタ(edit)
フルスクリーンのエディタが立ち上がる。 ショートカットは下記の様子。
Ctrl+Tを押下することで、ASCIIかUNICODEかを切り替えることができる。
機能 | ショートカット |
---|---|
終了 | Ctrl+Q |
ファイル保存 | Ctrl+S |
ファイルオープン | Ctrl+O |
検索 | Ctrl+F |
置換 | Ctrl+R |
カット | Ctrl+K |
ペースト | Ctrl+U |
行移動 | Ctrl+G |
文字コード切り替え | Ctrl+T |
ヘルプ | Ctrl+E |
バイナリエディタ(hexedit)
カット/ペーストがテキストエディタと異なるので注意。
ファイルのほか、-d
でディスクを、-m
でメモリもオープンできるらしい。
機能 | ショートカット |
---|---|
終了 | Ctrl+Q |
バッファ保存 | Ctrl+S |
カット | Ctrl+X |
ペースト | Ctrl+V |
選択開始 | Ctrl+T |
選択終了 | Ctrl+D |
ファイルオープン | Ctrl+O |
ディスクオープン | Ctrl+I |
メモリオープン | Ctrl+M |
オフセット移動 | Ctrl+G |
ヘルプ | Ctrl+E |
システム情報
エイリアス設定(alias)
オプション無しで、現在のエイリアスを確認できる。
>alias cat:type cd..:cd .. cd\:cd \ copy:cp del:rm dir:ls md:mkdir mem:dmem mount:map move:mv ren:mv
UEFI Shellや UEFIのバージョンを確認する(ver)
UEFI Shellのバージョンと、UEFI ShellがアクセスするUEFI 自体のバージョンを確認できる。
> ver UEFI Interactive Shell v2.2 EDK II UEFI v2.70 (EDK II, 0x00010000)
UEFI変数を操作する(dmpstore)
引数無しの場合、すべてのUEFI変数とその属性ならびに内容がダンプされる。
dmpstore
消去を行う場合は、-d
オプション。
タイムゾーンの表示/変更(timezone)
オプションが無い場合、現在のタイムゾーンが表示される。
>timezone LOCAL
タイムゾーンの一覧は-l
オプションで確認できる。
timezone -l
タイムゾーンの設定は、-s
オプションとUTCからのオフセットで設定できる。
timezone -s -9:00
時刻の確認/変更(time)
オプションが無い場合、現在時刻とUTCのオフセットが表示される。
>time 00:34:52 (UTC-09:00)
時刻設定は引数にhh:mm:ss
のフォーマットで指定できる。
time 12:00:59
日付の確認/変更(date)
オプションが無い場合、現在の日付が表示される。フォーマットは、MM/DD/YYYY
> date 05/29/2020
引数で日付情報を与えることで変更できる。
date 06/30/2020
文字列や環境変数の表示(echo)
また、スクリプトファイル実行時の出力制御の設定変更を行うことができる。
> echo hoge hoge
環境変数表示の例は下記。変数名を%
でくくる。
> echo %lasterror% 0xE
引数無しの場合は、スクリプト実行時の出力設定を確認できる。
この設定は、-on
もしくは -off
オプションで変更できる。
> echo Echo is on.
環境変数の確認/設定(set)
オプション無しの場合、現在の環境変数一覧を確認できる。
> set
変数名と内容を下記のように指定できる。
set key val
ディスク容量を確認する(vol)
引数無しで、現在のボリュームラベル上の使用量や空き容量を確認できる。
> vol
ボリュームラベル名を付与することで、そのボリューム以下の情報を確認できる。
> vol fs0 Volume QEMU VVFAT (rw) 528171008 bytes total disk space 528056320 bytes available on disk 8192 bytes in each allocation unit
ハードウェア
PCIデバイスの一覧表示(pci)
何もオプションがない場合、簡素な一覧が表示される。
> pci Seg Bus Dev Func --- --- --- ---- 00 00 00 00 ==> Bridge Device - Host/PCI bridge Vendor 8086 Device 1237 Prog Interface 0 00 00 01 00 ==> Bridge Device - PCI/ISA bridge Vendor 8086 Device 7000 Prog Interface 0 00 00 01 01 ==> Mass Storage Controller - IDE controller Vendor 8086 Device 7010 Prog Interface 80 00 00 01 03 ==> Bridge Device - Other bridge type Vendor 8086 Device 7113 Prog Interface 0 00 00 02 00 ==> Display Controller - VGA/8514 controller Vendor 1234 Device 1111 Prog Interface 0 00 00 03 00 ==> Network Controller - Ethernet controller Vendor 8086 Device 100E Prog Interface 0
バス番号、デバイス番号、ファンクション番号を付与することで、対象のコンフィグ空間の情報を確認できる。
さらに-i
オプションを付与することで人が読みやすい情報を付与して表示してくれる。
> pci 00 00 00 -i PCI Segment 00 Bus 00 Device 00 Func 00 [EFI 0000000000] 00000000: 86 80 37 12 07 00 00 00-02 00 00 06 00 00 00 00 *..7.............* 00000010: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 00000020: 00 00 00 00 00 00 00 00-00 00 00 00 F4 1A 00 11 *................* 00000030: 00 00 00 00 00 00 00 00-00 00 00 00 FF 00 00 00 *................* 00000040: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 00000050: 00 00 00 00 00 00 00 10-00 00 01 00 00 00 00 00 *................* 00000060: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 00000070: 00 00 02 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 00000080: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 00000090: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 000000A0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 000000B0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 000000C0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 000000D0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 000000E0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* 000000F0: 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 *................* Vendor ID(0): 8086 Device ID(2): 1237 Command(4): 0007 (00)I/O space access enabled: 1 (01)Memory space access enabled: 1 (02)Behave as bus master: 1 (03)Monitor special cycle enabled: 0 (04)Mem Write & Invalidate enabled: 0 (05)Palette snooping is enabled: 0 (06)Assert PERR# when parity error: 0 (07)Do address/data stepping: 0 (08)SERR# driver enabled: 0 (09)Fast back-to-back transact...: 0 Status(6): 0000 (04)New Capabilities linked list: 0 (05)66MHz Capable: 0 (07)Fast Back-to-Back Capable: 0 (08)Master Data Parity Error: 0 (09)DEVSEL timing: Fast (11)Signaled Target Abort: 0 (12)Received Target Abort: 0 (13)Received Master Abort: 0 (14)Signaled System Error: 0 (15)Detected Parity Error: 0 Revision ID(8): 02 BIST(0F): Incapable Cache Line Size(C): 00 Latency Timer(D): 00 Header Type(0E): 00, Single function, PCI device Class: Bridge Device - Host/PCI bridge -
終了/シャットダウン/再起動
UEFI Shell を終了する(exit)
exit
シャットダウン/再起動する(reset)
引数無しの場合、再起動処理が実行される。
reset
シャットダウンを行う場合は、-s
オプションを付与する。
reset -s
汎用的な情報
コマンドの出力をページ毎にいったん止める
おおよそのコマンドは -b
オプションを付与することで、
一ページ単位で表示を止めてくれるようになる。
表示が止まったのち、Enterで改ページ、qでキャンセルを行うことができる。
エスケープシーケンス
下記はスペースを含むディレクトリ生成の例。
mkdir aaa^ bbb
ファイルへのリダイレクト
>
によってファイルにリダイレクトできる。
dmpstore > dmpstore.txt
シェルスクリプト
シェルスクリプトの拡張子は.nshである。 UEFI Shell起動後、一定時間が経過した際に、startup.nsh というファイルが存在する場合は、そのファイルが自動実行される。