Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi...

160
Marrying U-Boot, UEFI and grub

Transcript of Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi...

Page 1: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Marrying U-Boot, UEFI and grub

Page 2: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

About Me

• Alexander Graf

• KVM and QEMU developer for SUSE

• Server class PowerPC KVM port

• Nested SVM

• Founding member of SUSE ARM team

Page 3: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Booting on ARM

Page 4: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Boot ROM

Booting on ARM

Page 5: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware FlashBoot ROM

Booting on ARM

Page 6: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware FlashBoot ROM SD / USB / etc

Booting on ARM

custom extlinux vboot UEFI

Page 7: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware, do not care

Firmware FlashBoot ROM SD / USB / etc

Ideal Distro boot flow

custom extlinux vboot UEFI

Page 8: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware, do not care

Firmware FlashBoot ROM SD / USB / etc

Ideal Distro boot flow

One protocol torule them all

Page 9: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

Page 10: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

UEFI

Page 11: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

UEFI NVRAM

Page 12: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

UEFI NVRAM

sda2/foo.efi

mmc0/bar.efi

eth0/dhcp4

Page 13: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

NVRAM

sda2/foo.efi

mmc0/bar.efi

eth0/dhcp4

UEFI

Page 14: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

NVRAM

sda2/foo.efi

mmc0/bar.efi

eth0/dhcp4

✗UEFI

Page 15: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

NVRAM

sda2/foo.efi

mmc0/bar.efi

eth0/dhcp4

✗UEFI

Page 16: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

NVRAM

sda2/foo.efi

mmc0/bar.efi

eth0/dhcp4

UEFI

Page 17: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

Removable

NVRAMUEFI

Page 18: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

Removable

NVRAM

sda/ESP/efi/boot/bootaa64.efi

mmc0/ESP/efi/boot/bootaa64.efi

cd0/eltorito/efi/boot/bootaa64.efi

UEFI

Page 19: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

Removable

NVRAM

sda/ESP/efi/boot/bootaa64.efi

cd0/eltorito/efi/boot/bootaa64.efi

mmc0/ESP/efi/boot/bootaa64.efi

UEFI

Page 20: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

Removable

NVRAM

sda/ESP/efi/boot/bootaa64.efi

cd0/eltorito/efi/boot/bootaa64.efi

✗mmc0/ESP/efi/

boot/bootaa64.efiUEFI

Page 21: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

mmc0/ESP/efi/boot/bootaa64.efi

UEFI boot flow

Removable

NVRAM

sda/ESP/efi/boot/bootaa64.efi

cd0/eltorito/efi/boot/bootaa64.efi

✗UEFI

Page 22: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

mmc0/ESP/efi/boot/bootaa64.efi

UEFI boot flow

Removable

NVRAM

sda/ESP/efi/boot/bootaa64.efi

cd0/eltorito/efi/boot/bootaa64.efi

UEFI

Page 23: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

mmc0/ESP/efi/boot/bootaa64.efi

UEFI boot flow

Removable

NVRAM

sda/ESP/efi/boot/bootaa64.efi

cd0/eltorito/efi/boot/bootaa64.efi

✔bootaa64.efi

UEFI

Page 24: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

bootaa64.efiUEFI

Page 25: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

bootaa64.efi

EFI Runtime Data

Console Boot Services

Runtime Services Tables

UEFI

Page 26: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

bootaa64.efi

EFI Runtime Data

Console

Runtime Services Tables

UEFI

Boot Services

Page 27: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow

bootaa64.efiUEFI

Boot Services

Page 28: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

btrfs

UEFI boot flow

bootaa64.efiUEFI

Boot Services

Page 29: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

btrfs

UEFI boot flow

bootaa64.efiUEFI

Boot Services

Page 30: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

btrfs

UEFI boot flow

bootaa64.efiUEFI

Boot Services

Page 31: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

btrfs

UEFI boot flow

bootaa64.efi

✗✗UEFI

Boot Services

Page 32: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flowRuntime Services

NVRAMUEFI

Page 33: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow advantages

Page 34: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow advantages

UEFI

Page 35: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware, do not care

UEFI boot flow advantages

UEFI

Page 36: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware, do not care

UEFI boot flow advantages

UEFI

Page 37: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware, do not care

UEFI boot flow advantages

UEFIbtrfs

Page 38: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

zfs

Firmware, do not care

