设为首页 收藏本站
查看: 1018|回复: 0

EFI Shells and Scripting

[复制链接]

尚未签到

发表于 2015-12-15 15:14:32 | 显示全部楼层 |阅读模式
Introduction
Extensible firmware interface (EFI) brings new flexibility and opportunities to users by allowing them to work in the layer between their OS and BIOS, without altering either one. This paper explains how to use EFI shell commands, create a script file and set up the boot menu with shells and scripts. In addition, this paper demonstrates dual boot selection for the 64-bit Red Hat Linux* 7.1 and 64-bit Microsoft Windows* XP Professional operating systems.
EFI Shell Commands
The following is the list of the EFI 0.99[12.29] shell commands:
CommandsDescriptionshelp [-b] [internal command]Displays this helpguid [-b] [sname]Lists known GUID (Global Unique Identifiers)set [-bdv] [sname] [value]Gets or sets environment variablealias [-bdv] [sname] [value]Gets or sets alias settingsdh [-b] [-p prot_id] | [handle]Dumps handle informationunload [-nv] HandleIndexUnloads a protocol imagemap [-bdvr] [sname[:]] [handle]Maps shortname to device pathmount BlkDevice [sname[:]]Mounts a file system on a block devicecd [path]Updates the current directoryecho [[-on | -off] | [text]Echoes text to stdout or toggle script echoif [not] condition thenScript-only: IF THEN constructendifScript-only: Delimiter for IF THEN constructgoto labelScript-only: Jump to label location in scriptfor var in < /td>Script-only: Loop constructendforScript-only: Delimiter for loop constructpauseScript-only: Prompt to quit or continuels [-b] [dir] [dir] ...Obtains directory listingmkdir dir [dir] ...Makes directorymode [col row]Gets or sets current text modecp [-r] file [file] ... [dest]Copies files/directoriescomp file1 file2Compares two filesrm file/dir [file/dir]Remove files/directoriesmemmap [-b]Dumps memory maptype [-a] [-u] [-b] fileTypes filedmpstoreDumps variable storeload driver_nameLoads a driververDisplays version informationerr [level]Sets or displays error leveltime [hh:mm:ss]Gets or sets timedate [mm/dd/yyyy]Gets or sets datestall microsecondsDelay for x microsecondsreset [/warm] [reset string]Cold or warm resetvol fs [Volume Label]Sets or displays volume labelattrib [-b] [+/- rhs] [file]Sets or displays file attributescls [background color]Clears screenbcfg -?Configures boot driver and load optionsedit [file name]Edits a fileEdd30 [On | Off]Enables or disables EDD 3.0 device pathsdblk device [Lba] [Blocks]Hex dump of BlkIo devicespci [bus dev] [func]Displays PCI device(s) informationmm Address [Width] [;Type]Modifies memory: Mem, MMIO, IO, PCImem [Address] [size] [;MMIO]Dumps memory or memory mapped IOEddDebug [BlockDeviceName]Dumps EDD information from adapter cardTable 1: EFI 0.99[12.29] shell commands
This list appears when you type the command "help" at the shell prompt. However, it does not contain all of the EFI shell commands; the commands "attrib" and "exit" are absent. Not all commands can be used in script files. For example, the command "exit" missing from the list cannot be used in a script file. To exit out of a script, simply jump to the end of the file. Conversely, some of the commands like "if...then," "for...in," "goto" can only be used inside the script file.
To execute a command, type it at the shell prompt, which can be as follows:
Shell>
fs0:> (If there is a disk in the floppydrive before the PC is turned on, then the current media defaults to the floppy disk. If not, then the current media is the first hard disk partition.)
fs1:> (The first hard disk partition if fs0 is the floppy disk.)
fs2:> (Indicates the CD-ROM drive.)

This environment is similar to Microsoft DOS* (MS-DOS) in that the user types in commands and presses "Enter" to execute the commands. As demonstrated below, changing to another drive is easy: type the name of the drive and then press "Enter". ("" is a "carriage return" which translates to "press Enter.")
Shell> fs0:  
Fs0:> fs2:

Fs2:>
If the user is unfamiliar with the use of a command, they simply type it at the shell prompt and the computer displays the correct syntax and meaning of each of the switches.
EFI Shell Scripts
In basic terms, a script file is one that contains a sequence of shell commands that the user would like the computer to execute. Rather than entering them at the shell prompt, the user places the appropriate shell commands into a file and names the file "filename.nsh" to create a script file. This is extremely useful for repetitive tasks.
The script file resembles a batch file in MS-DOS; in EFI, a file called "startup.nsh" automatically runs every time a shell environment is opened. You can create the script using any ASCII or Unicode text editor. The following are shell commands frequently used in a script:
3.1 Echo:

    Syntax:echo [-on |

-off]

echo [text]

The first line in a script is usually "echo -off." This prevents subsequent batch file commands from displaying on the screen so that only results display.
For example, in a script file, there are such commands:

   
Batch commands:echo -on


echo This is a test

When you run that script, you see the following lines on the screen:

    Result:echo -on

echo This is a test

This is a test


The first two lines in bold are batch commands from the script, and the third line is the result of the second batch command. Note the display when the echo command is turned off:

    Batch commands:echo -off

echo This is a test

Result:echo -off

This is a test

The batch command "echo This is a test" no longer displays onscreen because the echo has been turned off. You always see the batch command "echo -off" because the echo does not disable after this line has been executed.
3.2 If

    Syntax:if [not] exist filename then ... endif if [not] string1 == string2 then
...
endif

The first form checks for file existence. Type either just the file name or the path and the file name. For example:

    set test "startup.nsh" # Assign "startup.nsh" to the

environment

# variable named test

if exist %test% then # Check to see if the file

"startup.nsh"

# exists in the current directory

type %test% # Displays the contents of "startup.nsh"

# if found.

endif # End of if ... then statement
The second form is the comparison between strings:

    set env1 "world"

set env2 "map"

if %env1% == %env2% then # Compare the value of 2

variables

echo %env1% is equal to %env2%

endif
Note: Spaces need to be inserted at both ends of the "==" sign. Otherwise, the shell generates an error.

    %env1% == %env2% correct

%env1%==%env2% incorrect
3.3 For

    Syntax:for %index in

group

...

endfor
This is a "for" loop. The index here is any single character, like a, b, c and so on, but it can't be a digit like 1, 2 or 3 because they can be misinterpreted as "argument" variables. Groups can be made up of strings or file names separated by the use of spaces. Consider the following examples:

    Batch commands:for %b in 1

2 3 4

type %b

**

endfor

Result:1

**

2

**

3

**

4

**

Batch commands:for %m in

*.nsh

type

%m

endfor
Result: The list of all files with extension "nsh" in the current directory.
Note: Spaces need to be inserted at both ends of the %index. Otherwise, the shell generates an error.

    Type %b ** correct

Type %b** incorrect

Dual Boot Selection
Consider the procedure for setting up dual boot on an Intel Itanium processor-based system. If Windows* 9x and Windows NT* or Windows* 2000 is installed on an Intel? Itanium? platform, you can set up a dual boot under Windows NT or Windows 2000. If Windows 9x and Linux are installed, you can set up a dual boot under Linux.
On the Intel Itanium platform, there is a layer between the firmware and the OS—that layer is the EFI. You can boot to any installed OS from the EFI layer as long as the OS is EFI-compliant.
Below is a demonstration of dual booting 64-bit versions of Red Hat Linux* and Microsoft Windows* 2000.
Before starting to build the boot menu:
A) You must disable the file "startup.nsh." This script runs automatically when you turn on the system and select the "Boot OS" option. When you install Windows 2000, it creates the "startup.nsh" file. This file executes a file called "launcher.efi," which boots directly to Windows 2000. Perform the following steps to disable the startup.nsh file:
1) During the Windows booting process, press any key to interrupt it.
2) Change the access right of the startup.nsh file to modify or delete it. From the shell prompt, "Shell>," go to the main partition:

