1,267 瀏覽數

ARM UEFI PXE Boot

測試環境如下

PXE Server : CentOS6.8 x64
PXE Client (UEFI PXE Boot) : CentOS 7 ARM64

同樣適用於 RedHat RHEL

什麼是 uEFI!! 什麼是 PXE!! 可以參考下列聯結~

  • uEFI
    Extensible Firmware Interface (EFI) 的功能就類似傳統 BIOS ,他是 OS 與硬體之間溝通介面. 不過相較於傳統的 BIOS EFI 他的架構更模組化,功能更強大.EFI 的架構是由 Intel 提出的, 目前是交由 Unified EFI Forum 來管理.也就是我們現在所稱的 Unified Extensible Firmware Interface (UEFI)
  • PXE
    PXE (Preboot eXecution Environment) 是透過網路來安裝作業系統,在網卡上有一塊 ROM(firmware) 裡面存放了一些基本的網路協定如:Internet Protocol (IP), User Datagram Protocol (UDP), Dynamic Host Configuration Protocol (DHCP) 以及 Trivial File Transfer Protocol (TFTP) 透過這一些協定使得 PXE 可以進行網路的存取進一步安裝作業系統.

EFI OS

支援 ARM 處理器的 CentOS 7 , 有支援 EFI PXE Boot 支援 EFI 開機.

要怎麼判斷你的作業系統是否支援 EFI Boot 的方式最直接的方式是直接看光碟中是否包含 EFI Boot image 比如 CentOS 7 的光碟中就有一個資料夾為 /EFI/BOOT 這就是支援了 EFI Boot 的証明.

環境需求 ,tftp server 的設定 ,安裝媒體(FTP,NFS,HTTP) ,請自行參考 PXELinux – http://benjr.tw/83 .

DHCP Server
以前在設定 Legacy PXE 時在 /etc/dhcpd.conf 設定中我們指定了 pxelinux.0 這個檔案當作 PXELinux 的前導程式.但他不是 EFI 的 Application 所以我們需要 UEFI 的 PXE 開機的前導程式.

在 CentOS 光碟中 /EFI/BOOT 目錄中可以找到.

[root@localhost ~]# ll /mnt/EFI/BOOT/
total 2644
-r--r--r-- 1 root root 888808 Apr 14 06:30 BOOTAA64.EFI
dr-xr-xr-x 2 root root   4096 Apr 14 06:30 fonts
-r-xr-xr-x 1 root root 899584 Apr 14 06:30 grubaa64.efi
-r--r--r-- 1 root root   1433 Apr 14 06:30 grub.cfg
-r--r--r-- 1 root root 903464 Apr 14 06:30 MokManager.efi
-r--r--r-- 1 root root   1111 Apr 14 06:30 TRANS.TBL
[root@localhost ~]# file /mnt/EFI/BOOT/grubaa64.efi 
EFI/BOOT/grubaa64.efi: PE32+ executable (EFI application)

grubaa64.efi 是我們開機所需要的 PE32+ executable EFI application ,而設定檔是 grub.conf 這兩個檔案皆需要複製到 /var/lib/tftpboot 目錄下(請依據你的 tftpboot 目錄存放).

[root@localhost ~]# cp /mnt/EFI/BOOT/* /var/lib/tftpboot 

grub.conf 預設檔案格式如下(只保留 menuentry – Install CentOS Linux AltArch 7 ).

[root@localhost ~]# cat /var/lib/tftpboot/grub.cfg
set default="1"

function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2

set timeout=60
### END /etc/grub.d/00_header ###

search --no-floppy --set=root -l 'CentOS 7 aarch64'

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install CentOS Linux AltArch 7' --class red --class gnu-linux --class gnu --class os {
	linux /images/pxeboot/vmlinuz inst.repo=nfs:192.6.1.1:/var/ftp/ ip=dhcp
	initrd /images/pxeboot/initrd.img
}

設定檔的幾個重點:
set timeout=60, set default=”1″
如果在設定時間內沒有做選擇,系統會依據 default 所設定的時間進入預設的選項 (單位為秒).
menuentry
PXE 安裝選項,需把 Lnux (kernel-vmlinuz) , initrd 的檔案複製到路徑 tftp (/tftpboot) + DHCP filename (linux-install).

menuentry 使用請參考

menuentry title [--class=class …] [--users=users] [--unrestricted] [--hotkey=key] { command; … }
  • –class option may be used any number of times to group menu entries into classes. Menu themes may display different classes using different styles.
  • –users option grants specific users access to specific menu entries. See Security.
  • –unrestricted option grants all users access to specific menu entries. See Security.
  • –hotkey option associates a hotkey with a menu entry. key may be a single letter, or one of the aliases ‘backspace’, ‘tab’, or ‘delete’.

Linux 參數:
/images/pxeboot/vmlinuz – Linux 核心
inst.repo – 指定安裝來源
ip=dhcp – 使用 DHCP

如果選單的項目太多時,可以使用 submenu 的方式.

submenu 'Troubleshooting -->' {
	menuentry 'Install CentOS Linux AltArch 7 in basic graphics mode' --class red --class gnu-linux --class gnu --class os {
		linux /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20aarch64 nomodeset
		initrd /images/pxeboot/initrd.img
	}
	menuentry 'Rescue a CentOS Linux AltArch system' --class red --class gnu-linux --class gnu --class os {
		linux /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=CentOS\x207\x20aarch64 rescue
		initrd /images/pxeboot/initrd.img
	}
}

接下來是 DHCP 的設定檔 /etc/dhcp/dhcpd.conf 把開機前導指定為 grubaa64.efi

[root@localhost ~]# vi /etc/dhcp/dhcpd.conf
#ddns-update-style interim;
ddns-update-style none;
ignore client-updates;

allow booting;
allow bootp;

option space PXE;
  option PXE.mtftp-ip    code 1 = ip-address;
  option PXE.mtftp-cport code 2 = unsigned integer 16;
  option PXE.mtftp-sport code 3 = unsigned integer 16;
  option PXE.mtftp-tmout code 4 = unsigned integer 8;
  option PXE.mtftp-delay code 5 = unsigned integer 8;
  option arch code 93 = unsigned integer 16;

subnet 192.6.1.0 netmask 255.255.255.0 {
	range 192.6.1.50 192.6.1.250;
	option routers 192.6.1.1; 
	option subnet-mask 255.255.255.0;

          class "pxeclients" {
                  match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
                  next-server 192.6.1.1;

		  filename "grubaa64.efi”;
          }
  }

在整個 DHCP 設定檔中,最重要的就是 filename “grubaa64.efi” 整個網路開機顯示畫面,流程控制都由 grubaa64.efi 來管理.接下來就是將具有 UEFI PXE 功能網路卡的設定為第一順位的開機次序.

The PXE clients
將具有 UEFI PXE 功能網路卡的 client 開機.

關於 PXE , UEFI PXE 可以參考官方網站的說明 https://access.redhat.com/documentation/zh-TW/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/chap-installation-server-setup.html

發表迴響