UEFI boot flow advantages

UEFIbtrfs

Page 39: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

ext4 extension 593

zfs

Firmware, do not care

UEFI boot flow advantages

UEFIbtrfs

Page 40: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

ext4 extension 593

zfs

Firmware, do not care

UEFI boot flow advantages

btrfs

UEFI

Page 41: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Firmware, do not care

UEFI boot flow advantages

UEFI

Page 42: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI boot flow advantages

Page 43: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4
Page 44: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4
Page 45: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

Page 46: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U

EFI_STATUS EFIAPI GetNextMonotonicCount ( OUT UINT64 *Count ) { if (Count == NULL) { return EFI_INVALID_PARAMETER; }

*Count = gCurrentMonotonicCount++; return EFI_SUCCESS; }

Page 47: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

static efi_status_t EFIAPI efi_get_next_monotonic_count(uint64_t *count) { static uint64_t mono = 0; EFI_ENTRY("%p", count); *count = mono++; return EFI_EXIT(EFI_SUCCESS); }

U-Boot

Page 48: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U

Page 49: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U

UEFI

Page 50: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U

Page 51: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U

Black Boxes

Page 52: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

Page 53: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

Monolithic

Page 54: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

Page 55: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

core

Page 56: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

coreBBB

Page 57: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

coreBBB

OpenPlatform

Page 58: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

coreBBB

OpenPlatform

$ grep -R ARM configs/ | wc -l

684

Page 59: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot

Foundation for black box modules Monolithic, GPL

Windows coding style Linux coding style

Built to fork Built to include

Page 60: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

Page 61: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

Page 62: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

Page 63: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

Page 64: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

u32 block_size u64 last_block char read_only

read_blocks() write_blocks()

Page 65: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

u8 mac_address[32] u8 ip_address[16] u8 media_present

transmit() receive()

Page 66: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot interfaces

Page 67: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

U-Boot interfaces

ulong blksz u64 lba

char removable

blk_dread() blk_dwrite()

eth_get_ethaddr() net_send_packet()

eth_rx()

Page 68: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

Page 69: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

Page 70: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI interfaces

efi_loader

Page 71: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

efi_loader

Page 72: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

efi_loader

bootefi

Page 73: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

Page 74: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

Page 75: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

Page 76: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

U-Boot> load mmc 0:1 $kernel_addr_r Image

Page 77: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

U-Boot> load mmc 0:1 $kernel_addr_r Image reading Image 568320 bytes read in 165 ms (3.3 MiB/s)

Page 78: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

U-Boot> bootefi $kernel_addr_r $fdt_addr_r

Page 79: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

U-Boot> bootefi $kernel_addr_r $fdt_addr_r ## Starting EFI application at 0x01000000 … EFI stub: Booting Linux Kernel... EFI stub: UEFI Secure Boot is enabled. EFI stub: Using DTB from configuration table EFI stub: Exiting boot services and installing virtual address map...

Page 80: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

U-Boot> bootefi $kernel_addr_r $fdt_addr_r ## Starting EFI application at 0x01000000 … EFI stub: Booting Linux Kernel... EFI stub: UEFI Secure Boot is enabled. EFI stub: Using DTB from configuration table EFI stub: Exiting boot services and installing virtual address map...

Page 81: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

Page 82: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

Page 83: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

bootefi

KASLR

Page 84: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

efi_loader

bootefi

Page 85: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

efi_loader

bootefi

distro boot

Page 86: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

distro boot

Page 87: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

distro boot

boot_targets=mmc0 usb0 pxe dhcp

Page 88: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

distro boot

boot_targets=mmc0 usb0 pxe dhcp

extlinux

Page 89: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

distro boot

boot_targets=mmc0 usb0 pxe dhcp

extlinux

boot.script

Page 90: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

distro boot

boot_targets=mmc0 usb0 pxe dhcp

extlinux

boot.script

EFI

Page 91: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

Page 92: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

Page 93: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

Partition Table

ESP

Page 94: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ESP $fdtfile

Page 95: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ESP

$fdtfile

/

/dtb/

/dtb/current/

/boot/

/boot/dtb/

/boot/dtb/current/

Page 96: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ESP

$fdtfile

efi/boot/bootaa64.efi

Page 97: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ESP

$fdtfile

Page 98: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ESP

$fdtfile

Page 99: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ESP

$fdtfile

Page 100: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

