technical:cc3-build:efi

Working with EFI

Previous clusters' nodes used BIOS hardware interfaces. Nodes in CC3 prefer the use of EFI, to the point of requiring it in some cases (e.g. the in-rack storage server nodes). A basic knowledge of the EFI shell was invaluable in addressing hardware issues in nodes; summarized here is use of the EFI shell on the OCP2930w nodes.

When the node is booted, the <DEL> or <F2> key enters the Aptio system configuration tool. This stage of node startup allows for changing properties of the hardware (e.g. enable/disable hyperthreading, configure boot order). On the final tab of this program, a specific boot device can be chosen to (this time only) override the standard boot order. Choosing UEFI: Built-in EFI Shell from the list enters that mode; when done in the shell, the exit command returns to the Aptio system configuration tool.

When the EFI shell starts, it displays discovered device mappings: hard drives, USB keys, etc. Any devices on which a recognizable filesystem is found are assigned a mapping alias, e.g. fs1. A filesystems can be explored by first selecting it and then navigating with the dir and cd commands:

          :
  fs1   :Removable HardDisk - Alias hd43a0c0b0b blk1 
         PciRoot(0x0)/Pci(0x1D,0x0)/USB(0x0,0x0)/USB(0x2,0x0)/USB(0x1,0x0)/HD(1,MBR,0x3EF067C7,0x1A20C,0x4638)
          :
Shell> fs1:
fs1:\> dir
Directory of: fs1:\

  09/05/17  01:36p <DIR>          2,048  EFI
          0 File(s)           0 bytes
          1 Dir(s)


fs1:\> cd EFI\BOOT

fs1:\EFI\BOOT> dir
Directory of: fs1:\EFI\BOOT

  09/05/17  01:36p <DIR>          2,048  .
  09/05/17  01:36p <DIR>          2,048  ..
  09/05/17  01:36p <DIR>          2,048  fonts
  09/05/17  01:36p            1,296,176  BOOTX64.EFI
  09/05/17  01:36p            1,262,816  mmx64.efi
  09/05/17  01:36p            1,052,032  grubx64.efi
  09/05/17  01:36p            1,027,395  BOOTIA32.EFI
  09/05/17  01:36p            1,000,448  mmia32.efi
  09/05/17  01:36p              732,544  grubia32.efi
  09/05/17  01:36p                1,320  grub.cfg
          8 File(s)   6,372,731 bytes
          3 Dir(s)

This USB device had the CentOS 7 NetInstall image burned to it, and fs1 is the EFI boot partition thereon. The installer can be booted by executing the appropriate EFI boot loader executable (in this case, BOOTX64.EFI).

As a BIOS replacement, EFI needs to know about devices present in the system. Devices are organized in a tree structure. The EFI shell can display this tree:

Shell> devtree -b
Device Tree
  Ctrl[03] Fv(61C0F511-A691-4F54-974F-B9A42172CE53)
  Ctrl[04] Fv(5C60F367-A505-419A-859E-2A4FF6CA6FE5)
  Ctrl[C8] VenHw(396C010D-219A-458A-BA7D-A54D092B4BE5,0100)
  Ctrl[DF] PciRoot(0x0)
    Ctrl[1C2] PciRoot(0x0)/Pci(0x0,0x0)
    Ctrl[1C3] PciRoot(0x0)/Pci(0x1,0x0)
    Ctrl[1C4] ATTO ExpressSAS H1288
      Ctrl[203] ATA      Micron_5100_MTFD U037
      Ctrl[204] ATA      Micron_5100_MTFD U037
        Ctrl[212] FAT File System
        Ctrl[213] PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/SAS(0x500108600021FB59,0x0,0x1,NoTopology,0,0,0,0x0)/HD(2,GPT,C029C998-1B45-4AA2-BFBD-68237D88942E,0x64800,0x200000)
        Ctrl[214] PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/SAS(0x500108600021FB59,0x0,0x1,NoTopology,0,0,0,0x0)/HD(3,GPT,5778F2E3-4089-4A81-B472-40940CB03374,0x264800,0x800000)
        Ctrl[215] PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/SAS(0x500108600021FB59,0x0,0x1,NoTopology,0,0,0,0x0)/HD(4,GPT,EE4C1504-8F39-4856-AAD9-1BDAC727B81C,0xA64800,0x6400000)
        Ctrl[216] PciRoot(0x0)/Pci(0x1,0x0)/Pci(0x0,0x0)/SAS(0x500108600021FB59,0x0,0x1,NoTopology,0,0,0,0x0)/HD(5,GPT,E60E081A-C027-40BE-AD6B-6690FB2FBE09,0x6E64800,0x150BF800)
      Ctrl[205] SEAGATE  ST8000NM0065     K004
