
Sebelumnya, kami telah menganalisis urutan startup server menggunakan Legacy Legacy sebagai contoh. Sekarang saatnya untuk lebih mengenal UEFI.
Versi pertama dari apa yang sekarang dikenal sebagai Unified Extensive Firmware Interface (UEFI) dikembangkan pada tahun 90-an dari milenium terakhir khusus untuk sistem Intel® Itanium® dan disebut Intel Boot Initiative, dan kemudian - EFI.
Keinginan untuk "memperbarui" proses boot sudah diharapkan. PC-BIOS , sekarang disebut Legacy, menawarkan untuk bekerja dalam mode real 16-bit, alamat hanya 1 MB RAM, dan bootloader bersama dengan tabel partisi harus ditempatkan di 512 byte pertama dari drive. Selain itu, PC-BIOS mentransfer kontrol ke bootloader yang pertama ditemukan tanpa kemungkinan untuk kembali. Dalam kasus ini, penanganan kasus dengan beberapa sistem operasi ditempatkan di bahu bootloader.
Batasan ukuran bootloader menentukan penggunaan markup Master Boot Record (MBR), yang muncul pada tahun 1983. MBR tidak terstandarisasi, tetapi banyak vendor "tradisional". MBR memiliki batasan yang serius: hanya 4 partisi yang didukung secara default dan kapasitas penyimpanan tidak lebih dari 2,2 TB.
Pada bulan Desember 2000, spesifikasi EFI pertama yang tersebar luas dirilis di bawah versi 1.02. Lima tahun kemudian, Intel mentransfer EFI ke UEFI Forum, menambahkan Unified pada judulnya untuk menyoroti perubahan tersebut. Spesifikasi UEFI ada di domain publik dan terdiri dari beberapa dokumen:
- Spesifikasi ACPI;
- Spesifikasi UEFI;
- Spesifikasi UEFI Shell;
- Spesifikasi Inisialisasi Platform UEFI;
- Spesifikasi Kemasan Distribusi Inisialisasi Platform UEFI.
Kegembiraan dimulai di Spesifikasi Inisialisasi Platform UEFI , yang menjelaskan semua fase memuat platform.
UEFI bersifat universal, tetapi dalam artikel ini kita akan mengandalkan standar, melihat prosesor pada arsitektur x86_64.
Bangun, Neo!

Setelah penyalaan platform dimulai, catu daya menunggu hingga transien selesai, dan kemudian mengatur sinyal ke jalur Power_Good . Dan yang pertama mulai beroperasi bukanlah prosesor pusat, tetapi subsistem otonom Intel® Management Engine (ME) atau AMD Secure Technology (ST) yang serupa dengannya. Subsistem ini menjalankan operasinya sendiri, dan kemudian mempersiapkan dan meluncurkan inti pertama dari sebuah prosesor tunggal, yang disebut Prosesor Bootstrap (BSP) .
Sesuai dengan terminologi yang diterima, thread inti / prosesor selanjutnya akan disebut sebagai prosesor bootstrap atau prosesor aplikasi.Seperti di Legacy, prosesor mulai menjalankan instruksi pertama di akhir ruang alamat di 0xFFFFFFF0 . Instruksi ini adalah lompatan ke fase pertama inisialisasi platform - SEC.
Fase SEC (Keamanan)
Dalam fase ini, tugas-tugas berikut harus diselesaikan:
- menangani acara pengaktifan;
- menginisialisasi memori yang cukup untuk fase berikutnya;
- membangun akar kepercayaan pada sistem;
- transfer informasi dan kontrol yang diperlukan ke tahap berikutnya.
Prosesor x86_64 dimulai dalam mode real 16-bit , dan selama inisialisasi awal, BSP ditempatkan dalam mode terlindung 32-bit . Kemudian kode mikro dari semua prosesor yang tersedia diperbarui.
Selanjutnya adalah pemrosesan acara pengaktifan. Ini berarti agregasi informasi tentang status peralatan sehingga pada tahap berikutnya beberapa modul dapat menarik kesimpulan tentang "kesehatan" dan status umum platform.
Selama fase SEC, tidak ada inisialisasi RAM yang terjadi. Sebagai gantinya, cache prosesor gratis ditandai sebagai tidak dapat dibilas dan diubah menjadi RAM sementara. Mode ini disebut mode no-eviction (NEM)... Tumpukan dibuat dalam memori yang dialokasikan, yang akan memungkinkan modul dari fase berikutnya menggunakan bahasa pemrograman tumpukan sebelum menginisialisasi RAM utama.
Selanjutnya, semua prosesor aplikasi (Application Processors, AP) diinisialisasi dengan urutan khusus interupsi antar prosesor (Inter-Processor Interrupt, IPI) yang dikirimkan kepada mereka. Urutan Init IPI - Start-up IPI - membangunkan prosesor aplikasi dan memulai Built-In Self-Test (BIST) di atasnya . Hasil tes dicatat dan diteruskan untuk dianalisis.
Di akhir fase Keamanan, Anda perlu mencari bagian Boot Firmware Volume (BFV), di mana kode yang dapat dieksekusi dari fase berikutnya berada, serta, jika mungkin, temukan bagian kecil lainnya dengan kode (Volume Firmware, FV).
Untuk membenarkan nama fase Keamanan dan menjadi akar kepercayaan, selama pelaksanaan fase ini, kode yang kami rencanakan untuk ditransfer kontrol dapat diperiksa untuk perubahan yang tidak sah dan bagian program yang berbahaya.
Di akhir eksekusi SEC, informasi berikut dikumpulkan:
- ukuran dan alamat Boot Firmware Volume (BFV);
- ukuran dan alamat Volume Firmware (FV) lainnya;
- ukuran dan alamat RAM sementara;
- ukuran dan alamat tumpukan.
Kemudian tahap selanjutnya dimulai - Pre EFI Initialization.
Fase PEI (Pre EFI Initialization)