Shell> fs0:

or Shell> fs1:
The choice between "fs0" and "fs1" depends on whether a disk is in the floppy drive.
Note: To use the floppy drive, a floppy disk must be inserted. Otherwise, the floppy drive is not recognized; the same caution applies to the CD-ROM drive.

fs0:> attrib -r startup.nshfs0:> edit startup.nsh
In edit mode, type a # sign at the beginning of the line containing the word "launcher" to comment it out.
B) Make sure the BIOS build 89B is flashed. One way to establish the correct build number is to look at the EFI version when you first turn on the PC; if it's correct, you see something like:
EFI Version 0.99[12.31]...
There are instances in which an incorrect BIOS version has been preloaded to the Software Development Vehicle (SDV). If you see "EFI Version 1.0[12.25]..." displayed on the screen, reflash the BIOS with build 89B or 99.
Assume you want the following multiple boot menu:

  • Windows XP* Professional
  • Red Hat Linux*
  • EFI Shell
You can create it using any of these methods:

  • boot maintenance menu
  • BCFG command
  • script
4.1 Using Boot Maintenance Menu:
Follow these steps to create a boot menu:
1) Turn on the system.
2) Select "Boot OS."
3) At the shell prompt, type "exit" and press Enter.

Shell> exit
4) The screen displays a boot menu similar to the following:

