uefi support for memtest86+ - cs.cmu.edu412/lectures/l04_efimemtest_proposal.pdf · uefi...

12
UEFI Support for Memtest86+ Patricio Chilano Mateo 1

Upload: phungtruc

Post on 05-Oct-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

UEFI Support for Memtest86+

Patricio Chilano Mateo

1

MEMTEST86+http://www.memtest.org/

• Memory diagnostic tool for x86 and x86-64 platforms

• Release History- Initial release on 2004 as a fork of Memtest86 v3.0

- Latest release on 2013 as v5.01

- Released under GPL

• Written in C and x86

• Features- Support for most modern CPUs and chipsets

- 2TB of RAM on x86-64

- SMT support for up to 32 cores (experimental)

- Coreboot support2

UEFI• Interface between firmware and operating system

• Provides Boot and Runtime services

• Advantages- Avoid CPU real mode

- Slow- Only 1MB address space

- Larger disks (2T) by means of GPT- Bootmanager

- Flexible bootloader setup

- Better interface- Mouse support- Graphics

- UEFI Applications (shell)

3

Source: https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface

Goal

• Memtest86+ limitations (vs MemTest86)- Runs in BIOS environment

- int 0x15 for getting memory size

- VGA framebuffers for screen

- int 0x10 for loading disk sectors (bootloader code, so probably not needed)

• Most modern motherboards have UEFI firmware

• Add support to run in UEFI- Compile as UEFI application (Maybe CDROM image)

- 32 bit initially

- Run in a UEFI platform (Galileo or Minnowboard)

4

Booting in UEFI

• EFI System Partition (ESP)- Extra partition in GPT disk- Contains EFI drivers, applications, boot loaders- FAT32 file system (could be fat16)- Convention to store bootloaders

- /EFI/Ubuntu, /EFI/redhat, /EFI/boot

• NVRAM with list of boot options

- How to save items in NVRAM?

- If booted in UEFI mode use efibootmgr (linux)

• Bootmanager

- Reads NVRAM list, tries each item until one doesn’t return

• MACS do it a bit different

- EFI firmware read HFS+ and loads bootlader

5Source: https://en.wikipedia.org/wiki/GUID_Partition_Table

Development Tools

• GNU-EFI- Simpler to use

- Requires wrapping of function calls

• TianoCore EFI Development Kit (EDKII)- Support for advanced or new EFI features

• qemu

• OVMF (Open Virtual Machine Firmware)- Tianocore image to run on Qemu

• gdb- attach gdb to qemu to debug applications

6

Code Base (Memtest86+)• C ~ 15000 lines (*)

- 4000 in controller.c- interacts with the memory controller - reads and writes using pci (pci.c ~ 200 loc)

- 2500 in main.c and init.c- initializes the screen and calls the tests (not sure if should change)

- 1200 in custom libc- 1500 in test.c- 650 in error.c- 700 in smp.c (multicore support)- 350 in memsize.c

- gets memory information from linuxbios.c

- 127 in screen_buffer.c- uses the VGA buffer to write to screen

• X86 Assembly ~ 1400• 900 in head.S

- Configures final gdt and idt, reloctes code and calls test_start() in main.c

• bootsect.S and setup.S should not be used

7(*) Lots of inline assembly in C code

Lines of Code to Write

• Getting memory information (~400)

• Printing to screen (~900)

• Managing relocations (~300)

• Exisiting memory controller shouldn’t change

• Bootloader code should not be used if UEFI Application- Check in case of CDROM image

• main (not sure)

• Total > 1600 lines

8

Schedule (Optimistic)• 10 weeks remaining• Stage I (1 – 2 weeks)

- Understand existing code - Develop sample UEFI applications

• Stage II (~2 weeks)- Compile memtest86+ as UEFI application- Retrieve memory information

• Stage III (~2-3 weeks)- Replace VGA framebuffers and print to screen

• Stage IV (~2 weeks)- Debugging / making it work- Fix relocations problems if necessary

- Stage V (~1 week)- Try in real hardware

9

Challenges

• Understanding memtest86+ code base

• Reading UEFI spec (some!)

• UEFI development environment- Build complex applications with mix of x86 Assembly - C

• Calling UEFI services

• UEFI memory mappings (memtest86+ relocates itself)

• Debug uefi applications in qemu using gdb

10

Documentation

• UEFI specification• http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_7.pdf

• UEFI Programming• https://www.rodsbooks.com/efi-programming/index.html

• http://wiki.osdev.org/UEFI#Developing_with_GNU-EFI

• Intel Software Developer Manual• https://software.intel.com/en-us/articles/intel-sdm#combined

11

Additional features (would be nice)

• Native 64 bit code

• Add mouse support

• Write reports/logs in external drive

• Secure Boot

• Bootable from USB/CD- Dual Boot (BIOS and UEFI support in single image)

12