fase Pre EFI Inisialisasi adalah untuk mengumpulkan informasi tentang perangkat yang terhubung dan menyiapkan jumlah minimum perangkat keras yang diperlukan untuk memulai proses inisialisasi penuh.
Secara desain, fase PEI harus ringan, karena memori cache prosesor terbatas. Selain itu, fase PEI dapat pulih dari kegagalan, sehingga kode fase PEI harus ditempatkan di penyimpanan yang lebih tangguh.
Fase ini terdiri dari kernel yang disebut plugin PEI Foundation dan PEI Module (PEIM) . Bagian sentral dari kernel adalah manajer modul, PEI Dispatcher, yang mengontrol urutan eksekusi modul, dan juga mengatur interaksi antar modul (PEIM-to-PEIM Interface, PPI).
Perhatikan bahwa fase SEC dijalankan dari memori flash pada motherboard, dan hanya pada awal PEI, kode yang dapat dieksekusi yang diperlukan untuk fase ini disalin ke RAM sementara.
Berikutnya adalah Dispatcher PEI. Ini meluncurkan modul PEI dalam urutan tertentu: pertama, modul tanpa ketergantungan, kemudian bergantung pada yang pertama, dan seterusnya sampai modul habis.
Arsitektur fase PEI memungkinkan Anda mengembangkan modul Anda sendiri yang dapat mentransfer hasil aktivitas mereka ke fase berikutnya. Transfer informasi terjadi melalui struktur data khusus Hand-off Block (HOB) .
Dalam proses peluncuran modul PEI, perhatikan hal berikut:
- CPU PEIM - inisialisasi prosesor;
- Platform PEIM - inisialisasi jembatan Utara (termasuk Memory Controller Hub) dan South (I / O Controller Hub);
- Memory Initialization PEIM - inisialisasi RAM utama dan transfer data dari memori sementara ke RAM.
Sebelumnya, inklusi diterima dari fase SEC. Jika peristiwa penyalaan adalah S3 Resume , maka S3 BootScript dijalankan berikutnya , yang memulihkan status prosesor yang disimpan dan semua perangkat yang terhubung, dan kemudian mentransfer kontrol langsung ke OS.
Status S3 (Suspend to RAM) adalah kondisi tidur di mana prosesor dan bagian dari chipset dimatikan dengan hilangnya konteks. Setelah terbangun dari keadaan ini, prosesor mulai menjalankan seolah-olah itu adalah penyalaan normal. Namun alih-alih inisialisasi penuh dan lulus semua pengujian, sistem dibatasi untuk memulihkan status semua perangkat.Ketika dimulai dari keadaan lain, kontrol ditransfer ke fase Lingkungan Eksekusi Driver.
Fase DXE (Driver eXecution Environment)