Page 101: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

Page 102: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

Page 103: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ISO9660el torito

Page 104: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

ISO9660el torito el torito

Page 105: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Partition Table

EFI

distro boot

el torito el torito

Page 106: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Partition Table

EFI

distro boot

el torito

$fdtfile

el torito

Page 107: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

✔ ✔

Page 108: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

DHCP Distro Boot

Page 109: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

DHCP Distro Boot DHCP Server

Page 110: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

DHCP Distro Boot DHCP Server

DHCP req

Page 111: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI & Arch VCI

EFI

distro boot

DHCP Distro Boot DHCP Server

DHCP req

Page 112: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

filename

EFI & Arch VCI

EFI

distro boot

DHCP Distro Boot DHCP Server

DHCP req

DHCP ack

Page 113: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

TFTP

filename

EFI & Arch VCI

EFI

distro boot

DHCP Distro Boot DHCP Server

DHCP req

DHCP ack

Page 114: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

EFI

distro boot

✔ ✔ ✔

Page 115: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI Tables

Page 116: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI Tables

bootaa64.efi

EFI Runtime Data

Console Boot Services

Runtime Services

UEFI

Tables

Page 117: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI TablesTables

Page 118: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI TablesTables

ACPI

Page 119: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI TablesTables

ACPI✗

Page 120: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI TablesTables

ACPI✗

Page 121: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

UEFI Tables

Tables

Page 122: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

Page 123: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

NVRAM

Page 124: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

NVRAM

Page 125: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

NVRAM

UEFI RTS

Page 126: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

NVRAM

UEFI RTS

Page 127: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

NVRAM

UEFI RTS

✗✗

Page 128: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

Page 129: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

init

Page 130: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

init

Page 131: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

init

Page 132: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

bootefi

Page 133: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

bootefi

Page 134: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

bootefi

Page 135: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

Page 136: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

Page 137: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

EFI Shell

Page 138: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

EFI Shell

Page 139: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Missing Features

EFI Shell✗

Page 140: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

Page 141: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

Page 142: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?Department A Department B

Page 143: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 144: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 145: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 146: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 147: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 148: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 149: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 150: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 151: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 152: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 153: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Why?

+

Page 154: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Thank You

Page 155: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Further Information

https://events.opensuse.org/conference/oSC16/program/proposal/946

Page 156: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

External Sourceshttps://commons.wikimedia.org/wiki/File:Raspberry_Pi_B%2B_illustration.svg

https://commons.wikimedia.org/wiki/File:Sd-card-1377140.svg

http://eu.mophie.com/shop/media/catalog/product/cache/3/small_image/270x330/9df78eab33525d08d6e5fb8d27136e95/u/s/usb-micro3-40-blk_usb-tip-detail_front-back_540px.jpg

https://commons.wikimedia.org/wiki/File:Circle-icons-submarine.svg

https://commons.wikimedia.org/wiki/File:150-8-DIP.jpg

https://commons.wikimedia.org/wiki/File:Hdd_icon.svg

https://commons.wikimedia.org/wiki/File:ARM_CPU_icon.svg

http://findicons.com/icon/177982/memory#

Page 157: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

OSA Icons

Icons received from http://www.opensecurityarchitecture.org/cms/library/icon-library

Page 158: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

emojione Icons

Icons received from http://www.opensecurityarchitecture.org/cms/library/icon-library

Page 159: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Other Icons

http://findicons.com/icon/download/234261/clock/128/png

http://findicons.com/icon/439269/button_power

https://fosdem.org/2017/schedule/event/grub_new_maintainers/attachments/slides/1768/export/events/attachments/grub_new_maintainers/slides/1768/slides.pdf

https://de.wikipedia.org/wiki/BeagleBoard#/media/File:Beagle_Board_big.jpg

https://thenounproject.com/term/folder-tree/27307/

https://commons.wikimedia.org/wiki/File:Crystal_Project_Hardware.png

http://findicons.com/icon/202613/folder_library

Page 160: Marrying U-Boot, UEFI and grub · 2017. 12. 14. · UEFI boot flow UEFI NVRAM sda2/foo.efi mmc0/bar.efi eth0/dhcp4

Other Icons

http://tumboy.tumblr.com/post/10052361836

http://findicons.com/icon/132807/b_leg_embossed

http://findicons.com/icon/237892/text_plain

http://findicons.com/icon/226957/package_games_board