====== 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 or 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 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 2,048 . 09/05/17 01:36p 2,048 .. 09/05/17 01:36p 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''). ===== Devices ===== 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 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) ===== Drivers ===== 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 SerialIo B1 00000001 ? - - - - AMI NVMe BUS Driver Nvme 102 00000001 ? - - - - SBDXE : 185 00000024 B - - 1 1 BIOS[INT10] Video Driver CsmVideo 186 00000010 ? - - - - 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