Phase AHCI Initialization Fase Driver Execution Environment (DXE) difokuskan pada inisialisasi perangkat yang tersisa. Pada saat fase DXE dimulai, prosesor dan memori utama siap untuk bekerja, dan driver DXE tidak tunduk pada batasan sumber daya yang ketat.
Mirip dengan PEI Foundation, fase ini memiliki intinya sendiri - DXE Foundation . Kernel membuat antarmuka yang diperlukan dan memuat tiga jenis layanan DXE:
- Layanan Boot UEFI - layanan waktu boot;
- UEFI Runtime Services - layanan runtime ;
- Layanan DXE adalah layanan khusus yang dibutuhkan oleh inti DXE.
Setelah layanan diinisialisasi, DXE Dispatcher mulai bekerja . Ia menemukan dan memuat driver DXE, yang, pada gilirannya, menyelesaikan inisialisasi perangkat keras.
Di UEFI, tidak ada fase khusus di mana perangkat keras melewati POST (Power-On Self-Test). Sebagai gantinya, setiap modul fase PEI dan DXE melakukan serangkaian pengujiannya sendiri dan mengkomunikasikannya melalui kode POST kepada pengguna dan melalui HOB di fase berikut.Di antara banyak driver yang dimuat pada prosesor x86_64, perlu diperhatikan driver System Management Mode Init (SMM Init). Driver ini mempersiapkan segalanya agar Mode Manajemen Sistem (SMM) berfungsi . SMM adalah mode hak istimewa khusus yang memungkinkan Anda untuk menangguhkan eksekusi kode saat ini (termasuk sistem operasi) dan menjalankan program dari area terlindung SMRAM dalam konteksnya sendiri.
SMM secara tidak resmi dianggap sebagai cincin perlindungan -2. Kernel OS berjalan pada ring 0, dan ring proteksi yang lebih terbatas diberi nomor dari 1 sampai 3. Secara resmi, ring nol dianggap paling istimewa. Namun, hypervisor tervirtualisasi perangkat keras secara konvensional disebut ring -1, dan Intel ME dan AMD ST disebut ring -3.Selain itu, kami mencatat Modul Dukungan Kompatibilitas (CSM) , yang menyediakan kompatibilitas Legacy dan memungkinkan Anda untuk mem-boot OS tanpa dukungan UEFI. Kami akan melihat modul ini lebih detail nanti.
Setelah menginisialisasi semua peralatan, sekarang saatnya memilih perangkat boot.
Fase BDS (Boot Device Select)
Fase Boot Device Select menerapkan kebijakan boot aplikasi UEFI. Meskipun ini adalah fase terpisah, semua layanan, termasuk dispatcher, yang dibuat selama fase DXE tetap tersedia.
Tujuan fase BDS adalah untuk menyelesaikan tugas-tugas berikut:
- inisialisasi perangkat konsol;
- cari perangkat yang dapat Anda gunakan untuk boot;
- upaya untuk mem-boot dari perangkat yang ditemukan dalam urutan prioritas.

