Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: EFI-ohjelmointi

Deffi [18.07.2016 19:19:23]

#

(Mod. siirsi HackBGRT-projektikeskustelusta.)

Minun on pitänyt jo useamman vuoden ajan perehtyä EFI-ohjelmointiin, mutta en ole saanut aikaiseksi. BIOS, MBR-boottaus sekä 16-bittinen real-moodi ovat tulleet kohtalaisen tutuiksi, mutta ne ovat aika kuolleita teknologioita näin herran vuonna 2016. Siispä tulinkin kyselemään, että miten ja millä työkaluilla EFI-ohjelmointi kannattaa aloittaa?

Ymmärtääkseni EFI käyttää (lähes neitseellistä) Windowsin PE64-tiedostoformaattia, joten kääntäjiä pitäisi teoriassa olla hyvin tarjolla. Kääntäjän lisäksi varmaankin pitää ladata jokin EFI-toolkit; HackBGRT näyttäisi käyttävän gnu-efiä, kun taas joku TianoCore taitaa olla myös suosittu valinta. Mikä näiden tehtävä on ja mikä näistä on vähiten huono? Entä mikä on EFI-koodauksessa käytettävien debuggerien ja emulaattorien laita? Devaus ja testaus oikealla raudalla oletettevasti vaatii jonkinlaisen compile-reboot-segfault -syklin, mikä on tosi hidasta ja perseestä.

Ja vielä yksi kysymys: Kuinka yleiskäyttöisiä ja kattavia emolevyjen mukana tulevat EFI-shelliympäristöt ovat? Olisiko esimerkiksi realistista (ja etäisesti järkevää) toteuttaa vaikkapa SSH-asiakasohjelma tai staattinen HTTP-palvelin EFI-ohjelmana? Itselläni ei ole mitään käsitystä siitä, mihin sovelluksiin EFI taipuu.

Metabolix [18.07.2016 20:16:03]

#

Deffi kirjoitti:

Miten ja millä työkaluilla EFI-ohjelmointi kannattaa aloittaa?

Käänsin gnu-efin ja HackBGRT:n Arch Linuxissa x86_64-w64-mingw32-gcc:llä, kaikki toimi suoraan nätisti. Voin suositella tätä metodia sikäli, että näin ainakin pääsee suoraan koodaamaan. EFI-ohjelmointi tuntuu hyvin samanlaiselta kuin WinAPI-ohjelmointi.

Yritin asentaa TianoCore EDK II:n, mutta se oli niin bloatti, etten osannut käyttää. Ehkä se Windowsissa toimisi helpommin. Yritin myös muuttaa Linuxissa ELFiksi käännettyä ohjelmaa gnu-efi-paketin ld-skriptillä PE:ksi, ei toiminut.

Deffi kirjoitti:

EFI-toolkit; HackBGRT näyttäisi käyttävän gnu-efiä, kun taas joku TianoCore taitaa olla myös suosittu valinta. Mikä näiden tehtävä on ja mikä näistä on vähiten huono?

EFI-toolkit on tämän alustan standardikirjasto ja API. Näistä gnu-efi sisältää vain välttämättömän (mutta toisaalta kaiken tarpeellisen EFI-ohjelmien tekoon), kun taas TianoCore ilmeisesti sisältäisi hienommat välineet koko firmwaren kehittämiseen.

Varsinaisia esimerkkejä tai ohjeita on heikosti. PhoenixWiki tuli tarpeeseen HackBGRT:tä koodatessa, ja katsoin malliksi myös muutamia muiden tekemiä ohjelmia (mm. systemd-boot).

Deffi kirjoitti:

Entä mikä on EFI-koodauksessa käytettävien debuggerien ja emulaattorien laita?

Emulaattoriksi käy QEMU. ”OVMF contains a sample UEFI firmware for QEMU and KVM.”

# Arch Linux:
pacman -S qemu ovmf
qemu-system-x86_64 -enable-kvm -net none -m 128 \
  -drive file=/usr/share/ovmf/ovmf_x64.bin,format=raw,if=pflash,readonly \
  -drive file=fat:.,format=raw

PutkaOS:n yhteydessä ainakin QEMU ja gdb toimivat hyvin yhdessä, EFI:n kanssa en ole testannut.

Deffi kirjoitti:

Kuinka yleiskäyttöisiä ja kattavia emolevyjen mukana tulevat EFI-shelliympäristöt ovat? Olisiko esimerkiksi realistista (ja etäisesti järkevää) toteuttaa vaikkapa SSH-asiakasohjelma tai staattinen HTTP-palvelin EFI-ohjelmana?

Varmaan onnistuisi helpostikin. Kokonainen käyttöjärjestelmä EFI:n päälle voisi olla ihan kiva projekti. Moniajo tuosta taitaa kuitenkin lähtökohtaisesti puuttua.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta