Programowanie w/pod UEFI (Czyli po co komu OS)
Prowadzący: Michał Szaknis
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
- jakiś laptop z UEFI
- 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 operacyjnego. Można sie wiele dowiedzieć o architekturze intelowskiej. Konkretnie do uefi https://wiki.osdev.org/UEFI.