area yang dapat di-boot pada perangkat. Beberapa kartu ekspansi, seperti kartu jaringan dan pengontrol RAID, mungkin memiliki "BIOS" sendiri yang disebut Option ROM , atau OpROM . Isi perangkat OpROM dimulai segera setelah deteksi, dan setelah eksekusi, kontrol kembali ke Boot Manager. Semua partisi yang berisi area download disimpan di memori boot manager dan disusun menurut urutan boot. Jika tidak ada aplikasi yang ditemukan, Boot Manager dapat memanggil manajer DXE, jika manajer telah memuat driver tambahan selama pencarian dan perangkat baru mungkin "terbuka" ke manajer boot.
Seperti disebutkan sebelumnya, menggunakan markup Master Boot Record memberlakukan batasan pada ukuran partisi dan jumlahnya pada drive, dan juga menyebabkan ketidaknyamanan tertentu dalam pemeliharaan beberapa sistem operasi. Solusi untuk semua masalah ini adalah bagian dari spesifikasi UEFI - Tabel Partisi GUID.
GPT (Tabel Partisi GUID)
GUID Partition Table adalah format tabel partisi standar yang menggantikan MBR warisan.
Pertama, GPT menggunakan Logical Block Addressing (LBA) daripada pengalamatan Cylinder, Head, Sector (CHS). Mengubah metode pengalamatan memungkinkan GPT bekerja dengan drive hingga 9,4 ZB (9,4 * 10 21 byte) dibandingkan 2,2 TB untuk MBR.
Kedua, tabel partisi telah mengalami perubahan, dan sekarang Anda dapat membuat hingga 2 64 partisi dalam satu drive , meskipun sistem operasi mendukung tidak lebih dari 128 untuk Microsoft Windows dan 256 untuk Linux.
Ketiga, setiap bagian memiliki pengenal jenisnya sendiri, yang menjelaskan tujuan bagian tersebut. Jadi, misalnya, pengenal C12A7328-F81F-11D2-BA4B-00A0C93EC93B secara unik menunjuk ke Partisi Sistem EFI (ESP) tempat Boot Manager dapat mencoba memuat aplikasi.
Selama pengembangan GPT, kompatibilitas dengan MBR tidak terhindarkan. Utilitas disk mungkin tidak mengenali disk GPT dan menghapusnya. Untuk menghindari hal ini, selama partisi GPT, 512 byte pertama diisi dengan MBR Pelindung (MBR Pelindung) - partisi dari satu partisi untuk seluruh drive dengan pengenal sistem 0xEE. Pendekatan ini memungkinkan UEFI untuk memahami bahwa ini bukan MBR asli di depannya, tetapi perangkat lunak lama tanpa dukungan GPT - untuk melihat partisi dengan data dari jenis yang tidak diketahui.
GPT telah membuang area boot untuk mendukung partisi ESP, yang dikenal sebagai dapat di-boot. Boot Manager mengumpulkan informasi tentang semua ESP pada disk, yang memungkinkan Anda memiliki beberapa bootloader pada drive tanpa konflik, satu untuk setiap ESP.
Memuat sistem operasi
Setelah mengumpulkan semua perangkat dan mencari area boot, Boot Manager mulai melakukan booting dalam urutan prioritas boot. Secara umum, kontrol ditransfer ke aplikasi UEFI, yang mulai menjalankan logikanya. Namun, untuk sistem dengan kompatibilitas mode Legacy, mungkin terdapat MBR dalam daftar area boot dan Anda harus membuka CSM, modul dukungan kompatibilitas.
CSM memungkinkan Anda menjalankan sistem operasi yang tidak mendukung UEFI. Untuk memuat sistem operasi tersebut, modul CSM mengemulasi lingkungan tempat sistem operasi "klasik" berada:
- memuat driver Legacy;
- memuat Legacy BIOS;
- menempatkan keluaran video dalam mode yang kompatibel dengan Legacy;
- Membuat struktur data yang diperlukan untuk Legacy di memori yang tidak tersedia di UEFI;
- memuat driver CompatibilitySmm agar SMM berfungsi di Legacy.
Ingatlah bahwa dalam mode Legacy, OS dimulai dalam mode 16-bit, sedangkan di UEFI semuanya bekerja dalam mode 32-bit. CSM memulai bootloader Legacy dalam mode 16-bit dan menyediakan komunikasi dengan driver UEFI 32-bit sesuai kebutuhan.
Phase RT (Run Time)
Awal memuat OS atau boot loader Lama mengarah ke awal fase Waktu Proses. Dalam fase ini, semua layanan DXE (kecuali UEFI Runtime Services) tidak lagi tersedia.
Isi fase RT dapat bervariasi. Mungkin ada OS loader yang familiar dari Legacy - misalnya, GRUB2 atau Windows Boot Manager, yang menempatkan prosesor dalam mode 64-bit dan memulai OS. Tetapi bisa ada aplikasi independen atau hanya kernel dari sistem operasi.
Kernel Linux mulai dari versi 3.3, jika ada tanda CONFIG_EFI_STUB, berubah menjadi aplikasi UEFI biasa dan dapat diluncurkan dari UEFI tanpa menggunakan pemuat boot pihak ketiga.
Seperti dalam kasus Legacy, bootloader atau kernel itu sendiri perlu menempatkan prosesor ke mode 64-bit, memuat semua driver, mengkonfigurasi penjadwal dan menjalankan init. Init, pada gilirannya, meluncurkan proses di ruang pengguna, setelah itu jendela masuk OS muncul.
Kesimpulan
Booting ke UEFI adalah proses yang lebih kompleks, tetapi terstandarisasi, dan sebagian besar bersifat universal. Kesamaan dengan Legacy hanya diamati secara umum, dan iblis, seperti yang Anda tahu, ada dalam detailnya.
Menurut Anda, seberapa cepat Anda dapat sepenuhnya meninggalkan Legacy?
Tuliskan pendapat Anda di kolom komentar.