Press ENTER to continue, 'q' to exit:

The -b flag has any EFI shell command page its output. The device tree can also be presented in alternate (flag) fashion:

Shell> devices -b
C  T   D
T  Y C I
R  P F A
L  E G G #P #D #C Device Name
== = = = == == == =============================================================
DF R - -  -  1 42 PciRoot(0x0)
E0 R - -  -  1  4 PciRoot(0x1)
108 D - -  4  -  - AMI Console Splitter
150 R - -  -  1  1<UNKNOWN>
1C2 D - -  1  -  - PciRoot(0x0)/Pci(0x0,0x0)
1C3 D - -  1  -  - PciRoot(0x0)/Pci(0x1,0x0)
1C4 B X X  1  1 15 ATTO ExpressSAS H1288
1C8 D - -  1  -  - PciRoot(0x0)/Pci(0x2,0x0)
1C9 D - -  1  -  - PciRoot(0x0)/Pci(0x2,0x0)/Pci(0x0,0x0)
1CA D - -  1  -  - PciRoot(0x0)/Pci(0x2,0x0)/Pci(0x0,0x1)
1CB D - -  1  -  - PciRoot(0x0)/Pci(0x3,0x0)
1CC D - -  1  -  - PciRoot(0x0)/Pci(0x3,0x2)
1CD D - -  1  -  - PciRoot(0x0)/Pci(0x5,0x0)
1CE D - -  1  -  - PciRoot(0x0)/Pci(0x5,0x1)
1CF D - -  1  -  - PciRoot(0x0)/Pci(0x5,0x2)
1D0 D - -  1  -  - PciRoot(0x0)/Pci(0x5,0x4)
1D1 D - -  1  -  - PciRoot(0x0)/Pci(0x5,0x6)
1D2 D - -  1  -  - PciRoot(0x0)/Pci(0x6,0x0)
1D3 D - -  1  -  - PciRoot(0x0)/Pci(0x6,0x1)
Press ENTER to continue, 'q' to exit:
      :
1E7 B X X  1  1  1 PciRoot(0x0)/Pci(0x1C,0x4)/Pci(0x0,0x0)
      :

In this case, we see that the ATTO ExpressSAS H1288 adapter (with device handle 1C4):

  • Is a bus device (TYPE "B")
  • Is configurable (CFG "X")
  • Has diagnostics capabilities (DIAG "X")
  • Has 15 child devices (#C)

Devices may have an EFI driver associated with them:

Shell> drivers -b
            T   D
D           Y C I
R           P F A
V  VERSION  E G G #D #C DRIVER NAME                         IMAGE NAME
== ======== = = = == == =================================== ===================
7F 0000000B D - -  1  - AMI USB Driver                      Uhcd
81 0000000B B - -  1  4 USB bus                             Uhcd
82 00000002 ? - -  -  - USB Hid driver                      Uhcd
83 00000001 D - -  2  - USB Mass Storage driver             Uhcd
AB 00000001 ? - -  -  - AMI AHCI BUS Driver                 Ahci
AE 00000010 B - -  2  2 <UNKNOWN>                           SerialIo
B1 00000001 ? - -  -  - AMI NVMe BUS Driver                 Nvme
102 00000001 ? - -  -  - <UNKNOWN>                           SBDXE
      :
185 00000024 B - -  1  1 BIOS[INT10] Video Driver            CsmVideo
186 00000010 ? - -  -  - <UNKNOWN>                           <UNKNOWN>
1C6 01230001 B X X  1 15 ATTO ExpressSAS HBA 1.35.0f1        Offset(0x25C38,0x4
1E8 06032700 B X X  1  1 Intel(R) PRO/1000 6.3.27 PCI-E      MemoryMapped(0x3,0

Driver 1C6 manages the SAS HBA and is configurable:

Shell> devcfg -s 1C6

For the ATTO H1288, the driver configurator can be used to setup RAID groups, etc. The Intel ethernet adapter is managed by driver 1E8:

Shell> drvcfg 1e8
Configurable Components
  Drv[1E8]  Ctrl[1E7]  Lang[eng]

For the ethernet adapter, the specific device managed by the driver must be specified:

Shell> devcfg -s 1E8 1E7
  • technical/cc3-build/efi.txt
  • Last modified: 2018-04-27 12:45
  • by 127.0.0.1