Programowanie w/pod UEFI (Czyli po co komu OS)

Prowadzący: Michał Szaknis

Zadania kwalifikacyjne są tutaj.

Opis 

Dawno, dawno temu, w krainie kompatybilności wstecznej pojawiła się potrzeba stworzenia prostego systemu, który uruchomiłby się przed startem systemu operacyjnego i dokonałby konfiguracji sprzętu. Powstał więc BIOS (Basic Input Output System), który za względu na kompatybilność wsteczną pomimo pojawiających się nowych procesorów najpierw 32 bitowych a potem 64 pozostał 16 bitowym koszmarem, gdzie wszystko pisało się w 16 bitowym assemblerze, adresacja pamięci korzystała z segmentacji a władze na procesorem miał kontroler klawiatury (na PS/2). Dodatkowo 20 bit szyny adresowej RAMu był ustawiony na zero oraz zaadresować można było aż 1MB pamięci RAM. 

Niestety czasy, w których mając 32Kb RAMu lądowało się na księżycu minęły i postanowiono zastąpić BIOS czymś nowszym (bardziej skomplikowanym). Powstało więc UEFI (Unified Extensible Firmware Interface), które oprócz pięknych splash sceenów i innych wodotrysków zostało wyposażone w moduły do obsługi podstawowego sprzętu takiego jak karta sieciowa, graficzna czy dyski. Odstąpiono domyślnie od kompatybilności wstecznej dzięki czemu UEFI pracuje w trybie 64 bitowym co wprowadza wiele udogodnień. Wprowadzono też obsługę systemu plików, umożliwiając w miarę bezbolesne sięganie do plików i katalogów (na 16 bitowym assemblerze to byłby koszmar). Na zajęciach będziemy "eksplorować" interfejs UEFI, obsługę klawiatury, karty graficznej czy sieciowej (UEFI ma wbudowany stos TCP/IP i gotowe API). Poznając przy tym pułapki jaki na nas czekają oraz jak perswazją zmusić dobrodziejstwa nowoczesnego C++ do działania. 

No dobra ale po co to komu?

Wstępnie do zabawy, aby sobie napisać jakieś efekty graficzne czy takie aplikacje blokujące komputer i proszące o hasło. Później jak się już opanuje środowisko i architekturę własne bootloadery lub virtual machine managery. Następnie po założeniu czarnej bluzy z kapturem, bootkity (wirusy modyfikujące system operacyjny) czy tzw. bluepill z matrixa (wirusy zamykające system operacyjny w maszynę wirtualną). 

Wymagania sprzętowe 

  1. jakiś laptop z UEFI
  2. najlepiej, żeby był to laptop z linuxem (linux na pendrive też ujdzie) 

Wymagania nie sprzętowe 

Programować będziemy głównie w C++, czasem może zdarzy się jakaś wstawka assemblerowa, więc dobrze jest znać język C++ i koniecznie trzeba ogarniać pointery. Poza tym mile widziana będzie choćby szczątkowa znajomość assemblera (parę podstawowych instrukcji i co to są rejestry), głównie po to, aby po odpaleniu debuggera nie zrobić wielkich oczu.  

Przydatne rzeczy 

Oprócz pielgrzymek na stackoverflow polecam poczytać https://wiki.osdev.org/Expanded_Main_Page jest tam wszystko co potrzebne do pisania własnego systemu operacyjnegoMożna sie wiele dowiedzieć o architekturze intelowskiejKonkretnie do uefi https://wiki.osdev.org/UEFI.