EFI Boot Manager ver. 0.99[12.29]

Select boot option

EFI Shell [built in]

Boot option maintenance menu

5) Select the boot option maintenance menu.
6) Select "Add a boot option."
7) Select the partition containing the OS loader. In this case, it is the first hard disk partition. Something similar to the following appears onscreen:
NO VOLUME LABEL [VenHw(Unknown D evice:80)/HD(Part1, Sig948939)]
Removable Media [VenHw(Unknown Device:01)]
Removable Media [VenHw(Unknown Device:FF)]
Load File [Acpi(PNP0A03,0)/Pci(4|0)/mac(009027E4A0F4)]
Load File [EFI Shell [Built-in]]
Legacy Boot A:
Legacy Boot C:
Exit
8) Select the first item, "NO VOLUME LABEL..."
9) The screen displays the files of the directory of the selected partition.
Select the file "eli.efi." This is the Linux loader file.
10) Type the title you wish to display on the boot menu when asked for the description: "Red Hat Linux*."
11) When prompted with:
"New boot option data: ASCII/Unicode string only Enter Boot option Data type[A- SCII U- Unicode N- No BootOption]," select "N."
12) Next, select the option "Save Changes to NVRAM[Y-yes N-No]:" and type "Y."
13) When you have no other OS to set, select "exit" to return to the previous menu.
14) Select "Cold Reset" to reboot the system.
15) To create an EFI shell prompt, select option "EFI Shell[built in]" from step 7 and type "EFI Shell" at step 10.
16) Type "exit" at the shell prompt "Shell>" to go to the boot menu.
4.2 Using the BCFG Command
The "Bcfg" is the boot configuration shell command. Assuming that "fs0" is the main partition, type the following statement to create the boot menu:
fs0:> bcfg boot add 2 eli.efi "Red Hat Linux*"
Note: You cannot create an EFI shell prompt using this method; you must use the previous method.
4.3 Using Script
Since there is no user-prompt command under the EFI shell to accept users' selected input, you must use an alternative method:
a) If the file startup.nsh does not exist,
create it or modify it to
contain strictly the following line:

    Menu
b) Create a file and name it menu.nsh with the following:



Echo -off

Dblk3:


Echo 2- Red Hat Linux




Echo Enter choice and press Enter





Note:

1) There is no option for the shell prompt since the command "nshell" is not on the list.

2) The current partition is set to "dblk3" instead of "fs0" or "fs1." This is because if there is a floppy disk in the floppy drive, then "fs0" is the floppy disk and "fs1" is the first hard disk partition. Otherwise, "fs0" is the first hard disk partition
.
c) Create a file and name it "2.nsh" with the following contents:

eli


Note: The "2.nsh" script is used to boot to Red Hat Linux*.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-151653-1-1.html 上篇帖子: shell批量远程命令执行 下篇帖子: EFI Shell 命令参考
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表